+
+ static void notifyListeners(ProjectContextEvent projectContextEvent)
+ {
+ listeners.forEach(l -> l.onProjectContextChange(projectContextEvent));
+ }
+
+ public static void addProjectContextListener(ProjectContextListener listener)
+ {
+ listeners.add(listener);
+ }
+
+ public static void removeProjectContextListener(ProjectContextListener listener)
+ {
+ listeners.remove(listener);
+ }
+
+ static
+ {
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(ProjectMachineContext::resourceChanged);
+ }
+
+ private static void resourceChanged(IResourceChangeEvent event)
+ {
+// System.out.println(((ResourceChangeEvent) event).toDebugString());
+ ProjectContextEventType eventType = ProjectContextEventType.ofResourceChangeEvent(event.getType());
+ if (eventType == null)
+ return;
+ if (event.getResource() == null || event.getResource().getProject() == null)
+ return;
+ MachineContext mc = projectMachineContexts.get(event.getResource().getProject());
+ if (mc == null)
+ return;
+// System.out.println(" " + eventType + " - " + mc.getProject());
+ notifyListeners(new ProjectContextEvent(mc, eventType));
+ }