summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/mapping/ClassMapping.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/ClassMapping.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 '')
-rw-r--r--src/cuchaz/enigma/mapping/ClassMapping.java97
1 files changed, 86 insertions, 11 deletions
diff --git a/src/cuchaz/enigma/mapping/ClassMapping.java b/src/cuchaz/enigma/mapping/ClassMapping.java
index c6826f3..c7f930c 100644
--- a/src/cuchaz/enigma/mapping/ClassMapping.java
+++ b/src/cuchaz/enigma/mapping/ClassMapping.java
@@ -21,6 +21,8 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping>
21 21
22 private String m_obfName; 22 private String m_obfName;
23 private String m_deobfName; 23 private String m_deobfName;
24 private Map<String,ClassMapping> m_innerClassesByObf;
25 private Map<String,ClassMapping> m_innerClassesByDeobf;
24 private Map<String,FieldMapping> m_fieldsByObf; 26 private Map<String,FieldMapping> m_fieldsByObf;
25 private Map<String,FieldMapping> m_fieldsByDeobf; 27 private Map<String,FieldMapping> m_fieldsByDeobf;
26 private Map<String,MethodMapping> m_methodsByObf; 28 private Map<String,MethodMapping> m_methodsByObf;
@@ -31,6 +33,8 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping>
31 { 33 {
32 m_obfName = obfName; 34 m_obfName = obfName;
33 m_deobfName = NameValidator.validateClassName( deobfName ); 35 m_deobfName = NameValidator.validateClassName( deobfName );
36 m_innerClassesByObf = Maps.newHashMap();
37 m_innerClassesByDeobf = Maps.newHashMap();
34 m_fieldsByObf = Maps.newHashMap(); 38 m_fieldsByObf = Maps.newHashMap();
35 m_fieldsByDeobf = Maps.newHashMap(); 39 m_fieldsByDeobf = Maps.newHashMap();
36 m_methodsByObf = Maps.newHashMap(); 40 m_methodsByObf = Maps.newHashMap();
@@ -51,6 +55,72 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping>
51 m_deobfName = NameValidator.validateClassName( val ); 55 m_deobfName = NameValidator.validateClassName( val );
52 } 56 }
53 57
58 //// INNER CLASSES ////////
59
60 public Iterable<ClassMapping> innerClasses( )
61 {
62 assert( m_innerClassesByObf.size() == m_innerClassesByDeobf.size() );
63 return m_innerClassesByObf.values();
64 }
65
66 protected void addInnerClassMapping( ClassMapping classMapping )
67 {
68 m_innerClassesByObf.put( classMapping.getObfName(), classMapping );
69 m_innerClassesByDeobf.put( classMapping.getDeobfName(), classMapping );
70 }
71
72 public ClassMapping getOrCreateInnerClass( String obfName )
73 {
74 ClassMapping classMapping = m_innerClassesByObf.get( obfName );
75 if( classMapping == null )
76 {
77 classMapping = new ClassMapping( obfName, obfName );
78 m_innerClassesByObf.put( obfName, classMapping );
79 m_innerClassesByDeobf.put( obfName, classMapping );
80 }
81 return classMapping;
82 }
83
84 public ClassMapping getInnerClassByObf( String obfName )
85 {
86 return m_innerClassesByObf.get( obfName );
87 }
88
89 public ClassMapping getInnerClassByDeobf( String deobfName )
90 {
91 return m_innerClassesByDeobf.get( deobfName );
92 }
93
94 public String getObfInnerClassName( String deobfName )
95 {
96 ClassMapping classMapping = m_innerClassesByDeobf.get( deobfName );
97 if( classMapping != null )
98 {
99 return classMapping.getObfName();
100 }
101 return null;
102 }
103
104 public String getDeobfInnerClassName( String obfName )
105 {
106 ClassMapping classMapping = m_innerClassesByObf.get( obfName );
107 if( classMapping != null )
108 {
109 return classMapping.getDeobfName();
110 }
111 return null;
112 }
113
114 public void setInnerClassName( String obfName, String deobfName )
115 {
116 ClassMapping classMapping = getOrCreateInnerClass( obfName );
117 m_innerClassesByDeobf.remove( classMapping.getDeobfName() );
118 classMapping.setDeobfName( deobfName );
119 m_innerClassesByDeobf.put( deobfName, classMapping );
120 }
121
122 //// FIELDS ////////
123
54 public Iterable<FieldMapping> fields( ) 124 public Iterable<FieldMapping> fields( )
55 { 125 {
56 assert( m_fieldsByObf.size() == m_fieldsByDeobf.size() ); 126 assert( m_fieldsByObf.size() == m_fieldsByDeobf.size() );
@@ -62,18 +132,7 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping>
62 m_fieldsByObf.put( fieldMapping.getObfName(), fieldMapping ); 132 m_fieldsByObf.put( fieldMapping.getObfName(), fieldMapping );
63 m_fieldsByDeobf.put( fieldMapping.getDeobfName(), fieldMapping ); 133 m_fieldsByDeobf.put( fieldMapping.getDeobfName(), fieldMapping );
64 } 134 }
65
66 public Iterable<MethodMapping> methods( )
67 {
68 assert( m_methodsByObf.size() == m_methodsByDeobf.size() );
69 return m_methodsByObf.values();
70 }
71 135
72 protected void addMethodMapping( MethodMapping methodMapping )
73 {
74 m_methodsByObf.put( getMethodKey( methodMapping.getObfName(), methodMapping.getObfSignature() ), methodMapping );
75 m_methodsByDeobf.put( getMethodKey( methodMapping.getDeobfName(), methodMapping.getDeobfSignature() ), methodMapping );
76 }
77 136
78 public String getObfFieldName( String deobfName ) 137 public String getObfFieldName( String deobfName )
79 { 138 {
@@ -110,6 +169,20 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping>
110 m_fieldsByDeobf.put( deobfName, fieldMapping ); 169 m_fieldsByDeobf.put( deobfName, fieldMapping );
111 } 170 }
112 171
172 //// METHODS ////////
173
174 public Iterable<MethodMapping> methods( )
175 {
176 assert( m_methodsByObf.size() == m_methodsByDeobf.size() );
177 return m_methodsByObf.values();
178 }
179
180 protected void addMethodMapping( MethodMapping methodMapping )
181 {
182 m_methodsByObf.put( getMethodKey( methodMapping.getObfName(), methodMapping.getObfSignature() ), methodMapping );
183 m_methodsByDeobf.put( getMethodKey( methodMapping.getDeobfName(), methodMapping.getDeobfSignature() ), methodMapping );
184 }
185
113 public MethodMapping getMethodByObf( String obfName, String signature ) 186 public MethodMapping getMethodByObf( String obfName, String signature )
114 { 187 {
115 return m_methodsByObf.get( getMethodKey( obfName, signature ) ); 188 return m_methodsByObf.get( getMethodKey( obfName, signature ) );
@@ -155,6 +228,8 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping>
155 } 228 }
156 } 229 }
157 230
231 //// ARGUMENTS ////////
232
158 public void setArgumentName( String obfMethodName, String obfMethodSignature, int argumentIndex, String argumentName ) 233 public void setArgumentName( String obfMethodName, String obfMethodSignature, int argumentIndex, String argumentName )
159 { 234 {
160 MethodMapping methodIndex = m_methodsByObf.get( getMethodKey( obfMethodName, obfMethodSignature ) ); 235 MethodMapping methodIndex = m_methodsByObf.get( getMethodKey( obfMethodName, obfMethodSignature ) );