summaryrefslogtreecommitdiff
path: root/enigma/src/main/java
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/main/java
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/main/java')
-rw-r--r--enigma/src/main/java/cuchaz/enigma/Enigma.java15
-rw-r--r--enigma/src/main/java/cuchaz/enigma/EnigmaProject.java8
2 files changed, 15 insertions, 8 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 }