From c0b0388aae76d39d780c2b4ad2531feb9d633e62 Mon Sep 17 00:00:00 2001 From: Gegy Date: Tue, 19 Feb 2019 21:00:43 +0200 Subject: Bridge Method Fixes (#111) * Detect synthetic bridges not marked as bridges, and add back flags to produced bytecode * Remove debug check * Remove more test code * Remove unneeded change to `TranslationClassVisitor` --- src/main/java/cuchaz/enigma/Deobfuscator.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/main/java/cuchaz/enigma/Deobfuscator.java') diff --git a/src/main/java/cuchaz/enigma/Deobfuscator.java b/src/main/java/cuchaz/enigma/Deobfuscator.java index 843c761..47cd05c 100644 --- a/src/main/java/cuchaz/enigma/Deobfuscator.java +++ b/src/main/java/cuchaz/enigma/Deobfuscator.java @@ -24,6 +24,7 @@ import cuchaz.enigma.analysis.IndexTreeBuilder; import cuchaz.enigma.analysis.ParsedJar; import cuchaz.enigma.analysis.index.JarIndex; import cuchaz.enigma.api.EnigmaPlugin; +import cuchaz.enigma.bytecode.translators.SourceFixVisitor; import cuchaz.enigma.bytecode.translators.TranslationClassVisitor; import cuchaz.enigma.translation.Translatable; import cuchaz.enigma.translation.Translator; @@ -81,7 +82,10 @@ public class Deobfuscator { listener.accept("Preparing..."); - this.obfSourceProvider = new SourceProvider(SourceProvider.createSettings(), new CompiledSourceTypeLoader(parsedJar)); + CompiledSourceTypeLoader typeLoader = new CompiledSourceTypeLoader(parsedJar); + typeLoader.addVisitor(visitor -> new SourceFixVisitor(Opcodes.ASM5, visitor, jarIndex)); + + this.obfSourceProvider = new SourceProvider(SourceProvider.createSettings(), typeLoader); // init mappings mapper = new EntryRemapper(jarIndex); @@ -230,16 +234,19 @@ public class Deobfuscator { } //create a common instance outside the loop as mappings shouldn't be changing while this is happening + CompiledSourceTypeLoader typeLoader = new CompiledSourceTypeLoader(translatedClasses::get); + typeLoader.addVisitor(visitor -> new SourceFixVisitor(Opcodes.ASM5, visitor, jarIndex)); + //synchronized to make sure the parallelStream doesn't CME with the cache - ITypeLoader typeLoader = new SynchronizedTypeLoader(new CompiledSourceTypeLoader(translatedClasses::get)); + ITypeLoader synchronizedTypeLoader = new SynchronizedTypeLoader(typeLoader); - MetadataSystem metadataSystem = new Deobfuscator.NoRetryMetadataSystem(typeLoader); + MetadataSystem metadataSystem = new Deobfuscator.NoRetryMetadataSystem(synchronizedTypeLoader); //ensures methods are loaded on classload and prevents race conditions metadataSystem.setEagerMethodLoadingEnabled(true); DecompilerSettings settings = SourceProvider.createSettings(); - SourceProvider sourceProvider = new SourceProvider(settings, typeLoader, metadataSystem); + SourceProvider sourceProvider = new SourceProvider(settings, synchronizedTypeLoader, metadataSystem); AtomicInteger count = new AtomicInteger(); -- cgit v1.2.3