diff options
Diffstat (limited to 'src/cuchaz/enigma/Deobfuscator.java')
| -rw-r--r-- | src/cuchaz/enigma/Deobfuscator.java | 25 |
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 | } |