summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/convert/MappingsConverter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/convert/MappingsConverter.java')
-rw-r--r--src/cuchaz/enigma/convert/MappingsConverter.java50
1 files changed, 44 insertions, 6 deletions
diff --git a/src/cuchaz/enigma/convert/MappingsConverter.java b/src/cuchaz/enigma/convert/MappingsConverter.java
index 2987ea0..44bc8b8 100644
--- a/src/cuchaz/enigma/convert/MappingsConverter.java
+++ b/src/cuchaz/enigma/convert/MappingsConverter.java
@@ -262,10 +262,11 @@ public class MappingsConverter {
262 Collection<T> getObfEntries(JarIndex jarIndex); 262 Collection<T> getObfEntries(JarIndex jarIndex);
263 Collection<? extends MemberMapping<T>> getMappings(ClassMapping destClassMapping); 263 Collection<? extends MemberMapping<T>> getMappings(ClassMapping destClassMapping);
264 Set<T> filterEntries(Collection<T> obfEntries, T obfSourceEntry, ClassMatches classMatches); 264 Set<T> filterEntries(Collection<T> obfEntries, T obfSourceEntry, ClassMatches classMatches);
265 void setMemberObfName(ClassMapping classMapping, MemberMapping<T> memberMapping, String newObfName);
265 } 266 }
266 267
267 public static MemberMatches<FieldEntry> computeFieldMatches(Deobfuscator destDeobfuscator, Mappings destMappings, ClassMatches classMatches) { 268 public static Doer<FieldEntry> getFieldDoer() {
268 return computeMemberMatches(destDeobfuscator, destMappings, classMatches, new Doer<FieldEntry>() { 269 return new Doer<FieldEntry>() {
269 270
270 @Override 271 @Override
271 public Collection<FieldEntry> getDroppedEntries(MappingsChecker checker) { 272 public Collection<FieldEntry> getDroppedEntries(MappingsChecker checker) {
@@ -293,11 +294,17 @@ public class MappingsConverter {
293 } 294 }
294 return out; 295 return out;
295 } 296 }
296 }); 297
298 @Override
299 public void setMemberObfName(ClassMapping classMapping, MemberMapping<FieldEntry> memberMapping, String newObfName) {
300 FieldMapping fieldMapping = (FieldMapping)memberMapping;
301 classMapping.setFieldObfName(fieldMapping.getObfName(), fieldMapping.getObfType(), newObfName);
302 }
303 };
297 } 304 }
298 305
299 public static MemberMatches<BehaviorEntry> computeBehaviorMatches(Deobfuscator destDeobfuscator, Mappings destMappings, ClassMatches classMatches) { 306 public static Doer<BehaviorEntry> getMethodDoer() {
300 return computeMemberMatches(destDeobfuscator, destMappings, classMatches, new Doer<BehaviorEntry>() { 307 return new Doer<BehaviorEntry>() {
301 308
302 @Override 309 @Override
303 public Collection<BehaviorEntry> getDroppedEntries(MappingsChecker checker) { 310 public Collection<BehaviorEntry> getDroppedEntries(MappingsChecker checker) {
@@ -329,7 +336,13 @@ public class MappingsConverter {
329 } 336 }
330 return out; 337 return out;
331 } 338 }
332 }); 339
340 @Override
341 public void setMemberObfName(ClassMapping classMapping, MemberMapping<BehaviorEntry> memberMapping, String newObfName) {
342 MethodMapping methodMapping = (MethodMapping)memberMapping;
343 classMapping.setMethodObfName(methodMapping.getObfName(), methodMapping.getObfSignature(), newObfName);
344 }
345 };
333 } 346 }
334 347
335 public static <T extends Entry> MemberMatches<T> computeMemberMatches(Deobfuscator destDeobfuscator, Mappings destMappings, ClassMatches classMatches, Doer<T> doer) { 348 public static <T extends Entry> MemberMatches<T> computeMemberMatches(Deobfuscator destDeobfuscator, Mappings destMappings, ClassMatches classMatches, Doer<T> doer) {
@@ -452,4 +465,29 @@ public class MappingsConverter {
452 } 465 }
453 }); 466 });
454 } 467 }
468
469 public static <T extends Entry> void applyMemberMatches(Mappings mappings, MemberMatches<T> memberMatches, Doer<T> doer) {
470 for (ClassMapping classMapping : mappings.classes()) {
471 applyMemberMatches(classMapping, memberMatches, doer);
472 }
473 }
474
475 private static <T extends Entry> void applyMemberMatches(ClassMapping classMapping, MemberMatches<T> memberMatches, Doer<T> doer) {
476 ClassEntry classEntry = classMapping.getObfEntry();
477
478 // apply to this class
479 // TODO: need to sort renames so they happen in the right order!!
480 for (MemberMapping<T> memberMapping : Lists.newArrayList(doer.getMappings(classMapping))) {
481 T obfSourceEntry = memberMapping.getObfEntry(classEntry);
482 T obfDestEntry = memberMatches.matches().get(obfSourceEntry);
483 if (obfDestEntry != null) {
484 doer.setMemberObfName(classMapping, memberMapping, obfDestEntry.getName());
485 }
486 }
487
488 // recurse
489 for (ClassMapping innerClassMapping : classMapping.innerClasses()) {
490 applyMemberMatches(innerClassMapping, memberMatches, doer);
491 }
492 }
455} 493}