diff options
| author | 2015-03-11 11:44:24 -0400 | |
|---|---|---|
| committer | 2015-03-11 11:44:24 -0400 | |
| commit | dc2120999c137aa4763ea2358b8df83f4098d280 (patch) | |
| tree | adf96d87f675e76ab3beebadac9c35c1e04b5517 /src/cuchaz/enigma/convert/MappingsConverter.java | |
| parent | generalized field matching (diff) | |
| download | enigma-fork-dc2120999c137aa4763ea2358b8df83f4098d280.tar.gz enigma-fork-dc2120999c137aa4763ea2358b8df83f4098d280.tar.xz enigma-fork-dc2120999c137aa4763ea2358b8df83f4098d280.zip | |
working on writing mappings based on all the matches
Diffstat (limited to 'src/cuchaz/enigma/convert/MappingsConverter.java')
| -rw-r--r-- | src/cuchaz/enigma/convert/MappingsConverter.java | 50 |
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 | } |