diff options
Diffstat (limited to 'src/main/java/ftbsc/lll/processor/tools/containers')
3 files changed, 23 insertions, 46 deletions
diff --git a/src/main/java/ftbsc/lll/processor/tools/containers/ClassContainer.java b/src/main/java/ftbsc/lll/processor/tools/containers/ClassContainer.java index 2c10dd6..b145e71 100644 --- a/src/main/java/ftbsc/lll/processor/tools/containers/ClassContainer.java +++ b/src/main/java/ftbsc/lll/processor/tools/containers/ClassContainer.java @@ -1,6 +1,7 @@ package ftbsc.lll.processor.tools.containers; import ftbsc.lll.exceptions.TargetNotFoundException; +import ftbsc.lll.mapper.tools.data.ClassData; import ftbsc.lll.processor.annotations.Find; import ftbsc.lll.processor.annotations.Patch; import ftbsc.lll.processor.tools.ProcessorOptions; @@ -20,15 +21,9 @@ import static ftbsc.lll.processor.tools.ASTUtils.*; */ public class ClassContainer { /** - * The fully-qualified name of the class. + * The {@link ClassData} for the class represented by this container. */ - public final String fqn; - - /** - * The obfuscated fully-qualified name of the class. - * If the mapper passed is null, then this will be identical to {@link #fqn} - */ - public final String fqnObf; + public final ClassData data; /** * The {@link Element} corresponding to the class. @@ -84,8 +79,7 @@ public class ClassContainer { throw new TargetNotFoundException("class", inner); } } - this.fqn = fqnBuilder.toString(); - this.fqnObf = findClassName(this.fqn, options); + this.data = getClassData(fqnBuilder.toString(), options.mapper); this.elem = elem; } @@ -131,6 +125,6 @@ public class ClassContainer { public static ClassContainer findOrFallback(ClassContainer fallback, Patch p, Find f, ProcessorOptions options) { if(f == null) return ClassContainer.from(p, Patch::value, p.innerName(), options); ClassContainer cl = ClassContainer.from(f, Find::value, f.innerName(), options); - return cl.fqn.equals("java.lang.Object") ? fallback : cl; + return cl.data.name.equals("java/lang/Object") ? fallback : cl; } } diff --git a/src/main/java/ftbsc/lll/processor/tools/containers/FieldContainer.java b/src/main/java/ftbsc/lll/processor/tools/containers/FieldContainer.java index 9154193..6ef4741 100644 --- a/src/main/java/ftbsc/lll/processor/tools/containers/FieldContainer.java +++ b/src/main/java/ftbsc/lll/processor/tools/containers/FieldContainer.java @@ -2,6 +2,7 @@ package ftbsc.lll.processor.tools.containers; import ftbsc.lll.exceptions.AmbiguousDefinitionException; import ftbsc.lll.mapper.tools.MappingUtils; +import ftbsc.lll.mapper.tools.data.FieldData; import ftbsc.lll.processor.annotations.Find; import ftbsc.lll.processor.annotations.Patch; import ftbsc.lll.processor.tools.ProcessorOptions; @@ -21,9 +22,9 @@ import static ftbsc.lll.processor.tools.ASTUtils.*; */ public class FieldContainer { /** - * The name of the field. + * The {@link FieldData} for the field represented by this container. */ - public final String name; + public final FieldData data; /** * The descriptor of the field. @@ -31,12 +32,6 @@ public class FieldContainer { public final String descriptor; /** - * The obfuscated name of the field. - * If the mapper passed is null, then this will be identical to {@link #name}. - */ - public final String nameObf; - - /** * The obfuscated descriptor of the field. * If the mapper passed is null, then this will be identical to {@link #descriptor}. */ @@ -67,16 +62,15 @@ public class FieldContainer { if(descriptor == null) throw new AmbiguousDefinitionException("Cannot use name-based lookups for fields of unverifiable classes!"); this.elem = null; - this.name = name; this.descriptor = descriptor; } else { this.elem = (VariableElement) findMember(parent, name, descriptor, descriptor != null, true, options.env); - this.name = this.elem.getSimpleName().toString(); this.descriptor = descriptorFromType(this.elem.asType(), options.env); + name = this.elem.getSimpleName().toString(); } + this.data = getFieldData(parent.data.name, name, options.mapper); this.descriptorObf = options.mapper == null ? this.descriptor : MappingUtils.mapType(Type.getType(this.descriptor), options.mapper, false).getDescriptor(); - this.nameObf = findMemberName(parent.fqn, this.name, null, options.mapper); } /** @@ -96,7 +90,7 @@ public class FieldContainer { ClassContainer.from((TypeElement) finder.getEnclosingElement(), options), patchAnn, f, options ); - String name = f.name().equals("") ? finder.getSimpleName().toString() : f.name(); + String name = f.name().isEmpty() ? finder.getSimpleName().toString() : f.name(); String descriptor; TypeMirror fieldType = getTypeFromAnnotation(f, Find::type, options.env); if(fieldType.toString().equals("java.lang.Object")) { @@ -106,7 +100,7 @@ public class FieldContainer { descriptor = //jank af but this is temporary anyway "L" + ClassContainer.from( f, Find::type, f.typeInner(), options - ).fqnObf.replace('.', '/') + ";"; + ).data.nameMapped + ";"; else descriptor = descriptorFromType(fieldType, options.env); } diff --git a/src/main/java/ftbsc/lll/processor/tools/containers/MethodContainer.java b/src/main/java/ftbsc/lll/processor/tools/containers/MethodContainer.java index 2878ec6..266858d 100644 --- a/src/main/java/ftbsc/lll/processor/tools/containers/MethodContainer.java +++ b/src/main/java/ftbsc/lll/processor/tools/containers/MethodContainer.java @@ -3,6 +3,7 @@ package ftbsc.lll.processor.tools.containers; import ftbsc.lll.exceptions.AmbiguousDefinitionException; import ftbsc.lll.exceptions.TargetNotFoundException; import ftbsc.lll.mapper.tools.MappingUtils; +import ftbsc.lll.mapper.tools.data.MethodData; import ftbsc.lll.processor.annotations.Find; import ftbsc.lll.processor.annotations.Patch; import ftbsc.lll.processor.annotations.Target; @@ -20,24 +21,14 @@ import static ftbsc.lll.processor.tools.ASTUtils.*; */ public class MethodContainer { /** - * The name of the method. + * The {@link MethodData} for the method represented by this container. */ - public final String name; - - /** - * The descriptor of the method. - */ - public final String descriptor; - - /** - * The obfuscated name of the method. - * If the mapper passed is null, then this will be identical to {@link #name}. - */ - public final String nameObf; + public final MethodData data; /** * The obfuscated descriptor of the field. - * If the mapper passed is null, then this will be identical to {@link #descriptor}. + * If the mapper passed is null, this will be identical to the one inside + * {@link #data}. */ public final String descriptorObf; @@ -69,19 +60,17 @@ public class MethodContainer { if(descriptor == null) throw new AmbiguousDefinitionException("Cannot use name-based lookups for methods of unverifiable classes!"); this.elem = null; - this.name = name; - this.descriptor = descriptor; } else { ExecutableElement tmp = (ExecutableElement) findMember( parent, name, descriptor, descriptor != null && strict,false, options.env ); this.elem = bridge ? findSyntheticBridge((TypeElement) this.parent.elem, tmp, options.env) : tmp; - this.name = this.elem.getSimpleName().toString(); - this.descriptor = descriptorFromExecutableElement(this.elem, options.env); + name = this.elem.getSimpleName().toString(); + descriptor = descriptorFromExecutableElement(this.elem, options.env); } - this.descriptorObf = options.mapper == null ? this.descriptor - : MappingUtils.mapMethodDescriptor(this.descriptor, options.mapper, false); - this.nameObf = findMemberName(parent.fqn, this.name, this.descriptor, options.mapper); + this.data = getMethodData(parent.data.name, name, descriptor, options.mapper); + this.descriptorObf = options.mapper == null ? this.data.signature.descriptor + : MappingUtils.mapMethodDescriptor(this.data.signature.descriptor, options.mapper, false); } /** @@ -101,7 +90,7 @@ public class MethodContainer { ClassContainer parent = ClassContainer.findOrFallback( ClassContainer.from((TypeElement) stub.getEnclosingElement(), options), patchAnn, f, options ); - String name = !t.methodName().equals("") + String name = !t.methodName().isEmpty() ? t.methodName() //name was specified in target : stub.getSimpleName().toString(); String descriptor = t.strict() |