summaryrefslogtreecommitdiff
path: root/enigma/src
diff options
context:
space:
mode:
authorGravatar Joe2025-09-11 17:35:30 +0100
committerGravatar modmuss2025-09-13 09:14:23 +0100
commitf8c7b8497e9687e15123caca7d4fde54f5bf067a (patch)
tree92a9da7756e0e18cb8925c1cc01e2a2edc10e60f /enigma/src
parentAdd factory methods to the entry views (diff)
downloadenigma-fork-f8c7b8497e9687e15123caca7d4fde54f5bf067a.tar.gz
enigma-fork-f8c7b8497e9687e15123caca7d4fde54f5bf067a.tar.xz
enigma-fork-f8c7b8497e9687e15123caca7d4fde54f5bf067a.zip
Allow you to specify the libraries in the program args rather than always using the runtime classpath
Diffstat (limited to 'enigma/src')
-rw-r--r--enigma/src/main/java/cuchaz/enigma/Enigma.java15
-rw-r--r--enigma/src/main/java/cuchaz/enigma/EnigmaProject.java8
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestDeobfed.java6
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java4
-rw-r--r--enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java4
5 files changed, 22 insertions, 15 deletions
diff --git a/enigma/src/main/java/cuchaz/enigma/Enigma.java b/enigma/src/main/java/cuchaz/enigma/Enigma.java
index 4483ab7..7f1faa9 100644
--- a/enigma/src/main/java/cuchaz/enigma/Enigma.java
+++ b/enigma/src/main/java/cuchaz/enigma/Enigma.java
@@ -39,6 +39,7 @@ import cuchaz.enigma.api.service.JarIndexerService;
39import cuchaz.enigma.api.service.ProjectService; 39import cuchaz.enigma.api.service.ProjectService;
40import cuchaz.enigma.classprovider.CachingClassProvider; 40import cuchaz.enigma.classprovider.CachingClassProvider;
41import cuchaz.enigma.classprovider.ClassProvider; 41import cuchaz.enigma.classprovider.ClassProvider;
42import cuchaz.enigma.classprovider.ClasspathClassProvider;
42import cuchaz.enigma.classprovider.CombiningClassProvider; 43import cuchaz.enigma.classprovider.CombiningClassProvider;
43import cuchaz.enigma.classprovider.JarClassProvider; 44import cuchaz.enigma.classprovider.JarClassProvider;
44import cuchaz.enigma.utils.I18n; 45import cuchaz.enigma.utils.I18n;
@@ -67,24 +68,24 @@ public class Enigma {
67 return new Builder(); 68 return new Builder();
68 } 69 }
69 70
70 public EnigmaProject openJar(Path path, ClassProvider libraryClassProvider, ProgressListener progress) throws IOException { 71 public EnigmaProject openJar(Path path, List<Path> libraries, ProgressListener progress) throws IOException {
71 return openJars(List.of(path), libraryClassProvider, progress); 72 return openJars(List.of(path), libraries, progress);
72 } 73 }
73 74
74 public EnigmaProject openJars(List<Path> paths, ClassProvider libraryClassProvider, ProgressListener progress) throws IOException { 75 public EnigmaProject openJars(List<Path> paths, List<Path> libraries, ProgressListener progress) throws IOException {
75 return openJars(paths, libraryClassProvider, progress, true); 76 return openJars(paths, libraries, progress, true);
76 } 77 }
77 78
78 public EnigmaProject openJars(List<Path> paths, ClassProvider libraryClassProvider, ProgressListener progress, boolean callServices) throws IOException { 79 public EnigmaProject openJars(List<Path> paths, List<Path> libraries, ProgressListener progress, boolean callServices) throws IOException {
79 ClassProvider jarClassProvider = getJarClassProvider(paths); 80 ClassProvider jarClassProvider = getJarClassProvider(paths);
80 ClassProvider classProvider = new CachingClassProvider(new CombiningClassProvider(jarClassProvider, libraryClassProvider)); 81 ClassProvider classProvider = new CachingClassProvider(new CombiningClassProvider(jarClassProvider, getJarClassProvider(libraries), new ClasspathClassProvider()));
81 Set<String> scope = Set.copyOf(jarClassProvider.getClassNames()); 82 Set<String> scope = Set.copyOf(jarClassProvider.getClassNames());
82 83
83 JarIndex index = JarIndex.empty(); 84 JarIndex index = JarIndex.empty();
84 ClassProvider classProviderWithFrames = index.indexJar(scope, classProvider, progress); 85 ClassProvider classProviderWithFrames = index.indexJar(scope, classProvider, progress);
85 services.get(JarIndexerService.TYPE).forEach(indexer -> indexer.acceptJar(scope, classProviderWithFrames, index)); 86 services.get(JarIndexerService.TYPE).forEach(indexer -> indexer.acceptJar(scope, classProviderWithFrames, index));
86 87
87 EnigmaProject project = new EnigmaProject(this, paths, classProvider, scope, index, Utils.zipSha1(paths.toArray(new Path[0]))); 88 EnigmaProject project = new EnigmaProject(this, paths, libraries, classProvider, scope, index, Utils.zipSha1(paths.toArray(new Path[0])));
88 89
89 if (callServices) { 90 if (callServices) {
90 for (ProjectService projectService : services.get(ProjectService.TYPE)) { 91 for (ProjectService projectService : services.get(ProjectService.TYPE)) {
diff --git a/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java b/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java
index 86a7037..ab0ce30 100644
--- a/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java
+++ b/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java
@@ -59,6 +59,7 @@ public class EnigmaProject implements ProjectView {
59 private final Enigma enigma; 59 private final Enigma enigma;
60 60
61 private final List<Path> jarPaths; 61 private final List<Path> jarPaths;
62 private final List<Path> libraryPaths;
62 private final ClassProvider classProvider; 63 private final ClassProvider classProvider;
63 private final JarIndex jarIndex; 64 private final JarIndex jarIndex;
64 private final byte[] jarChecksum; 65 private final byte[] jarChecksum;
@@ -71,13 +72,14 @@ public class EnigmaProject implements ProjectView {
71 72
72 private final List<DataInvalidationListener> dataInvalidationListeners = new ArrayList<>(); 73 private final List<DataInvalidationListener> dataInvalidationListeners = new ArrayList<>();
73 74
74 public EnigmaProject(Enigma enigma, List<Path> jarPaths, ClassProvider classProvider, Set<String> projectClasses, JarIndex jarIndex, byte[] jarChecksum) { 75 public EnigmaProject(Enigma enigma, List<Path> jarPaths, List<Path> libraryPaths, ClassProvider classProvider, Set<String> projectClasses, JarIndex jarIndex, byte[] jarChecksum) {
75 if (jarChecksum.length != 20) { 76 if (jarChecksum.length != 20) {
76 throw new IllegalArgumentException(); 77 throw new IllegalArgumentException();
77 } 78 }
78 79
79 this.enigma = enigma; 80 this.enigma = enigma;
80 this.jarPaths = List.copyOf(jarPaths); 81 this.jarPaths = List.copyOf(jarPaths);
82 this.libraryPaths = List.copyOf(libraryPaths);
81 this.classProvider = classProvider; 83 this.classProvider = classProvider;
82 this.jarIndex = jarIndex; 84 this.jarIndex = jarIndex;
83 this.jarChecksum = jarChecksum; 85 this.jarChecksum = jarChecksum;
@@ -109,6 +111,10 @@ public class EnigmaProject implements ProjectView {
109 return jarPaths; 111 return jarPaths;
110 } 112 }
111 113
114 public List<Path> getLibraryPaths() {
115 return libraryPaths;
116 }
117
112 public ClassProvider getClassProvider() { 118 public ClassProvider getClassProvider() {
113 return classProvider; 119 return classProvider;
114 } 120 }
diff --git a/enigma/src/test/java/cuchaz/enigma/TestDeobfed.java b/enigma/src/test/java/cuchaz/enigma/TestDeobfed.java
index b19aa77..024f2bb 100644
--- a/enigma/src/test/java/cuchaz/enigma/TestDeobfed.java
+++ b/enigma/src/test/java/cuchaz/enigma/TestDeobfed.java
@@ -18,11 +18,11 @@ import static org.hamcrest.Matchers.containsInAnyOrder;
18import java.nio.file.Files; 18import java.nio.file.Files;
19import java.nio.file.Path; 19import java.nio.file.Path;
20import java.nio.file.Paths; 20import java.nio.file.Paths;
21import java.util.List;
21 22
22import org.junit.BeforeClass; 23import org.junit.BeforeClass;
23import org.junit.Test; 24import org.junit.Test;
24 25
25import cuchaz.enigma.classprovider.ClasspathClassProvider;
26import cuchaz.enigma.source.Decompiler; 26import cuchaz.enigma.source.Decompiler;
27import cuchaz.enigma.source.Decompilers; 27import cuchaz.enigma.source.Decompilers;
28import cuchaz.enigma.source.SourceSettings; 28import cuchaz.enigma.source.SourceSettings;
@@ -37,10 +37,10 @@ public class TestDeobfed {
37 Enigma enigma = Enigma.create(); 37 Enigma enigma = Enigma.create();
38 38
39 Files.createDirectories(DEOBF.getParent()); 39 Files.createDirectories(DEOBF.getParent());
40 EnigmaProject obfProject = enigma.openJar(OBF, new ClasspathClassProvider(), ProgressListener.none()); 40 EnigmaProject obfProject = enigma.openJar(OBF, List.of(), ProgressListener.none());
41 obfProject.exportRemappedJar(ProgressListener.none()).write(DEOBF, ProgressListener.none()); 41 obfProject.exportRemappedJar(ProgressListener.none()).write(DEOBF, ProgressListener.none());
42 42
43 deobfProject = enigma.openJar(DEOBF, new ClasspathClassProvider(), ProgressListener.none()); 43 deobfProject = enigma.openJar(DEOBF, List.of(), ProgressListener.none());
44 } 44 }
45 45
46 @Test 46 @Test
diff --git a/enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java b/enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java
index 587494e..4eb09f6 100644
--- a/enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java
+++ b/enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java
@@ -13,10 +13,10 @@ package cuchaz.enigma;
13 13
14import java.io.IOException; 14import java.io.IOException;
15import java.nio.file.Paths; 15import java.nio.file.Paths;
16import java.util.List;
16 17
17import org.junit.Test; 18import org.junit.Test;
18 19
19import cuchaz.enigma.classprovider.ClasspathClassProvider;
20import cuchaz.enigma.source.Decompiler; 20import cuchaz.enigma.source.Decompiler;
21import cuchaz.enigma.source.Decompilers; 21import cuchaz.enigma.source.Decompilers;
22import cuchaz.enigma.source.SourceSettings; 22import cuchaz.enigma.source.SourceSettings;
@@ -24,7 +24,7 @@ import cuchaz.enigma.source.SourceSettings;
24public class TestDeobfuscator { 24public class TestDeobfuscator {
25 private EnigmaProject openProject() throws IOException { 25 private EnigmaProject openProject() throws IOException {
26 Enigma enigma = Enigma.create(); 26 Enigma enigma = Enigma.create();
27 return enigma.openJar(Paths.get("build/test-obf/loneClass.jar"), new ClasspathClassProvider(), ProgressListener.none()); 27 return enigma.openJar(Paths.get("build/test-obf/loneClass.jar"), List.of(), ProgressListener.none());
28 } 28 }
29 29
30 @Test 30 @Test
diff --git a/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java b/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java
index 659ac53..9164abe 100644
--- a/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java
+++ b/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java
@@ -13,11 +13,11 @@ package cuchaz.enigma.translation.mapping;
13 13
14import java.nio.file.Path; 14import java.nio.file.Path;
15import java.nio.file.Paths; 15import java.nio.file.Paths;
16import java.util.List;
16 17
17import cuchaz.enigma.Enigma; 18import cuchaz.enigma.Enigma;
18import cuchaz.enigma.EnigmaProject; 19import cuchaz.enigma.EnigmaProject;
19import cuchaz.enigma.ProgressListener; 20import cuchaz.enigma.ProgressListener;
20import cuchaz.enigma.classprovider.ClasspathClassProvider;
21import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader; 21import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader;
22 22
23public final class TestTinyV2InnerClasses { 23public final class TestTinyV2InnerClasses {
@@ -31,7 +31,7 @@ public final class TestTinyV2InnerClasses {
31 31
32 // @Test 32 // @Test
33 public void testMappings() throws Exception { 33 public void testMappings() throws Exception {
34 EnigmaProject project = Enigma.create().openJar(jar, new ClasspathClassProvider(), ProgressListener.none()); 34 EnigmaProject project = Enigma.create().openJar(jar, List.of(), ProgressListener.none());
35 project.setMappings(EnigmaMappingsReader.DIRECTORY.read(mappings, ProgressListener.none(), project.getEnigma().getProfile().getMappingSaveParameters())); 35 project.setMappings(EnigmaMappingsReader.DIRECTORY.read(mappings, ProgressListener.none(), project.getEnigma().getProfile().getMappingSaveParameters()));
36 } 36 }
37} 37}