summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/mapping/Renamer.java
diff options
context:
space:
mode:
authorGravatar hg2014-08-17 10:56:17 -0400
committerGravatar hg2014-08-17 10:56:17 -0400
commit6c4440ac1133bfaa7871d1049d174528a289ef30 (patch)
treefe1142b285c5e43dbd3afe8dd3eb0189f027c6a6 /src/cuchaz/enigma/mapping/Renamer.java
parenttrying to get inner/anonymous classes working... I have a working heuristic i... (diff)
downloadenigma-fork-6c4440ac1133bfaa7871d1049d174528a289ef30.tar.gz
enigma-fork-6c4440ac1133bfaa7871d1049d174528a289ef30.tar.xz
enigma-fork-6c4440ac1133bfaa7871d1049d174528a289ef30.zip
added support for automatic reconstruction of inner and anonymous classes
also added class to restore bridge method flags taken out by the obfuscator
Diffstat (limited to 'src/cuchaz/enigma/mapping/Renamer.java')
-rw-r--r--src/cuchaz/enigma/mapping/Renamer.java64
1 files changed, 32 insertions, 32 deletions
diff --git a/src/cuchaz/enigma/mapping/Renamer.java b/src/cuchaz/enigma/mapping/Renamer.java
index d372575..0bb8dc1 100644
--- a/src/cuchaz/enigma/mapping/Renamer.java
+++ b/src/cuchaz/enigma/mapping/Renamer.java
@@ -32,15 +32,18 @@ public class Renamer
32 public void setClassName( ClassEntry obf, String deobfName ) 32 public void setClassName( ClassEntry obf, String deobfName )
33 { 33 {
34 deobfName = NameValidator.validateClassName( deobfName ); 34 deobfName = NameValidator.validateClassName( deobfName );
35 ClassMapping classMapping = m_mappings.m_classesByObf.get( obf.getName() ); 35 ClassMapping classMapping = getOrCreateClassMapping( obf );
36 if( classMapping == null ) 36
37 if( obf.isInnerClass() )
37 { 38 {
38 classMapping = createClassMapping( obf ); 39 classMapping.setInnerClassName( obf.getInnerClassName(), deobfName );
40 }
41 else
42 {
43 m_mappings.m_classesByDeobf.remove( classMapping.getDeobfName() );
44 classMapping.setDeobfName( deobfName );
45 m_mappings.m_classesByDeobf.put( deobfName, classMapping );
39 } 46 }
40
41 m_mappings.m_classesByDeobf.remove( classMapping.getDeobfName() );
42 classMapping.setDeobfName( deobfName );
43 m_mappings.m_classesByDeobf.put( deobfName, classMapping );
44 47
45 updateDeobfMethodSignatures(); 48 updateDeobfMethodSignatures();
46 } 49 }
@@ -48,12 +51,7 @@ public class Renamer
48 public void setFieldName( FieldEntry obf, String deobfName ) 51 public void setFieldName( FieldEntry obf, String deobfName )
49 { 52 {
50 deobfName = NameValidator.validateFieldName( deobfName ); 53 deobfName = NameValidator.validateFieldName( deobfName );
51 ClassMapping classMapping = m_mappings.m_classesByObf.get( obf.getClassName() ); 54 ClassMapping classMapping = getOrCreateClassMappingOrInnerClassMapping( obf.getClassEntry() );
52 if( classMapping == null )
53 {
54 classMapping = createClassMapping( obf.getClassEntry() );
55 }
56
57 classMapping.setFieldName( obf.getName(), deobfName ); 55 classMapping.setFieldName( obf.getName(), deobfName );
58 } 56 }
59 57
@@ -84,28 +82,15 @@ public class Renamer
84 public void setMethodName( MethodEntry obf, String deobfName ) 82 public void setMethodName( MethodEntry obf, String deobfName )
85 { 83 {
86 deobfName = NameValidator.validateMethodName( deobfName ); 84 deobfName = NameValidator.validateMethodName( deobfName );
87 ClassMapping classMapping = m_mappings.m_classesByObf.get( obf.getClassName() ); 85 ClassMapping classMapping = getOrCreateClassMappingOrInnerClassMapping( obf.getClassEntry() );
88 if( classMapping == null )
89 {
90 classMapping = createClassMapping( obf.getClassEntry() );
91 }
92
93 String deobfSignature = m_mappings.getTranslator( m_index.getAncestries(), TranslationDirection.Deobfuscating ).translateSignature( obf.getSignature() ); 86 String deobfSignature = m_mappings.getTranslator( m_index.getAncestries(), TranslationDirection.Deobfuscating ).translateSignature( obf.getSignature() );
94 classMapping.setMethodNameAndSignature( obf.getName(), obf.getSignature(), deobfName, deobfSignature ); 87 classMapping.setMethodNameAndSignature( obf.getName(), obf.getSignature(), deobfName, deobfSignature );
95
96 // TODO: update ancestor/descendant methods in other classes in the inheritance hierarchy too
97
98 } 88 }
99 89
100 public void setArgumentName( ArgumentEntry obf, String deobfName ) 90 public void setArgumentName( ArgumentEntry obf, String deobfName )
101 { 91 {
102 deobfName = NameValidator.validateArgumentName( deobfName ); 92 deobfName = NameValidator.validateArgumentName( deobfName );
103 ClassMapping classMapping = m_mappings.m_classesByObf.get( obf.getClassName() ); 93 ClassMapping classMapping = getOrCreateClassMappingOrInnerClassMapping( obf.getClassEntry() );
104 if( classMapping == null )
105 {
106 classMapping = createClassMapping( obf.getClassEntry() );
107 }
108
109 classMapping.setArgumentName( obf.getMethodName(), obf.getMethodSignature(), obf.getIndex(), deobfName ); 94 classMapping.setArgumentName( obf.getMethodName(), obf.getMethodSignature(), obf.getIndex(), deobfName );
110 } 95 }
111 96
@@ -119,11 +104,26 @@ public class Renamer
119 gzipout.finish(); 104 gzipout.finish();
120 } 105 }
121 106
122 private ClassMapping createClassMapping( ClassEntry obf ) 107 private ClassMapping getOrCreateClassMapping( ClassEntry obfClassEntry )
108 {
109 String obfClassName = obfClassEntry.getOuterClassName();
110 ClassMapping classMapping = m_mappings.m_classesByObf.get( obfClassName );
111 if( classMapping == null )
112 {
113 classMapping = new ClassMapping( obfClassName, obfClassName );
114 m_mappings.m_classesByObf.put( classMapping.getObfName(), classMapping );
115 m_mappings.m_classesByDeobf.put( classMapping.getDeobfName(), classMapping );
116 }
117 return classMapping;
118 }
119
120 private ClassMapping getOrCreateClassMappingOrInnerClassMapping( ClassEntry obfClassEntry )
123 { 121 {
124 ClassMapping classMapping = new ClassMapping( obf.getName(), obf.getName() ); 122 ClassMapping classMapping = getOrCreateClassMapping( obfClassEntry );
125 m_mappings.m_classesByObf.put( classMapping.getObfName(), classMapping ); 123 if( obfClassEntry.isInnerClass() )
126 m_mappings.m_classesByDeobf.put( classMapping.getDeobfName(), classMapping ); 124 {
125 classMapping = classMapping.getOrCreateInnerClass( obfClassEntry.getInnerClassName() );
126 }
127 return classMapping; 127 return classMapping;
128 } 128 }
129 129