diff options
3 files changed, 37 insertions, 2 deletions
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java index a9795bce..9faa0d0b 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java | |||
| @@ -49,6 +49,7 @@ import cuchaz.enigma.analysis.StructureTreeOptions; | |||
| 49 | import cuchaz.enigma.api.DataInvalidationEvent; | 49 | import cuchaz.enigma.api.DataInvalidationEvent; |
| 50 | import cuchaz.enigma.api.DataInvalidationListener; | 50 | import cuchaz.enigma.api.DataInvalidationListener; |
| 51 | import cuchaz.enigma.api.service.ObfuscationTestService; | 51 | import cuchaz.enigma.api.service.ObfuscationTestService; |
| 52 | import cuchaz.enigma.api.service.ProjectService; | ||
| 52 | import cuchaz.enigma.api.view.GuiView; | 53 | import cuchaz.enigma.api.view.GuiView; |
| 53 | import cuchaz.enigma.api.view.entry.EntryReferenceView; | 54 | import cuchaz.enigma.api.view.entry.EntryReferenceView; |
| 54 | import cuchaz.enigma.classhandle.ClassHandle; | 55 | import cuchaz.enigma.classhandle.ClassHandle; |
| @@ -133,11 +134,15 @@ public class GuiController implements ClientPacketHandler, GuiView, DataInvalida | |||
| 133 | this.gui.onStartOpenJar(); | 134 | this.gui.onStartOpenJar(); |
| 134 | 135 | ||
| 135 | return ProgressDialog.runOffThread(gui.getFrame(), progress -> { | 136 | return ProgressDialog.runOffThread(gui.getFrame(), progress -> { |
| 136 | project = enigma.openJars(jarPaths, new ClasspathClassProvider(), progress); | 137 | project = enigma.openJars(jarPaths, new ClasspathClassProvider(), progress, false); |
| 137 | project.addDataInvalidationListener(this); | 138 | project.addDataInvalidationListener(this); |
| 138 | indexTreeBuilder = new IndexTreeBuilder(project.getJarIndex()); | 139 | indexTreeBuilder = new IndexTreeBuilder(project.getJarIndex()); |
| 139 | chp = new ClassHandleProvider(project, UiConfig.getDecompiler().service); | 140 | chp = new ClassHandleProvider(project, UiConfig.getDecompiler().service); |
| 140 | SwingUtilities.invokeLater(() -> { | 141 | SwingUtilities.invokeLater(() -> { |
| 142 | for (ProjectService projectService : enigma.getServices().get(ProjectService.TYPE)) { | ||
| 143 | projectService.onProjectOpen(project); | ||
| 144 | } | ||
| 145 | |||
| 141 | gui.onFinishOpenJar(getFileNames(jarPaths)); | 146 | gui.onFinishOpenJar(getFileNames(jarPaths)); |
| 142 | refreshClasses(); | 147 | refreshClasses(); |
| 143 | }); | 148 | }); |
| @@ -152,6 +157,10 @@ public class GuiController implements ClientPacketHandler, GuiView, DataInvalida | |||
| 152 | } | 157 | } |
| 153 | 158 | ||
| 154 | public void closeJar() { | 159 | public void closeJar() { |
| 160 | for (ProjectService projectService : enigma.getServices().get(ProjectService.TYPE)) { | ||
| 161 | projectService.onProjectClose(project); | ||
| 162 | } | ||
| 163 | |||
| 155 | this.chp.destroy(); | 164 | this.chp.destroy(); |
| 156 | this.chp = null; | 165 | this.chp = null; |
| 157 | this.project = null; | 166 | this.project = null; |
diff --git a/enigma/src/main/java/cuchaz/enigma/Enigma.java b/enigma/src/main/java/cuchaz/enigma/Enigma.java index 729a1149..13640bcb 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 00000000..a9deefc2 --- /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 | } | ||