summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/Deobfuscator.java
diff options
context:
space:
mode:
authorGravatar jeff2015-03-08 20:48:30 -0400
committerGravatar jeff2015-03-08 20:48:30 -0400
commit4ceb8d490058e48df666bf7227ce020e60928be5 (patch)
treebdfb432cd1d61dc4914b8591468193dcd7e7421c /src/cuchaz/enigma/Deobfuscator.java
parentlots of small tweaks and improvements (diff)
downloadenigma-fork-4ceb8d490058e48df666bf7227ce020e60928be5.tar.gz
enigma-fork-4ceb8d490058e48df666bf7227ce020e60928be5.tar.xz
enigma-fork-4ceb8d490058e48df666bf7227ce020e60928be5.zip
more tweaks, improvements, and bug fixes
Diffstat (limited to 'src/cuchaz/enigma/Deobfuscator.java')
-rw-r--r--src/cuchaz/enigma/Deobfuscator.java25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/cuchaz/enigma/Deobfuscator.java b/src/cuchaz/enigma/Deobfuscator.java
index e5d0e3d..9b0d3db 100644
--- a/src/cuchaz/enigma/Deobfuscator.java
+++ b/src/cuchaz/enigma/Deobfuscator.java
@@ -116,6 +116,10 @@ public class Deobfuscator {
116 } 116 }
117 117
118 public void setMappings(Mappings val) { 118 public void setMappings(Mappings val) {
119 setMappings(val, true);
120 }
121
122 public void setMappings(Mappings val, boolean warnAboutDrops) {
119 if (val == null) { 123 if (val == null) {
120 val = new Mappings(); 124 val = new Mappings();
121 } 125 }
@@ -123,7 +127,10 @@ public class Deobfuscator {
123 // drop mappings that don't match the jar 127 // drop mappings that don't match the jar
124 RelatedMethodChecker relatedMethodChecker = new RelatedMethodChecker(m_jarIndex); 128 RelatedMethodChecker relatedMethodChecker = new RelatedMethodChecker(m_jarIndex);
125 for (ClassMapping classMapping : Lists.newArrayList(val.classes())) { 129 for (ClassMapping classMapping : Lists.newArrayList(val.classes())) {
126 if (!checkClassMapping(relatedMethodChecker, classMapping)) { 130 if (!checkClassMapping(relatedMethodChecker, classMapping, warnAboutDrops)) {
131 if (warnAboutDrops) {
132 System.err.println("WARNING: unable to find class " + classMapping.getObfFullName() + ". dropping mapping");
133 }
127 val.removeClassMapping(classMapping); 134 val.removeClassMapping(classMapping);
128 } 135 }
129 } 136 }
@@ -138,7 +145,7 @@ public class Deobfuscator {
138 m_translatorCache.clear(); 145 m_translatorCache.clear();
139 } 146 }
140 147
141 private boolean checkClassMapping(RelatedMethodChecker relatedMethodChecker, ClassMapping classMapping) { 148 private boolean checkClassMapping(RelatedMethodChecker relatedMethodChecker, ClassMapping classMapping, boolean warnAboutDrops) {
142 149
143 // check the class 150 // check the class
144 ClassEntry classEntry = EntryFactory.getObfClassEntry(m_jarIndex, classMapping); 151 ClassEntry classEntry = EntryFactory.getObfClassEntry(m_jarIndex, classMapping);
@@ -150,7 +157,9 @@ public class Deobfuscator {
150 for (FieldMapping fieldMapping : Lists.newArrayList(classMapping.fields())) { 157 for (FieldMapping fieldMapping : Lists.newArrayList(classMapping.fields())) {
151 FieldEntry fieldEntry = new FieldEntry(classEntry, fieldMapping.getObfName(), fieldMapping.getObfType()); 158 FieldEntry fieldEntry = new FieldEntry(classEntry, fieldMapping.getObfName(), fieldMapping.getObfType());
152 if (!m_jarIndex.containsObfField(fieldEntry)) { 159 if (!m_jarIndex.containsObfField(fieldEntry)) {
153 System.err.println("WARNING: unable to find field " + fieldEntry + ". dropping mapping."); 160 if (warnAboutDrops) {
161 System.err.println("WARNING: unable to find field " + fieldEntry + ". dropping mapping.");
162 }
154 classMapping.removeFieldMapping(fieldMapping); 163 classMapping.removeFieldMapping(fieldMapping);
155 } 164 }
156 } 165 }
@@ -159,7 +168,9 @@ public class Deobfuscator {
159 for (MethodMapping methodMapping : Lists.newArrayList(classMapping.methods())) { 168 for (MethodMapping methodMapping : Lists.newArrayList(classMapping.methods())) {
160 BehaviorEntry obfBehaviorEntry = EntryFactory.getObfBehaviorEntry(classEntry, methodMapping); 169 BehaviorEntry obfBehaviorEntry = EntryFactory.getObfBehaviorEntry(classEntry, methodMapping);
161 if (!m_jarIndex.containsObfBehavior(obfBehaviorEntry)) { 170 if (!m_jarIndex.containsObfBehavior(obfBehaviorEntry)) {
162 System.err.println("WARNING: unable to find behavior " + obfBehaviorEntry + ". dropping mapping."); 171 if (warnAboutDrops) {
172 System.err.println("WARNING: unable to find behavior " + obfBehaviorEntry + ". dropping mapping.");
173 }
163 classMapping.removeMethodMapping(methodMapping); 174 classMapping.removeMethodMapping(methodMapping);
164 } 175 }
165 176
@@ -168,8 +179,10 @@ public class Deobfuscator {
168 179
169 // check inner classes 180 // check inner classes
170 for (ClassMapping innerClassMapping : Lists.newArrayList(classMapping.innerClasses())) { 181 for (ClassMapping innerClassMapping : Lists.newArrayList(classMapping.innerClasses())) {
171 if (!checkClassMapping(relatedMethodChecker, innerClassMapping)) { 182 if (!checkClassMapping(relatedMethodChecker, innerClassMapping, warnAboutDrops)) {
172 System.err.println("WARNING: unable to find inner class " + EntryFactory.getObfClassEntry(m_jarIndex, classMapping) + ". dropping mapping."); 183 if (warnAboutDrops) {
184 System.err.println("WARNING: unable to find inner class " + EntryFactory.getObfClassEntry(m_jarIndex, classMapping) + ". dropping mapping.");
185 }
173 classMapping.removeInnerClassMapping(innerClassMapping); 186 classMapping.removeInnerClassMapping(innerClassMapping);
174 } 187 }
175 } 188 }