summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/analysis/JarIndex.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/analysis/JarIndex.java')
-rw-r--r--src/cuchaz/enigma/analysis/JarIndex.java31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/cuchaz/enigma/analysis/JarIndex.java b/src/cuchaz/enigma/analysis/JarIndex.java
index 947453e..deacf16 100644
--- a/src/cuchaz/enigma/analysis/JarIndex.java
+++ b/src/cuchaz/enigma/analysis/JarIndex.java
@@ -23,6 +23,7 @@ import javassist.CannotCompileException;
23import javassist.CtBehavior; 23import javassist.CtBehavior;
24import javassist.CtClass; 24import javassist.CtClass;
25import javassist.CtConstructor; 25import javassist.CtConstructor;
26import javassist.CtField;
26import javassist.CtMethod; 27import javassist.CtMethod;
27import javassist.NotFoundException; 28import javassist.NotFoundException;
28import javassist.bytecode.AccessFlag; 29import javassist.bytecode.AccessFlag;
@@ -55,6 +56,7 @@ public class JarIndex
55{ 56{
56 private Set<ClassEntry> m_obfClassEntries; 57 private Set<ClassEntry> m_obfClassEntries;
57 private Ancestries m_ancestries; 58 private Ancestries m_ancestries;
59 private Map<Entry,Access> m_access;
58 private Multimap<String,MethodEntry> m_methodImplementations; 60 private Multimap<String,MethodEntry> m_methodImplementations;
59 private Multimap<BehaviorEntry,EntryReference<BehaviorEntry,BehaviorEntry>> m_behaviorReferences; 61 private Multimap<BehaviorEntry,EntryReference<BehaviorEntry,BehaviorEntry>> m_behaviorReferences;
60 private Multimap<FieldEntry,EntryReference<FieldEntry,BehaviorEntry>> m_fieldReferences; 62 private Multimap<FieldEntry,EntryReference<FieldEntry,BehaviorEntry>> m_fieldReferences;
@@ -67,6 +69,7 @@ public class JarIndex
67 { 69 {
68 m_obfClassEntries = Sets.newHashSet(); 70 m_obfClassEntries = Sets.newHashSet();
69 m_ancestries = new Ancestries(); 71 m_ancestries = new Ancestries();
72 m_access = Maps.newHashMap();
70 m_methodImplementations = HashMultimap.create(); 73 m_methodImplementations = HashMultimap.create();
71 m_behaviorReferences = HashMultimap.create(); 74 m_behaviorReferences = HashMultimap.create();
72 m_fieldReferences = HashMultimap.create(); 75 m_fieldReferences = HashMultimap.create();
@@ -89,7 +92,24 @@ public class JarIndex
89 m_obfClassEntries.add( classEntry ); 92 m_obfClassEntries.add( classEntry );
90 } 93 }
91 94
92 // step 2: index the types, methods 95 // step 2: index method/field access
96 for( CtClass c : JarClassIterator.classes( jar ) )
97 {
98 fixClass( c );
99 ClassEntry classEntry = new ClassEntry( Descriptor.toJvmName( c.getName() ) );
100 for( CtField field : c.getDeclaredFields() )
101 {
102 FieldEntry fieldEntry = new FieldEntry( classEntry, field.getName() );
103 m_access.put( fieldEntry, Access.get( field ) );
104 }
105 for( CtBehavior behavior : c.getDeclaredBehaviors() )
106 {
107 MethodEntry methodEntry = new MethodEntry( classEntry, behavior.getName(), behavior.getSignature() );
108 m_access.put( methodEntry, Access.get( behavior ) );
109 }
110 }
111
112 // step 3: index the types, methods
93 for( CtClass c : JarClassIterator.classes( jar ) ) 113 for( CtClass c : JarClassIterator.classes( jar ) )
94 { 114 {
95 fixClass( c ); 115 fixClass( c );
@@ -105,7 +125,7 @@ public class JarIndex
105 } 125 }
106 } 126 }
107 127
108 // step 3: index inner classes and anonymous classes 128 // step 4: index inner classes and anonymous classes
109 for( CtClass c : JarClassIterator.classes( jar ) ) 129 for( CtClass c : JarClassIterator.classes( jar ) )
110 { 130 {
111 fixClass( c ); 131 fixClass( c );
@@ -132,7 +152,7 @@ public class JarIndex
132 } 152 }
133 } 153 }
134 154
135 // step 4: update other indices with inner class info 155 // step 5: update other indices with inner class info
136 Map<String,String> renames = Maps.newHashMap(); 156 Map<String,String> renames = Maps.newHashMap();
137 for( Map.Entry<String,String> entry : m_outerClasses.entrySet() ) 157 for( Map.Entry<String,String> entry : m_outerClasses.entrySet() )
138 { 158 {
@@ -522,6 +542,11 @@ public class JarIndex
522 return m_ancestries; 542 return m_ancestries;
523 } 543 }
524 544
545 public Access getAccess( Entry entry )
546 {
547 return m_access.get( entry );
548 }
549
525 public boolean isMethodImplemented( MethodEntry methodEntry ) 550 public boolean isMethodImplemented( MethodEntry methodEntry )
526 { 551 {
527 Collection<MethodEntry> implementations = m_methodImplementations.get( methodEntry.getClassName() ); 552 Collection<MethodEntry> implementations = m_methodImplementations.get( methodEntry.getClassName() );