summaryrefslogtreecommitdiff
path: root/enigma/src/main/java
diff options
context:
space:
mode:
authorGravatar Joe2025-08-21 02:39:03 +0100
committerGravatar modmuss2025-09-13 09:14:23 +0100
commitb7427210851202a748ae0e25693f19e01b2afc4a (patch)
treec43d7e6ad91e262c651b49accf43c393493beda7 /enigma/src/main/java
parentFix threading issues in ClassHandleProvider that are likely to come up if a p... (diff)
downloadenigma-fork-b7427210851202a748ae0e25693f19e01b2afc4a.tar.gz
enigma-fork-b7427210851202a748ae0e25693f19e01b2afc4a.tar.xz
enigma-fork-b7427210851202a748ae0e25693f19e01b2afc4a.zip
Add ProjectService to listen for the project lifecycle
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/api/service/ProjectService.java13
2 files changed, 27 insertions, 1 deletions
diff --git a/enigma/src/main/java/cuchaz/enigma/Enigma.java b/enigma/src/main/java/cuchaz/enigma/Enigma.java
index 729a114..13640bc 100644
--- a/enigma/src/main/java/cuchaz/enigma/Enigma.java
+++ b/enigma/src/main/java/cuchaz/enigma/Enigma.java
@@ -36,6 +36,7 @@ import cuchaz.enigma.api.service.EnigmaService;
36import cuchaz.enigma.api.service.EnigmaServiceFactory; 36import cuchaz.enigma.api.service.EnigmaServiceFactory;
37import cuchaz.enigma.api.service.EnigmaServiceType; 37import cuchaz.enigma.api.service.EnigmaServiceType;
38import cuchaz.enigma.api.service.JarIndexerService; 38import cuchaz.enigma.api.service.JarIndexerService;
39import cuchaz.enigma.api.service.ProjectService;
39import cuchaz.enigma.classprovider.CachingClassProvider; 40import cuchaz.enigma.classprovider.CachingClassProvider;
40import cuchaz.enigma.classprovider.ClassProvider; 41import cuchaz.enigma.classprovider.ClassProvider;
41import cuchaz.enigma.classprovider.CombiningClassProvider; 42import cuchaz.enigma.classprovider.CombiningClassProvider;
@@ -71,6 +72,10 @@ public class Enigma {
71 } 72 }
72 73
73 public EnigmaProject openJars(List<Path> paths, ClassProvider libraryClassProvider, ProgressListener progress) throws IOException { 74 public EnigmaProject openJars(List<Path> paths, ClassProvider libraryClassProvider, ProgressListener progress) throws IOException {
75 return openJars(paths, libraryClassProvider, progress, true);
76 }
77
78 public EnigmaProject openJars(List<Path> paths, ClassProvider libraryClassProvider, ProgressListener progress, boolean callServices) throws IOException {
74 ClassProvider jarClassProvider = getJarClassProvider(paths); 79 ClassProvider jarClassProvider = getJarClassProvider(paths);
75 ClassProvider classProvider = new CachingClassProvider(new CombiningClassProvider(jarClassProvider, libraryClassProvider)); 80 ClassProvider classProvider = new CachingClassProvider(new CombiningClassProvider(jarClassProvider, libraryClassProvider));
76 Set<String> scope = Set.copyOf(jarClassProvider.getClassNames()); 81 Set<String> scope = Set.copyOf(jarClassProvider.getClassNames());
@@ -79,7 +84,15 @@ public class Enigma {
79 ClassProvider classProviderWithFrames = index.indexJar(scope, classProvider, progress); 84 ClassProvider classProviderWithFrames = index.indexJar(scope, classProvider, progress);
80 services.get(JarIndexerService.TYPE).forEach(indexer -> indexer.acceptJar(scope, classProviderWithFrames, index)); 85 services.get(JarIndexerService.TYPE).forEach(indexer -> indexer.acceptJar(scope, classProviderWithFrames, index));
81 86
82 return new EnigmaProject(this, paths, classProvider, index, Utils.zipSha1(paths.toArray(new Path[0]))); 87 EnigmaProject project = new EnigmaProject(this, paths, classProvider, index, Utils.zipSha1(paths.toArray(new Path[0])));
88
89 if (callServices) {
90 for (ProjectService projectService : services.get(ProjectService.TYPE)) {
91 projectService.onProjectOpen(project);
92 }
93 }
94
95 return project;
83 } 96 }
84 97
85 private ClassProvider getJarClassProvider(List<Path> jars) throws IOException { 98 private ClassProvider getJarClassProvider(List<Path> jars) throws IOException {
diff --git a/enigma/src/main/java/cuchaz/enigma/api/service/ProjectService.java b/enigma/src/main/java/cuchaz/enigma/api/service/ProjectService.java
new file mode 100644
index 0000000..a9deefc
--- /dev/null
+++ b/enigma/src/main/java/cuchaz/enigma/api/service/ProjectService.java
@@ -0,0 +1,13 @@
1package cuchaz.enigma.api.service;
2
3import cuchaz.enigma.api.view.ProjectView;
4
5public interface ProjectService extends EnigmaService {
6 EnigmaServiceType<ProjectService> TYPE = EnigmaServiceType.create("project");
7
8 default void onProjectOpen(ProjectView project) {
9 }
10
11 default void onProjectClose(ProjectView project) {
12 }
13}