diff options
| author | 2025-10-05 21:17:26 +0100 | |
|---|---|---|
| committer | 2025-10-05 21:17:26 +0100 | |
| commit | b5c0c1cd5d38587a67f52cf1d6766877bfe4929c (patch) | |
| tree | 017d4ae4635c3f86df6489dec603b0d5bd54e510 | |
| parent | Bump version to 3.0.1 (diff) | |
| download | enigma-fork-b5c0c1cd5d38587a67f52cf1d6766877bfe4929c.tar.gz enigma-fork-b5c0c1cd5d38587a67f52cf1d6766877bfe4929c.tar.xz enigma-fork-b5c0c1cd5d38587a67f52cf1d6766877bfe4929c.zip | |
Fix decompiler input transformer service (#567)
4 files changed, 12 insertions, 14 deletions
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 { | |||
| 306 | public Stream<ClassSource> decompileStream(EnigmaProject project, ProgressListener progress, DecompilerService decompilerService, DecompileErrorStrategy errorStrategy) { | 306 | public Stream<ClassSource> decompileStream(EnigmaProject project, ProgressListener progress, DecompilerService decompilerService, DecompileErrorStrategy errorStrategy) { |
| 307 | Collection<ClassNode> classes = this.compiled.values().stream() | 307 | Collection<ClassNode> classes = this.compiled.values().stream() |
| 308 | .filter(classNode -> classNode.name.indexOf('$') == -1) | 308 | .filter(classNode -> classNode.name.indexOf('$') == -1) |
| 309 | .peek(classNode -> { | 309 | .map(classNode -> { |
| 310 | for (DecompilerInputTransformerService transformer : project.enigma.getServices().get(DecompilerInputTransformerService.TYPE)) { | 310 | for (DecompilerInputTransformerService transformer : project.enigma.getServices().get(DecompilerInputTransformerService.TYPE)) { |
| 311 | transformer.transform(classNode); | 311 | classNode = transformer.transform(classNode); |
| 312 | } | 312 | } |
| 313 | |||
| 314 | return classNode; | ||
| 313 | }) | 315 | }) |
| 314 | .toList(); | 316 | .toList(); |
| 315 | 317 | ||
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; | |||
| 5 | public interface DecompilerInputTransformerService extends EnigmaService { | 5 | public interface DecompilerInputTransformerService extends EnigmaService { |
| 6 | EnigmaServiceType<DecompilerInputTransformerService> TYPE = EnigmaServiceType.create("decompiler_input_transformer"); | 6 | EnigmaServiceType<DecompilerInputTransformerService> TYPE = EnigmaServiceType.create("decompiler_input_transformer"); |
| 7 | 7 | ||
| 8 | void transform(ClassNode classNode); | 8 | ClassNode transform(ClassNode classNode); |
| 9 | } | 9 | } |
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; | |||
| 23 | import org.jetbrains.annotations.Nullable; | 23 | import org.jetbrains.annotations.Nullable; |
| 24 | 24 | ||
| 25 | import cuchaz.enigma.EnigmaProject; | 25 | import cuchaz.enigma.EnigmaProject; |
| 26 | import cuchaz.enigma.classprovider.CachingClassProvider; | ||
| 27 | import cuchaz.enigma.classprovider.DecompilerInputTransformingClassProvider; | 26 | import cuchaz.enigma.classprovider.DecompilerInputTransformingClassProvider; |
| 28 | import cuchaz.enigma.classprovider.ObfuscationFixClassProvider; | 27 | import cuchaz.enigma.classprovider.ObfuscationFixClassProvider; |
| 29 | import cuchaz.enigma.events.ClassHandleListener; | 28 | import cuchaz.enigma.events.ClassHandleListener; |
| @@ -106,9 +105,9 @@ public final class ClassHandleProvider { | |||
| 106 | 105 | ||
| 107 | private Decompiler createDecompiler() { | 106 | private Decompiler createDecompiler() { |
| 108 | return ds.create( | 107 | return ds.create( |
| 109 | new DecompilerInputTransformingClassProvider( | 108 | new ObfuscationFixClassProvider( |
| 110 | new CachingClassProvider(new ObfuscationFixClassProvider(project.getClassProvider(), project.getJarIndex())), | 109 | new DecompilerInputTransformingClassProvider(project.getClassProvider(), project.getEnigma().getServices()), |
| 111 | project.getEnigma().getServices() | 110 | project.getJarIndex() |
| 112 | ), | 111 | ), |
| 113 | new SourceSettings(true, true) | 112 | new SourceSettings(true, true) |
| 114 | ); | 113 | ); |
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 { | |||
| 31 | return null; | 31 | return null; |
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | // copy the class, so that the input class isn't modified (which could lead to the class being retransformed if | 34 | for (DecompilerInputTransformerService transformer : services.get(DecompilerInputTransformerService.TYPE)) { |
| 35 | // it's cached) | 35 | classNode = transformer.transform(classNode); |
| 36 | ClassNode classCopy = new ClassNode(); | 36 | } |
| 37 | classNode.accept(classCopy); | ||
| 38 | |||
| 39 | services.get(DecompilerInputTransformerService.TYPE).forEach(transformer -> transformer.transform(classCopy)); | ||
| 40 | 37 | ||
| 41 | return classCopy; | 38 | return classNode; |
| 42 | } | 39 | } |
| 43 | } | 40 | } |