From b5c0c1cd5d38587a67f52cf1d6766877bfe4929c Mon Sep 17 00:00:00 2001 From: Joseph Burton Date: Sun, 5 Oct 2025 21:17:26 +0100 Subject: Fix decompiler input transformer service (#567) --- enigma/src/main/java/cuchaz/enigma/EnigmaProject.java | 6 ++++-- .../enigma/api/service/DecompilerInputTransformerService.java | 2 +- .../java/cuchaz/enigma/classhandle/ClassHandleProvider.java | 7 +++---- .../DecompilerInputTransformingClassProvider.java | 11 ++++------- 4 files changed, 12 insertions(+), 14 deletions(-) (limited to 'enigma') diff --git a/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java b/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java index 8ec6caf..348e640 100644 --- a/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java +++ b/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java @@ -306,10 +306,12 @@ public class EnigmaProject implements ProjectView { public Stream decompileStream(EnigmaProject project, ProgressListener progress, DecompilerService decompilerService, DecompileErrorStrategy errorStrategy) { Collection classes = this.compiled.values().stream() .filter(classNode -> classNode.name.indexOf('$') == -1) - .peek(classNode -> { + .map(classNode -> { for (DecompilerInputTransformerService transformer : project.enigma.getServices().get(DecompilerInputTransformerService.TYPE)) { - transformer.transform(classNode); + classNode = transformer.transform(classNode); } + + return classNode; }) .toList(); diff --git a/enigma/src/main/java/cuchaz/enigma/api/service/DecompilerInputTransformerService.java b/enigma/src/main/java/cuchaz/enigma/api/service/DecompilerInputTransformerService.java index a560515..2c072ed 100644 --- a/enigma/src/main/java/cuchaz/enigma/api/service/DecompilerInputTransformerService.java +++ b/enigma/src/main/java/cuchaz/enigma/api/service/DecompilerInputTransformerService.java @@ -5,5 +5,5 @@ import org.objectweb.asm.tree.ClassNode; public interface DecompilerInputTransformerService extends EnigmaService { EnigmaServiceType TYPE = EnigmaServiceType.create("decompiler_input_transformer"); - void transform(ClassNode classNode); + ClassNode transform(ClassNode classNode); } diff --git a/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleProvider.java b/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleProvider.java index 36c10cc..a2f7464 100644 --- a/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleProvider.java +++ b/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleProvider.java @@ -23,7 +23,6 @@ import javax.swing.SwingUtilities; import org.jetbrains.annotations.Nullable; import cuchaz.enigma.EnigmaProject; -import cuchaz.enigma.classprovider.CachingClassProvider; import cuchaz.enigma.classprovider.DecompilerInputTransformingClassProvider; import cuchaz.enigma.classprovider.ObfuscationFixClassProvider; import cuchaz.enigma.events.ClassHandleListener; @@ -106,9 +105,9 @@ public final class ClassHandleProvider { private Decompiler createDecompiler() { return ds.create( - new DecompilerInputTransformingClassProvider( - new CachingClassProvider(new ObfuscationFixClassProvider(project.getClassProvider(), project.getJarIndex())), - project.getEnigma().getServices() + new ObfuscationFixClassProvider( + new DecompilerInputTransformingClassProvider(project.getClassProvider(), project.getEnigma().getServices()), + project.getJarIndex() ), new SourceSettings(true, true) ); diff --git a/enigma/src/main/java/cuchaz/enigma/classprovider/DecompilerInputTransformingClassProvider.java b/enigma/src/main/java/cuchaz/enigma/classprovider/DecompilerInputTransformingClassProvider.java index 960221d..438ac47 100644 --- a/enigma/src/main/java/cuchaz/enigma/classprovider/DecompilerInputTransformingClassProvider.java +++ b/enigma/src/main/java/cuchaz/enigma/classprovider/DecompilerInputTransformingClassProvider.java @@ -31,13 +31,10 @@ public class DecompilerInputTransformingClassProvider implements ClassProvider { return null; } - // copy the class, so that the input class isn't modified (which could lead to the class being retransformed if - // it's cached) - ClassNode classCopy = new ClassNode(); - classNode.accept(classCopy); - - services.get(DecompilerInputTransformerService.TYPE).forEach(transformer -> transformer.transform(classCopy)); + for (DecompilerInputTransformerService transformer : services.get(DecompilerInputTransformerService.TYPE)) { + classNode = transformer.transform(classNode); + } - return classCopy; + return classNode; } } -- cgit v1.2.3