diff options
| author | 2025-08-21 02:39:03 +0100 | |
|---|---|---|
| committer | 2025-09-13 09:14:23 +0100 | |
| commit | b7427210851202a748ae0e25693f19e01b2afc4a (patch) | |
| tree | c43d7e6ad91e262c651b49accf43c393493beda7 /enigma/src/main/java | |
| parent | Fix threading issues in ClassHandleProvider that are likely to come up if a p... (diff) | |
| download | enigma-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.java | 15 | ||||
| -rw-r--r-- | enigma/src/main/java/cuchaz/enigma/api/service/ProjectService.java | 13 |
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; | |||
| 36 | import cuchaz.enigma.api.service.EnigmaServiceFactory; | 36 | import cuchaz.enigma.api.service.EnigmaServiceFactory; |
| 37 | import cuchaz.enigma.api.service.EnigmaServiceType; | 37 | import cuchaz.enigma.api.service.EnigmaServiceType; |
| 38 | import cuchaz.enigma.api.service.JarIndexerService; | 38 | import cuchaz.enigma.api.service.JarIndexerService; |
| 39 | import cuchaz.enigma.api.service.ProjectService; | ||
| 39 | import cuchaz.enigma.classprovider.CachingClassProvider; | 40 | import cuchaz.enigma.classprovider.CachingClassProvider; |
| 40 | import cuchaz.enigma.classprovider.ClassProvider; | 41 | import cuchaz.enigma.classprovider.ClassProvider; |
| 41 | import cuchaz.enigma.classprovider.CombiningClassProvider; | 42 | import 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 @@ | |||
| 1 | package cuchaz.enigma.api.service; | ||
| 2 | |||
| 3 | import cuchaz.enigma.api.view.ProjectView; | ||
| 4 | |||
| 5 | public 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 | } | ||