summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/bytecode/ClassTranslator.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/bytecode/ClassTranslator.java')
-rw-r--r--src/cuchaz/enigma/bytecode/ClassTranslator.java64
1 files changed, 6 insertions, 58 deletions
diff --git a/src/cuchaz/enigma/bytecode/ClassTranslator.java b/src/cuchaz/enigma/bytecode/ClassTranslator.java
index 9ce06a5..885b45f 100644
--- a/src/cuchaz/enigma/bytecode/ClassTranslator.java
+++ b/src/cuchaz/enigma/bytecode/ClassTranslator.java
@@ -10,18 +10,16 @@
10 ******************************************************************************/ 10 ******************************************************************************/
11package cuchaz.enigma.bytecode; 11package cuchaz.enigma.bytecode;
12 12
13import java.util.Set; 13import java.util.Map;
14 14
15import javassist.ClassMap;
16import javassist.CtBehavior; 15import javassist.CtBehavior;
17import javassist.CtClass; 16import javassist.CtClass;
18import javassist.CtField; 17import javassist.CtField;
19import javassist.CtMethod; 18import javassist.CtMethod;
20import javassist.bytecode.ConstPool; 19import javassist.bytecode.ConstPool;
21import javassist.bytecode.Descriptor; 20import javassist.bytecode.Descriptor;
22import javassist.bytecode.InnerClassesAttribute;
23 21
24import com.beust.jcommander.internal.Sets; 22import com.beust.jcommander.internal.Maps;
25 23
26import cuchaz.enigma.mapping.ClassEntry; 24import cuchaz.enigma.mapping.ClassEntry;
27import cuchaz.enigma.mapping.FieldEntry; 25import cuchaz.enigma.mapping.FieldEntry;
@@ -136,61 +134,11 @@ public class ClassTranslator
136 134
137 // translate all the class names referenced in the code 135 // translate all the class names referenced in the code
138 // the above code only changed method/field/reference names and types, but not the class names themselves 136 // the above code only changed method/field/reference names and types, but not the class names themselves
139 Set<ClassEntry> classEntries = getAllClassEntries( c ); 137 Map<ClassEntry,ClassEntry> map = Maps.newHashMap();
140 ClassMap map = new ClassMap(); 138 for( ClassEntry obfClassEntry : ClassRenamer.getAllClassEntries( c ) )
141 for( ClassEntry obfClassEntry : classEntries )
142 { 139 {
143 map.put( obfClassEntry.getName(), m_translator.translateEntry( obfClassEntry ).getName() ); 140 map.put( obfClassEntry, m_translator.translateEntry( obfClassEntry ) );
144 } 141 }
145 c.replaceClassName( map ); 142 ClassRenamer.renameClasses( c, map );
146
147 // translate the names in the InnerClasses attribute
148 InnerClassesAttribute attr = (InnerClassesAttribute)c.getClassFile().getAttribute( InnerClassesAttribute.tag );
149 if( attr != null )
150 {
151 for( int i=0; i<attr.tableLength(); i++ )
152 {
153 ClassEntry obfClassEntry = new ClassEntry( Descriptor.toJvmName( attr.innerClass( i ) ) );
154 ClassEntry deobfClassEntry = m_translator.translateEntry( obfClassEntry );
155 attr.setInnerClassIndex( i, constants.addClassInfo( deobfClassEntry.getName() ) );
156 if( attr.outerClassIndex( i ) != 0 )
157 {
158 attr.setOuterClassIndex( i, constants.addClassInfo( deobfClassEntry.getOuterClassName() ) );
159 }
160 if( attr.innerNameIndex( i ) != 0 )
161 {
162 attr.setInnerNameIndex( i, constants.addUtf8Info( deobfClassEntry.getInnerClassName() ) );
163 }
164
165 /* DEBUG
166 System.out.println( String.format( "\tOBF: %s DEOBF: %s-> ATTR: %s,%s,%s",
167 obfClassEntry, deobfClassEntry,
168 attr.outerClass( i ),
169 attr.innerClass( i ),
170 attr.innerName( i )
171 ) );
172 */
173 }
174 }
175 }
176
177 private Set<ClassEntry> getAllClassEntries( CtClass c )
178 {
179 final Set<ClassEntry> entries = Sets.newHashSet();
180 ClassMap map = new ClassMap( )
181 {
182 @Override
183 public Object get( Object obj )
184 {
185 if( obj instanceof String )
186 {
187 entries.add( new ClassEntry( (String)obj ) );
188 }
189 return null;
190 }
191 private static final long serialVersionUID = -202160293602070641L;
192 };
193 c.replaceClassName( map );
194 return entries;
195 } 143 }
196} 144}