From f8c7b8497e9687e15123caca7d4fde54f5bf067a Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 11 Sep 2025 17:35:30 +0100 Subject: Allow you to specify the libraries in the program args rather than always using the runtime classpath --- enigma/src/main/java/cuchaz/enigma/Enigma.java | 15 ++++++++------- enigma/src/main/java/cuchaz/enigma/EnigmaProject.java | 8 +++++++- enigma/src/test/java/cuchaz/enigma/TestDeobfed.java | 6 +++--- enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java | 4 ++-- .../translation/mapping/TestTinyV2InnerClasses.java | 4 ++-- 5 files changed, 22 insertions(+), 15 deletions(-) (limited to 'enigma/src') 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; import cuchaz.enigma.api.service.ProjectService; import cuchaz.enigma.classprovider.CachingClassProvider; import cuchaz.enigma.classprovider.ClassProvider; +import cuchaz.enigma.classprovider.ClasspathClassProvider; import cuchaz.enigma.classprovider.CombiningClassProvider; import cuchaz.enigma.classprovider.JarClassProvider; import cuchaz.enigma.utils.I18n; @@ -67,24 +68,24 @@ public class Enigma { return new Builder(); } - public EnigmaProject openJar(Path path, ClassProvider libraryClassProvider, ProgressListener progress) throws IOException { - return openJars(List.of(path), libraryClassProvider, progress); + public EnigmaProject openJar(Path path, List libraries, ProgressListener progress) throws IOException { + return openJars(List.of(path), libraries, progress); } - public EnigmaProject openJars(List paths, ClassProvider libraryClassProvider, ProgressListener progress) throws IOException { - return openJars(paths, libraryClassProvider, progress, true); + public EnigmaProject openJars(List paths, List libraries, ProgressListener progress) throws IOException { + return openJars(paths, libraries, progress, true); } - public EnigmaProject openJars(List paths, ClassProvider libraryClassProvider, ProgressListener progress, boolean callServices) throws IOException { + public EnigmaProject openJars(List paths, List libraries, ProgressListener progress, boolean callServices) throws IOException { ClassProvider jarClassProvider = getJarClassProvider(paths); - ClassProvider classProvider = new CachingClassProvider(new CombiningClassProvider(jarClassProvider, libraryClassProvider)); + ClassProvider classProvider = new CachingClassProvider(new CombiningClassProvider(jarClassProvider, getJarClassProvider(libraries), new ClasspathClassProvider())); Set scope = Set.copyOf(jarClassProvider.getClassNames()); JarIndex index = JarIndex.empty(); ClassProvider classProviderWithFrames = index.indexJar(scope, classProvider, progress); services.get(JarIndexerService.TYPE).forEach(indexer -> indexer.acceptJar(scope, classProviderWithFrames, index)); - EnigmaProject project = new EnigmaProject(this, paths, classProvider, scope, index, Utils.zipSha1(paths.toArray(new Path[0]))); + EnigmaProject project = new EnigmaProject(this, paths, libraries, classProvider, scope, index, Utils.zipSha1(paths.toArray(new Path[0]))); if (callServices) { 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 { private final Enigma enigma; private final List jarPaths; + private final List libraryPaths; private final ClassProvider classProvider; private final JarIndex jarIndex; private final byte[] jarChecksum; @@ -71,13 +72,14 @@ public class EnigmaProject implements ProjectView { private final List dataInvalidationListeners = new ArrayList<>(); - public EnigmaProject(Enigma enigma, List jarPaths, ClassProvider classProvider, Set projectClasses, JarIndex jarIndex, byte[] jarChecksum) { + public EnigmaProject(Enigma enigma, List jarPaths, List libraryPaths, ClassProvider classProvider, Set projectClasses, JarIndex jarIndex, byte[] jarChecksum) { if (jarChecksum.length != 20) { throw new IllegalArgumentException(); } this.enigma = enigma; this.jarPaths = List.copyOf(jarPaths); + this.libraryPaths = List.copyOf(libraryPaths); this.classProvider = classProvider; this.jarIndex = jarIndex; this.jarChecksum = jarChecksum; @@ -109,6 +111,10 @@ public class EnigmaProject implements ProjectView { return jarPaths; } + public List getLibraryPaths() { + return libraryPaths; + } + public ClassProvider getClassProvider() { return classProvider; } 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; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.List; import org.junit.BeforeClass; import org.junit.Test; -import cuchaz.enigma.classprovider.ClasspathClassProvider; import cuchaz.enigma.source.Decompiler; import cuchaz.enigma.source.Decompilers; import cuchaz.enigma.source.SourceSettings; @@ -37,10 +37,10 @@ public class TestDeobfed { Enigma enigma = Enigma.create(); Files.createDirectories(DEOBF.getParent()); - EnigmaProject obfProject = enigma.openJar(OBF, new ClasspathClassProvider(), ProgressListener.none()); + EnigmaProject obfProject = enigma.openJar(OBF, List.of(), ProgressListener.none()); obfProject.exportRemappedJar(ProgressListener.none()).write(DEOBF, ProgressListener.none()); - deobfProject = enigma.openJar(DEOBF, new ClasspathClassProvider(), ProgressListener.none()); + deobfProject = enigma.openJar(DEOBF, List.of(), ProgressListener.none()); } @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; import java.io.IOException; import java.nio.file.Paths; +import java.util.List; import org.junit.Test; -import cuchaz.enigma.classprovider.ClasspathClassProvider; import cuchaz.enigma.source.Decompiler; import cuchaz.enigma.source.Decompilers; import cuchaz.enigma.source.SourceSettings; @@ -24,7 +24,7 @@ import cuchaz.enigma.source.SourceSettings; public class TestDeobfuscator { private EnigmaProject openProject() throws IOException { Enigma enigma = Enigma.create(); - return enigma.openJar(Paths.get("build/test-obf/loneClass.jar"), new ClasspathClassProvider(), ProgressListener.none()); + return enigma.openJar(Paths.get("build/test-obf/loneClass.jar"), List.of(), ProgressListener.none()); } @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; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.List; import cuchaz.enigma.Enigma; import cuchaz.enigma.EnigmaProject; import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.classprovider.ClasspathClassProvider; import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader; public final class TestTinyV2InnerClasses { @@ -31,7 +31,7 @@ public final class TestTinyV2InnerClasses { // @Test public void testMappings() throws Exception { - EnigmaProject project = Enigma.create().openJar(jar, new ClasspathClassProvider(), ProgressListener.none()); + EnigmaProject project = Enigma.create().openJar(jar, List.of(), ProgressListener.none()); project.setMappings(EnigmaMappingsReader.DIRECTORY.read(mappings, ProgressListener.none(), project.getEnigma().getProfile().getMappingSaveParameters())); } } -- cgit v1.2.3