From d72aad82c795726efcf6145f5a4172e4c8d3a5b2 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sat, 19 May 2018 20:38:14 +0200 Subject: Signature refactoring --- src/main/java/cuchaz/enigma/analysis/EntryRenamer.java | 18 ++++++++++++++++-- .../java/cuchaz/enigma/analysis/IndexClassVisitor.java | 6 +++--- .../cuchaz/enigma/analysis/IndexReferenceVisitor.java | 10 ++++------ src/main/java/cuchaz/enigma/analysis/JarIndex.java | 14 +++++++------- .../java/cuchaz/enigma/analysis/TranslationIndex.java | 4 ++-- 5 files changed, 32 insertions(+), 20 deletions(-) (limited to 'src/main/java/cuchaz/enigma/analysis') diff --git a/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java b/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java index 656fa32..e37c1d0 100644 --- a/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java +++ b/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java @@ -122,10 +122,22 @@ public class EntryRenamer { return (T) new ClassEntry(renameClassesInThing(renames, classEntry.getClassName())); } else if (thing instanceof FieldDefEntry) { FieldDefEntry fieldEntry = (FieldDefEntry) thing; - return (T) new FieldDefEntry(renameClassesInThing(renames, fieldEntry.getOwnerClassEntry()), fieldEntry.getName(), renameClassesInThing(renames, fieldEntry.getDesc()), fieldEntry.getAccess()); + return (T) new FieldDefEntry( + renameClassesInThing(renames, fieldEntry.getOwnerClassEntry()), + fieldEntry.getName(), + renameClassesInThing(renames, fieldEntry.getDesc()), + renameClassesInThing(renames, fieldEntry.getSignature()), + fieldEntry.getAccess() + ); } else if (thing instanceof MethodDefEntry) { MethodDefEntry methodEntry = (MethodDefEntry) thing; - return (T) new MethodDefEntry(renameClassesInThing(renames, methodEntry.getOwnerClassEntry()), methodEntry.getName(), renameClassesInThing(renames, methodEntry.getDesc()), methodEntry.getAccess()); + return (T) new MethodDefEntry( + renameClassesInThing(renames, methodEntry.getOwnerClassEntry()), + methodEntry.getName(), + renameClassesInThing(renames, methodEntry.getDesc()), + renameClassesInThing(renames, methodEntry.getSignature()), + methodEntry.getAccess() + ); } else if (thing instanceof LocalVariableEntry) { LocalVariableEntry argumentEntry = (LocalVariableEntry) thing; return (T) new LocalVariableEntry(renameClassesInThing(renames, argumentEntry.getOwnerEntry()), argumentEntry.getIndex(), argumentEntry.getName()); @@ -138,6 +150,8 @@ public class EntryRenamer { return (T) ((MethodDescriptor) thing).remap(className -> renameClassesInThing(renames, className)); } else if (thing instanceof TypeDescriptor) { return (T) ((TypeDescriptor) thing).remap(className -> renameClassesInThing(renames, className)); + } else if (thing instanceof Signature) { + return (T) ((Signature) thing).remap(className -> renameClassesInThing(renames, className)); } return thing; diff --git a/src/main/java/cuchaz/enigma/analysis/IndexClassVisitor.java b/src/main/java/cuchaz/enigma/analysis/IndexClassVisitor.java index 7828fa9..69fe54f 100644 --- a/src/main/java/cuchaz/enigma/analysis/IndexClassVisitor.java +++ b/src/main/java/cuchaz/enigma/analysis/IndexClassVisitor.java @@ -16,14 +16,14 @@ public class IndexClassVisitor extends ClassVisitor { @Override public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { - this.classEntry = this.index.indexClass(access, name, superName, interfaces); + this.classEntry = this.index.indexClass(access, name, signature, superName, interfaces); super.visit(version, access, name, signature, superName, interfaces); } @Override public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { if (this.classEntry != null) { - this.index.indexField(this.classEntry, access, name, desc); + this.index.indexField(this.classEntry, access, name, desc, signature); } return super.visitField(access, name, desc, signature, value); } @@ -31,7 +31,7 @@ public class IndexClassVisitor extends ClassVisitor { @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { if (this.classEntry != null) { - this.index.indexMethod(this.classEntry, access, name, desc); + this.index.indexMethod(this.classEntry, access, name, desc, signature); } return super.visitMethod(access, name, desc, signature, exceptions); } diff --git a/src/main/java/cuchaz/enigma/analysis/IndexReferenceVisitor.java b/src/main/java/cuchaz/enigma/analysis/IndexReferenceVisitor.java index bd64bfc..c05281b 100644 --- a/src/main/java/cuchaz/enigma/analysis/IndexReferenceVisitor.java +++ b/src/main/java/cuchaz/enigma/analysis/IndexReferenceVisitor.java @@ -1,22 +1,20 @@ package cuchaz.enigma.analysis; import cuchaz.enigma.bytecode.AccessFlags; -import cuchaz.enigma.mapping.*; +import cuchaz.enigma.mapping.MethodDescriptor; +import cuchaz.enigma.mapping.Signature; import cuchaz.enigma.mapping.entry.ClassEntry; import cuchaz.enigma.mapping.entry.MethodDefEntry; -import cuchaz.enigma.mapping.entry.ReferencedEntryPool; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; public class IndexReferenceVisitor extends ClassVisitor { private final JarIndex index; - private final ReferencedEntryPool entryPool; private ClassEntry classEntry; - public IndexReferenceVisitor(JarIndex index, ReferencedEntryPool entryPool, int api) { + public IndexReferenceVisitor(JarIndex index, int api) { super(api); this.index = index; - this.entryPool = entryPool; } @Override @@ -26,7 +24,7 @@ public class IndexReferenceVisitor extends ClassVisitor { @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - MethodDefEntry entry = new MethodDefEntry(classEntry, name, new MethodDescriptor(desc), new AccessFlags(access)); + MethodDefEntry entry = new MethodDefEntry(classEntry, name, new MethodDescriptor(desc), Signature.createSignature(signature), new AccessFlags(access)); return new Method(this.index, entry, this.api); } diff --git a/src/main/java/cuchaz/enigma/analysis/JarIndex.java b/src/main/java/cuchaz/enigma/analysis/JarIndex.java index 54dd506..3479c5d 100644 --- a/src/main/java/cuchaz/enigma/analysis/JarIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/JarIndex.java @@ -61,7 +61,7 @@ public class JarIndex { jar.visit(node -> node.accept(new IndexClassVisitor(this, Opcodes.ASM5))); // step 3: index field, method, constructor references - jar.visit(node -> node.accept(new IndexReferenceVisitor(this, entryPool, Opcodes.ASM5))); + jar.visit(node -> node.accept(new IndexReferenceVisitor(this, Opcodes.ASM5))); // step 4: index bridged methods for (MethodDefEntry methodEntry : methods.values()) { @@ -95,24 +95,24 @@ public class JarIndex { } } - protected ClassDefEntry indexClass(int access, String name, String superName, String[] interfaces) { + protected ClassDefEntry indexClass(int access, String name, String signature, String superName, String[] interfaces) { for (String interfaceName : interfaces) { if (name.equals(interfaceName)) { throw new IllegalArgumentException("Class cannot be its own interface! " + name); } } - return this.translationIndex.indexClass(access, name, superName, interfaces); + return this.translationIndex.indexClass(access, name, signature, superName, interfaces); } - protected void indexField(ClassDefEntry owner, int access, String name, String desc) { - FieldDefEntry fieldEntry = new FieldDefEntry(owner, name, new TypeDescriptor(desc), new AccessFlags(access)); + protected void indexField(ClassDefEntry owner, int access, String name, String desc, String signature) { + FieldDefEntry fieldEntry = new FieldDefEntry(owner, name, new TypeDescriptor(desc), Signature.createTypedSignature(signature), new AccessFlags(access)); this.translationIndex.indexField(fieldEntry); this.access.put(fieldEntry, Access.get(access)); this.fields.put(fieldEntry.getOwnerClassEntry(), fieldEntry); } - protected void indexMethod(ClassDefEntry owner, int access, String name, String desc) { - MethodDefEntry methodEntry = new MethodDefEntry(owner, name, new MethodDescriptor(desc), new AccessFlags(access)); + protected void indexMethod(ClassDefEntry owner, int access, String name, String desc, String signature) { + MethodDefEntry methodEntry = new MethodDefEntry(owner, name, new MethodDescriptor(desc), Signature.createSignature(signature), new AccessFlags(access)); this.translationIndex.indexMethod(methodEntry); this.access.put(methodEntry, Access.get(access)); this.methods.put(methodEntry.getOwnerClassEntry(), methodEntry); diff --git a/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java b/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java index 0c8ed9c..644a3f2 100644 --- a/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java @@ -76,8 +76,8 @@ public class TranslationIndex { } } - protected ClassDefEntry indexClass(int access, String name, String superName, String[] interfaces) { - ClassDefEntry classEntry = new ClassDefEntry(name, new AccessFlags(access)); + protected ClassDefEntry indexClass(int access, String name, String signature, String superName, String[] interfaces) { + ClassDefEntry classEntry = new ClassDefEntry(name, Signature.createSignature(signature), new AccessFlags(access)); if (isJre(classEntry)) { return null; } -- cgit v1.2.3