diff options
Diffstat (limited to 'src/main/java/cuchaz/enigma/analysis/JarIndex.java')
| -rw-r--r-- | src/main/java/cuchaz/enigma/analysis/JarIndex.java | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/JarIndex.java b/src/main/java/cuchaz/enigma/analysis/JarIndex.java index 158df4b..e8bda8e 100644 --- a/src/main/java/cuchaz/enigma/analysis/JarIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/JarIndex.java | |||
| @@ -15,6 +15,8 @@ import com.google.common.collect.*; | |||
| 15 | import cuchaz.enigma.bytecode.AccessFlags; | 15 | import cuchaz.enigma.bytecode.AccessFlags; |
| 16 | import cuchaz.enigma.mapping.*; | 16 | import cuchaz.enigma.mapping.*; |
| 17 | import cuchaz.enigma.mapping.entry.*; | 17 | import cuchaz.enigma.mapping.entry.*; |
| 18 | import org.objectweb.asm.ClassReader; | ||
| 19 | import org.objectweb.asm.ClassVisitor; | ||
| 18 | import org.objectweb.asm.Opcodes; | 20 | import org.objectweb.asm.Opcodes; |
| 19 | 21 | ||
| 20 | import java.util.*; | 22 | import java.util.*; |
| @@ -62,10 +64,15 @@ public class JarIndex { | |||
| 62 | obfClassEntries.addAll(jar.getClassEntries()); | 64 | obfClassEntries.addAll(jar.getClassEntries()); |
| 63 | 65 | ||
| 64 | // step 2: index classes, fields, methods, interfaces | 66 | // step 2: index classes, fields, methods, interfaces |
| 65 | jar.visit(node -> node.accept(new IndexClassVisitor(this, Opcodes.ASM5))); | 67 | if (buildInnerClasses) { |
| 68 | // + step 5: index inner classes | ||
| 69 | jar.visitReader(name -> new IndexClassVisitor(this, Opcodes.ASM5, new IndexInnerClassVisitor(this, Opcodes.ASM5)), ClassReader.SKIP_CODE); | ||
| 70 | } else { | ||
| 71 | jar.visitReader(name -> new IndexClassVisitor(this, Opcodes.ASM5), ClassReader.SKIP_CODE); | ||
| 72 | } | ||
| 66 | 73 | ||
| 67 | // step 3: index field, method, constructor references | 74 | // step 3: index field, method, constructor references |
| 68 | jar.visit(node -> node.accept(new IndexReferenceVisitor(this, Opcodes.ASM5))); | 75 | jar.visitReader(name -> new IndexReferenceVisitor(this, Opcodes.ASM5), ClassReader.SKIP_FRAMES); |
| 69 | 76 | ||
| 70 | // step 4: index access and bridged methods | 77 | // step 4: index access and bridged methods |
| 71 | for (MethodDefEntry methodEntry : methods.values()) { | 78 | for (MethodDefEntry methodEntry : methods.values()) { |
| @@ -79,9 +86,6 @@ public class JarIndex { | |||
| 79 | } | 86 | } |
| 80 | 87 | ||
| 81 | if (buildInnerClasses) { | 88 | if (buildInnerClasses) { |
| 82 | // step 5: index inner classes and anonymous classes | ||
| 83 | jar.visit(node -> node.accept(new IndexInnerClassVisitor(this, Opcodes.ASM5))); | ||
| 84 | |||
| 85 | // step 6: update other indices with inner class info | 89 | // step 6: update other indices with inner class info |
| 86 | Map<String, String> renames = Maps.newHashMap(); | 90 | Map<String, String> renames = Maps.newHashMap(); |
| 87 | for (ClassEntry innerClassEntry : this.innerClassesByOuter.values()) { | 91 | for (ClassEntry innerClassEntry : this.innerClassesByOuter.values()) { |