diff options
| author | 2018-10-26 19:48:36 +0200 | |
|---|---|---|
| committer | 2018-10-26 19:48:36 +0200 | |
| commit | d120d419b5d303c071cae6e7efcc54389fa76445 (patch) | |
| tree | 6f47585ac39f08ef07aab2740e3bd67b346c096f /src | |
| parent | update ASM/Guava, merge ASM port fixes (diff) | |
| download | enigma-d120d419b5d303c071cae6e7efcc54389fa76445.tar.gz enigma-d120d419b5d303c071cae6e7efcc54389fa76445.tar.xz enigma-d120d419b5d303c071cae6e7efcc54389fa76445.zip | |
remove parallelStreams on non-thread-safe ooperations in rebuildMethodNames, gain a bit of performance by not clearing the cache endlessly in phase 2
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/cuchaz/enigma/Deobfuscator.java | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/main/java/cuchaz/enigma/Deobfuscator.java b/src/main/java/cuchaz/enigma/Deobfuscator.java index 0c671589..465c1ec3 100644 --- a/src/main/java/cuchaz/enigma/Deobfuscator.java +++ b/src/main/java/cuchaz/enigma/Deobfuscator.java | |||
| @@ -368,7 +368,7 @@ public class Deobfuscator { | |||
| 368 | 368 | ||
| 369 | public void rebuildMethodNames(ProgressListener progress) { | 369 | public void rebuildMethodNames(ProgressListener progress) { |
| 370 | final AtomicInteger i = new AtomicInteger(); | 370 | final AtomicInteger i = new AtomicInteger(); |
| 371 | Map<ClassMapping, Map<Entry, String>> renameClassMap = new HashMap<>(); | 371 | Map<ClassMapping, Map<Entry, String>> renameClassMap = new ConcurrentHashMap<>(); |
| 372 | 372 | ||
| 373 | progress.init(getMappings().classes().size() * 3, "Rebuilding method names"); | 373 | progress.init(getMappings().classes().size() * 3, "Rebuilding method names"); |
| 374 | 374 | ||
| @@ -378,16 +378,18 @@ public class Deobfuscator { | |||
| 378 | }); | 378 | }); |
| 379 | 379 | ||
| 380 | 380 | ||
| 381 | renameClassMap.entrySet().parallelStream().forEach(renameClassMapEntry -> { | 381 | renameClassMap.entrySet().stream().forEach(renameClassMapEntry -> { |
| 382 | progress.onProgress(i.getAndIncrement(), renameClassMapEntry.getKey().getDeobfName()); | 382 | progress.onProgress(i.getAndIncrement(), renameClassMapEntry.getKey().getDeobfName()); |
| 383 | for (Map.Entry<Entry, String> entry : renameClassMapEntry.getValue().entrySet()) { | 383 | for (Map.Entry<Entry, String> entry : renameClassMapEntry.getValue().entrySet()) { |
| 384 | Entry obfEntry = entry.getKey(); | 384 | Entry obfEntry = entry.getKey(); |
| 385 | 385 | ||
| 386 | removeMapping(obfEntry); | 386 | removeMapping(obfEntry, false); |
| 387 | } | 387 | } |
| 388 | }); | 388 | }); |
| 389 | 389 | ||
| 390 | renameClassMap.entrySet().parallelStream().forEach(renameClassMapEntry -> { | 390 | translatorCache.clear(); |
| 391 | |||
| 392 | renameClassMap.entrySet().stream().forEach(renameClassMapEntry -> { | ||
| 391 | progress.onProgress(i.getAndIncrement(), renameClassMapEntry.getKey().getDeobfName()); | 393 | progress.onProgress(i.getAndIncrement(), renameClassMapEntry.getKey().getDeobfName()); |
| 392 | 394 | ||
| 393 | for (Map.Entry<Entry, String> entry : renameClassMapEntry.getValue().entrySet()) { | 395 | for (Map.Entry<Entry, String> entry : renameClassMapEntry.getValue().entrySet()) { |
| @@ -623,6 +625,10 @@ public class Deobfuscator { | |||
| 623 | } | 625 | } |
| 624 | 626 | ||
| 625 | public void removeMapping(Entry obfEntry) { | 627 | public void removeMapping(Entry obfEntry) { |
| 628 | removeMapping(obfEntry, true); | ||
| 629 | } | ||
| 630 | |||
| 631 | public void removeMapping(Entry obfEntry, boolean clearCache) { | ||
| 626 | if (obfEntry instanceof ClassEntry) { | 632 | if (obfEntry instanceof ClassEntry) { |
| 627 | this.renamer.removeClassMapping((ClassEntry) obfEntry); | 633 | this.renamer.removeClassMapping((ClassEntry) obfEntry); |
| 628 | } else if (obfEntry instanceof FieldEntry) { | 634 | } else if (obfEntry instanceof FieldEntry) { |
| @@ -639,10 +645,15 @@ public class Deobfuscator { | |||
| 639 | } | 645 | } |
| 640 | 646 | ||
| 641 | // clear caches | 647 | // clear caches |
| 642 | this.translatorCache.clear(); | 648 | if (clearCache) |
| 649 | this.translatorCache.clear(); | ||
| 643 | } | 650 | } |
| 644 | 651 | ||
| 645 | public void markAsDeobfuscated(Entry obfEntry) { | 652 | public void markAsDeobfuscated(Entry obfEntry) { |
| 653 | markAsDeobfuscated(obfEntry, true); | ||
| 654 | } | ||
| 655 | |||
| 656 | public void markAsDeobfuscated(Entry obfEntry, boolean clearCache) { | ||
| 646 | if (obfEntry instanceof ClassEntry) { | 657 | if (obfEntry instanceof ClassEntry) { |
| 647 | this.renamer.markClassAsDeobfuscated((ClassEntry) obfEntry); | 658 | this.renamer.markClassAsDeobfuscated((ClassEntry) obfEntry); |
| 648 | } else if (obfEntry instanceof FieldEntry) { | 659 | } else if (obfEntry instanceof FieldEntry) { |
| @@ -660,7 +671,8 @@ public class Deobfuscator { | |||
| 660 | } | 671 | } |
| 661 | 672 | ||
| 662 | // clear caches | 673 | // clear caches |
| 663 | this.translatorCache.clear(); | 674 | if (clearCache) |
| 675 | this.translatorCache.clear(); | ||
| 664 | } | 676 | } |
| 665 | 677 | ||
| 666 | public void changeModifier(Entry entry, Mappings.EntryModifier modifierEntry) { | 678 | public void changeModifier(Entry entry, Mappings.EntryModifier modifierEntry) { |