From dc2120999c137aa4763ea2358b8df83f4098d280 Mon Sep 17 00:00:00 2001 From: jeff Date: Wed, 11 Mar 2015 11:44:24 -0400 Subject: working on writing mappings based on all the matches --- src/cuchaz/enigma/convert/MappingsConverter.java | 50 +++++++++++++++++++++--- 1 file changed, 44 insertions(+), 6 deletions(-) (limited to 'src/cuchaz/enigma/convert/MappingsConverter.java') 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 { Collection getObfEntries(JarIndex jarIndex); Collection> getMappings(ClassMapping destClassMapping); Set filterEntries(Collection obfEntries, T obfSourceEntry, ClassMatches classMatches); + void setMemberObfName(ClassMapping classMapping, MemberMapping memberMapping, String newObfName); } - public static MemberMatches computeFieldMatches(Deobfuscator destDeobfuscator, Mappings destMappings, ClassMatches classMatches) { - return computeMemberMatches(destDeobfuscator, destMappings, classMatches, new Doer() { + public static Doer getFieldDoer() { + return new Doer() { @Override public Collection getDroppedEntries(MappingsChecker checker) { @@ -293,11 +294,17 @@ public class MappingsConverter { } return out; } - }); + + @Override + public void setMemberObfName(ClassMapping classMapping, MemberMapping memberMapping, String newObfName) { + FieldMapping fieldMapping = (FieldMapping)memberMapping; + classMapping.setFieldObfName(fieldMapping.getObfName(), fieldMapping.getObfType(), newObfName); + } + }; } - public static MemberMatches computeBehaviorMatches(Deobfuscator destDeobfuscator, Mappings destMappings, ClassMatches classMatches) { - return computeMemberMatches(destDeobfuscator, destMappings, classMatches, new Doer() { + public static Doer getMethodDoer() { + return new Doer() { @Override public Collection getDroppedEntries(MappingsChecker checker) { @@ -329,7 +336,13 @@ public class MappingsConverter { } return out; } - }); + + @Override + public void setMemberObfName(ClassMapping classMapping, MemberMapping memberMapping, String newObfName) { + MethodMapping methodMapping = (MethodMapping)memberMapping; + classMapping.setMethodObfName(methodMapping.getObfName(), methodMapping.getObfSignature(), newObfName); + } + }; } public static MemberMatches computeMemberMatches(Deobfuscator destDeobfuscator, Mappings destMappings, ClassMatches classMatches, Doer doer) { @@ -452,4 +465,29 @@ public class MappingsConverter { } }); } + + public static void applyMemberMatches(Mappings mappings, MemberMatches memberMatches, Doer doer) { + for (ClassMapping classMapping : mappings.classes()) { + applyMemberMatches(classMapping, memberMatches, doer); + } + } + + private static void applyMemberMatches(ClassMapping classMapping, MemberMatches memberMatches, Doer doer) { + ClassEntry classEntry = classMapping.getObfEntry(); + + // apply to this class + // TODO: need to sort renames so they happen in the right order!! + for (MemberMapping memberMapping : Lists.newArrayList(doer.getMappings(classMapping))) { + T obfSourceEntry = memberMapping.getObfEntry(classEntry); + T obfDestEntry = memberMatches.matches().get(obfSourceEntry); + if (obfDestEntry != null) { + doer.setMemberObfName(classMapping, memberMapping, obfDestEntry.getName()); + } + } + + // recurse + for (ClassMapping innerClassMapping : classMapping.innerClasses()) { + applyMemberMatches(innerClassMapping, memberMatches, doer); + } + } } -- cgit v1.2.3