diff options
Diffstat (limited to 'src/cuchaz/enigma/analysis/JarIndex.java')
| -rw-r--r-- | src/cuchaz/enigma/analysis/JarIndex.java | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/src/cuchaz/enigma/analysis/JarIndex.java b/src/cuchaz/enigma/analysis/JarIndex.java index b479b69..4279ded 100644 --- a/src/cuchaz/enigma/analysis/JarIndex.java +++ b/src/cuchaz/enigma/analysis/JarIndex.java | |||
| @@ -79,7 +79,7 @@ public class JarIndex | |||
| 79 | m_bridgeMethods = Maps.newHashMap(); | 79 | m_bridgeMethods = Maps.newHashMap(); |
| 80 | } | 80 | } |
| 81 | 81 | ||
| 82 | public void indexJar( JarFile jar ) | 82 | public void indexJar( JarFile jar, boolean buildInnerClasses ) |
| 83 | { | 83 | { |
| 84 | // step 1: read the class names | 84 | // step 1: read the class names |
| 85 | for( ClassEntry classEntry : JarClassIterator.getClassEntries( jar ) ) | 85 | for( ClassEntry classEntry : JarClassIterator.getClassEntries( jar ) ) |
| @@ -125,40 +125,43 @@ public class JarIndex | |||
| 125 | } | 125 | } |
| 126 | } | 126 | } |
| 127 | 127 | ||
| 128 | // step 4: index inner classes and anonymous classes | 128 | if( buildInnerClasses ) |
| 129 | for( CtClass c : JarClassIterator.classes( jar ) ) | ||
| 130 | { | 129 | { |
| 131 | ClassRenamer.moveAllClassesOutOfDefaultPackage( c, Constants.NonePackage ); | 130 | // step 4: index inner classes and anonymous classes |
| 132 | String outerClassName = findOuterClass( c ); | 131 | for( CtClass c : JarClassIterator.classes( jar ) ) |
| 133 | if( outerClassName != null ) | ||
| 134 | { | 132 | { |
| 135 | String innerClassName = Descriptor.toJvmName( c.getName() ); | 133 | ClassRenamer.moveAllClassesOutOfDefaultPackage( c, Constants.NonePackage ); |
| 136 | m_innerClasses.put( outerClassName, innerClassName ); | 134 | String outerClassName = findOuterClass( c ); |
| 137 | m_outerClasses.put( innerClassName, outerClassName ); | 135 | if( outerClassName != null ) |
| 138 | |||
| 139 | if( isAnonymousClass( c, outerClassName ) ) | ||
| 140 | { | 136 | { |
| 141 | m_anonymousClasses.add( innerClassName ); | 137 | String innerClassName = Descriptor.toJvmName( c.getName() ); |
| 138 | m_innerClasses.put( outerClassName, innerClassName ); | ||
| 139 | m_outerClasses.put( innerClassName, outerClassName ); | ||
| 142 | 140 | ||
| 143 | // DEBUG | 141 | if( isAnonymousClass( c, outerClassName ) ) |
| 144 | //System.out.println( "ANONYMOUS: " + outerClassName + "$" + innerClassName ); | 142 | { |
| 145 | } | 143 | m_anonymousClasses.add( innerClassName ); |
| 146 | else | 144 | |
| 147 | { | 145 | // DEBUG |
| 148 | // DEBUG | 146 | //System.out.println( "ANONYMOUS: " + outerClassName + "$" + innerClassName ); |
| 149 | //System.out.println( "INNER: " + outerClassName + "$" + innerClassName ); | 147 | } |
| 148 | else | ||
| 149 | { | ||
| 150 | // DEBUG | ||
| 151 | //System.out.println( "INNER: " + outerClassName + "$" + innerClassName ); | ||
| 152 | } | ||
| 150 | } | 153 | } |
| 151 | } | 154 | } |
| 155 | |||
| 156 | // step 5: update other indices with inner class info | ||
| 157 | Map<String,String> renames = Maps.newHashMap(); | ||
| 158 | for( Map.Entry<String,String> entry : m_outerClasses.entrySet() ) | ||
| 159 | { | ||
| 160 | renames.put( entry.getKey(), entry.getValue() + "$" + new ClassEntry( entry.getKey() ).getSimpleName() ); | ||
| 161 | } | ||
| 162 | renameClasses( renames ); | ||
| 152 | } | 163 | } |
| 153 | 164 | ||
| 154 | // step 5: update other indices with inner class info | ||
| 155 | Map<String,String> renames = Maps.newHashMap(); | ||
| 156 | for( Map.Entry<String,String> entry : m_outerClasses.entrySet() ) | ||
| 157 | { | ||
| 158 | renames.put( entry.getKey(), entry.getValue() + "$" + new ClassEntry( entry.getKey() ).getSimpleName() ); | ||
| 159 | } | ||
| 160 | renameClasses( renames ); | ||
| 161 | |||
| 162 | // step 5: update other indices with bridge method info | 165 | // step 5: update other indices with bridge method info |
| 163 | renameMethods( m_bridgeMethods ); | 166 | renameMethods( m_bridgeMethods ); |
| 164 | } | 167 | } |