+
+ 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)
+ {
+ ProjectContextEventType eventType = ProjectContextEventType.ofResourceChangeEvent(event.getType());
+ if (eventType == null)
+ return;
+ IProject p = event.getResource().getProject();
+ if (p == null)
+ return;
+ MachineContext mc = projectMachineContexts.get(p);
+ if (mc == null)
+ return;
+ notifyListeners(new ProjectContextEvent(mc, eventType));
+ }