diff --git a/build.gradle b/build.gradle index 3897d8d..80edc24 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ repositories { } dependencies { - implementation 'ftbsc:lll:0.5.0' + implementation 'ftbsc:lll:0.5.1' implementation 'com.google.auto.service:auto-service-annotations:1.1.0' annotationProcessor 'com.google.auto.service:auto-service:1.1.0' } diff --git a/src/main/java/ftbsc/lll/mapper/MapperProvider.java b/src/main/java/ftbsc/lll/mapper/MapperProvider.java index 5ac9178..7dc8ade 100644 --- a/src/main/java/ftbsc/lll/mapper/MapperProvider.java +++ b/src/main/java/ftbsc/lll/mapper/MapperProvider.java @@ -36,7 +36,7 @@ public class MapperProvider { */ private void loadMappers() { this.loadedMappers = new HashSet<>(); - for(IMappingFormat mapper: ServiceLoader.load(IMappingFormat.class)) + for(IMappingFormat mapper: ServiceLoader.load(IMappingFormat.class, this.getClass().getClassLoader())) this.loadedMappers.add(mapper); if(this.loadedMappers.isEmpty()) throw new RuntimeException("Something went wrong: no mapper types were loaded successfully!"); @@ -79,7 +79,9 @@ public class MapperProvider { } } - return new BufferedReader(new InputStreamReader(targetStream, - StandardCharsets.UTF_8)).lines().collect(Collectors.toList()); + return new BufferedReader(new InputStreamReader( + targetStream, + StandardCharsets.UTF_8) + ).lines().collect(Collectors.toList()); } } diff --git a/src/main/java/ftbsc/lll/mapper/data/ClassData.java b/src/main/java/ftbsc/lll/mapper/data/ClassData.java index 04592fd..f8c6901 100644 --- a/src/main/java/ftbsc/lll/mapper/data/ClassData.java +++ b/src/main/java/ftbsc/lll/mapper/data/ClassData.java @@ -87,7 +87,7 @@ public class ClassData { */ public ClassData generateReverseMappings(Mapper mapper) { ClassData reverse = new ClassData(this.nameMapped, this.name); - this.methods.forEach((signature, data) -> reverse.addMethod(nameMapped, signature.name, + this.methods.forEach((signature, data) -> reverse.addMethod(data.nameMapped, signature.name, MappingUtils.mapMethodDescriptor(signature.descriptor, mapper, false))); this.fields.forEach((name, data) -> reverse.addField(data.nameMapped, name, data.descriptor)); return reverse; diff --git a/src/main/java/ftbsc/lll/mapper/data/MethodSignature.java b/src/main/java/ftbsc/lll/mapper/data/MethodSignature.java index d7515a8..b1f30f2 100644 --- a/src/main/java/ftbsc/lll/mapper/data/MethodSignature.java +++ b/src/main/java/ftbsc/lll/mapper/data/MethodSignature.java @@ -18,7 +18,7 @@ public class MethodSignature { /** * Constructs a new {@link MethodSignature}. The parameters should be - * either plain or obfuscated in the same way; + * either plain or mapped in the same way; * @param name the method name * @param descriptor the method descriptor */ @@ -37,7 +37,7 @@ public class MethodSignature { if(this == o) return true; if(o == null || getClass() != o.getClass()) return false; MethodSignature signature = (MethodSignature) o; - return Objects.equals(name, signature.name) && Objects.equals(descriptor, signature.descriptor); + return Objects.equals(this.name, signature.name) && Objects.equals(this.descriptor, signature.descriptor); } /** @@ -46,6 +46,6 @@ public class MethodSignature { */ @Override public int hashCode() { - return Objects.hash(name, descriptor); + return Objects.hash(this.name, this.descriptor); } } diff --git a/src/main/java/ftbsc/lll/mapper/impl/SRGMapper.java b/src/main/java/ftbsc/lll/mapper/impl/SRGMapper.java index b4d51af..55bc54b 100644 --- a/src/main/java/ftbsc/lll/mapper/impl/SRGMapper.java +++ b/src/main/java/ftbsc/lll/mapper/impl/SRGMapper.java @@ -78,17 +78,17 @@ public class SRGMapper implements IMappingFormat { String[] split = tokens[1].split("/"); String memberName = split[split.length - 1]; String parent = tokens[1].substring(0, tokens[1].length() - split[split.length - 1].length() - 1); - int obfPosition = field ? 2 : 3; - split = tokens[obfPosition].split("/"); - String memberNameObf = split[split.length - 1]; - String parentObf = tokens[obfPosition].substring(0, tokens[obfPosition].length() - split[split.length - 1].length() - 1); - this.registerMember(mapper, invertedMapper, parent, parentObf, memberName, memberNameObf, + int mappedPosition = field ? 2 : 3; + split = tokens[mappedPosition].split("/"); + String memberNameMapped = split[split.length - 1]; + String parentMapped = tokens[mappedPosition].substring(0, tokens[mappedPosition].length() - split[split.length - 1].length() - 1); + this.registerMember(mapper, invertedMapper, parent, parentMapped, memberName, memberNameMapped, field ? null : tokens[2], field ? null : tokens[4]); return true; } /** - * Registers a class in the mapper, if it isn't already. + * Registers a class in the mapper, if it isn't already known. * @param mapper the {@link Mapper} with normal mappings * @param invertedMapper the {@link Mapper} with inverted mappings * @param name the name @@ -118,12 +118,10 @@ public class SRGMapper implements IMappingFormat { this.registerClass(mapper, invertedMapper, parent, parentMapped); ClassData data = mapper.getClassData(parent); ClassData dataReverse = invertedMapper.getClassData(data.nameMapped); - if(descriptor == null || descriptorMapped == null) { - //field + if(descriptor == null || descriptorMapped == null) { // field data.addField(name, nameMapped); dataReverse.addField(nameMapped, name); - } else { - //method + } else { // method data.addMethod(name, nameMapped, descriptor); dataReverse.addMethod(nameMapped, name, descriptorMapped); } diff --git a/src/main/java/ftbsc/lll/mapper/impl/TinyV2Mapper.java b/src/main/java/ftbsc/lll/mapper/impl/TinyV2Mapper.java index e60b7ed..d91e955 100644 --- a/src/main/java/ftbsc/lll/mapper/impl/TinyV2Mapper.java +++ b/src/main/java/ftbsc/lll/mapper/impl/TinyV2Mapper.java @@ -28,41 +28,46 @@ public class TinyV2Mapper implements IMappingFormat { for(int i = 1; i < lines.size(); i++) { String currentLine = lines.get(i); String[] tokens = currentLine.trim().split("\t"); - int tabCount = currentLine.indexOf(tokens[0]); //get number of leading tabs + int tabCount = currentLine.indexOf(tokens[0]); // get number of leading tabs switch(tabCount) { - case 0: //classes + case 0: // classes if(tokens.length == 3) { if(tokens[0].charAt(0) == 'c') { result.getRawMappings().put(tokens[1], new ClassData(tokens[1], tokens[2])); currentClass = tokens[1]; } else if(!ignoreErrors) - throw new MalformedMappingsException(i, "root-level element must be class"); + throw new MalformedMappingsException(i + 1, "root-level element must be class"); continue; } break; - case 1: //class members + case 1: // class members if(currentClass.isEmpty()) { if(ignoreErrors) continue; - else throw new MalformedMappingsException(i, "class member without parent class"); + else throw new MalformedMappingsException(i + 1, "class member without parent class"); } switch(tokens[0].charAt(0)) { - case 'm': //methods + case 'm': // methods if(tokens.length == 4) - break; - result.getClassData(currentClass).addMethod(tokens[2], tokens[3], tokens[1]); + result.getClassData(currentClass).addMethod(tokens[2], tokens[3], tokens[1]); + else if(!ignoreErrors) + throw new MalformedMappingsException(i + 1, "incomplete method member"); continue; - case 'f': //fields + case 'f': // fields if(tokens.length == 4) - break; - result.getClassData(currentClass).addField(tokens[2], tokens[3], tokens[1]); + result.getClassData(currentClass).addField(tokens[2], tokens[3], tokens[1]); + else if(!ignoreErrors) + throw new MalformedMappingsException(i + 1, "incomplete field member"); continue; } break; - case 2: //parameters, our mappers don't really support those - break; + case 2: // parameters, our mappers don't really support those + continue; + default: + if(tokens[0].charAt(0) == 'c') + continue; // skip comments + if(!ignoreErrors) + throw new MalformedMappingsException(i + 1, "wrong number of tab-separated tokens"); } - if(!ignoreErrors) - throw new MalformedMappingsException(i, "wrong number of tab-separated tokens"); } return result; }