From b7427210851202a748ae0e25693f19e01b2afc4a Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 21 Aug 2025 02:39:03 +0100 Subject: Add ProjectService to listen for the project lifecycle --- enigma/src/main/java/cuchaz/enigma/Enigma.java | 15 ++++++++++++++- .../java/cuchaz/enigma/api/service/ProjectService.java | 13 +++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 enigma/src/main/java/cuchaz/enigma/api/service/ProjectService.java (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 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; import cuchaz.enigma.api.service.EnigmaServiceFactory; import cuchaz.enigma.api.service.EnigmaServiceType; 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.CombiningClassProvider; @@ -71,6 +72,10 @@ public class Enigma { } public EnigmaProject openJars(List paths, ClassProvider libraryClassProvider, ProgressListener progress) throws IOException { + return openJars(paths, libraryClassProvider, progress, true); + } + + public EnigmaProject openJars(List paths, ClassProvider libraryClassProvider, ProgressListener progress, boolean callServices) throws IOException { ClassProvider jarClassProvider = getJarClassProvider(paths); ClassProvider classProvider = new CachingClassProvider(new CombiningClassProvider(jarClassProvider, libraryClassProvider)); Set scope = Set.copyOf(jarClassProvider.getClassNames()); @@ -79,7 +84,15 @@ public class Enigma { ClassProvider classProviderWithFrames = index.indexJar(scope, classProvider, progress); services.get(JarIndexerService.TYPE).forEach(indexer -> indexer.acceptJar(scope, classProviderWithFrames, index)); - return new EnigmaProject(this, paths, classProvider, index, Utils.zipSha1(paths.toArray(new Path[0]))); + EnigmaProject project = new EnigmaProject(this, paths, classProvider, index, Utils.zipSha1(paths.toArray(new Path[0]))); + + if (callServices) { + for (ProjectService projectService : services.get(ProjectService.TYPE)) { + projectService.onProjectOpen(project); + } + } + + return project; } private ClassProvider getJarClassProvider(List 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 @@ +package cuchaz.enigma.api.service; + +import cuchaz.enigma.api.view.ProjectView; + +public interface ProjectService extends EnigmaService { + EnigmaServiceType TYPE = EnigmaServiceType.create("project"); + + default void onProjectOpen(ProjectView project) { + } + + default void onProjectClose(ProjectView project) { + } +} -- cgit v1.2.3