summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joseph Burton2025-10-05 21:17:26 +0100
committerGravatar GitHub2025-10-05 21:17:26 +0100
commitb5c0c1cd5d38587a67f52cf1d6766877bfe4929c (patch)
tree017d4ae4635c3f86df6489dec603b0d5bd54e510
parentBump version to 3.0.1 (diff)
downloadenigma-b5c0c1cd5d38587a67f52cf1d6766877bfe4929c.tar.gz
enigma-b5c0c1cd5d38587a67f52cf1d6766877bfe4929c.tar.xz
enigma-b5c0c1cd5d38587a67f52cf1d6766877bfe4929c.zip
Fix decompiler input transformer service (#567)
-rw-r--r--enigma/src/main/java/cuchaz/enigma/EnigmaProject.java6
-rw-r--r--enigma/src/main/java/cuchaz/enigma/api/service/DecompilerInputTransformerService.java2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleProvider.java7
-rw-r--r--enigma/src/main/java/cuchaz/enigma/classprovider/DecompilerInputTransformingClassProvider.java11
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 8ec6cafb..348e6403 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 a560515a..2c072edb 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;
5public interface DecompilerInputTransformerService extends EnigmaService { 5public 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 36c10cc1..a2f74644 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;
23import org.jetbrains.annotations.Nullable; 23import org.jetbrains.annotations.Nullable;
24 24
25import cuchaz.enigma.EnigmaProject; 25import cuchaz.enigma.EnigmaProject;
26import cuchaz.enigma.classprovider.CachingClassProvider;
27import cuchaz.enigma.classprovider.DecompilerInputTransformingClassProvider; 26import cuchaz.enigma.classprovider.DecompilerInputTransformingClassProvider;
28import cuchaz.enigma.classprovider.ObfuscationFixClassProvider; 27import cuchaz.enigma.classprovider.ObfuscationFixClassProvider;
29import cuchaz.enigma.events.ClassHandleListener; 28import 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 960221dd..438ac47d 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}