summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/analysis/JarIndex.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/cuchaz/enigma/analysis/JarIndex.java')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/JarIndex.java14
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.*;
15import cuchaz.enigma.bytecode.AccessFlags; 15import cuchaz.enigma.bytecode.AccessFlags;
16import cuchaz.enigma.mapping.*; 16import cuchaz.enigma.mapping.*;
17import cuchaz.enigma.mapping.entry.*; 17import cuchaz.enigma.mapping.entry.*;
18import org.objectweb.asm.ClassReader;
19import org.objectweb.asm.ClassVisitor;
18import org.objectweb.asm.Opcodes; 20import org.objectweb.asm.Opcodes;
19 21
20import java.util.*; 22import 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()) {