1 package net.mograsim.plugin.launch;
3 import org.eclipse.core.resources.IProject;
4 import org.eclipse.core.resources.IResourceChangeEvent;
5 import org.eclipse.core.resources.IResourceChangeListener;
6 import org.eclipse.core.resources.ResourcesPlugin;
7 import org.eclipse.core.runtime.CoreException;
8 import org.eclipse.core.runtime.IProgressMonitor;
9 import org.eclipse.debug.core.ILaunch;
10 import org.eclipse.debug.core.ILaunchConfiguration;
11 import org.eclipse.debug.core.model.LaunchConfigurationDelegate;
13 import net.mograsim.machine.MachineDefinition;
14 import net.mograsim.plugin.MograsimActivator;
15 import net.mograsim.plugin.nature.MachineContext;
16 import net.mograsim.plugin.nature.ProjectMachineContext;
18 public class MachineLaunchConfigType extends LaunchConfigurationDelegate
20 public static final String PROJECT_ATTR = MograsimActivator.PLUGIN_ID + "project";
22 private final IResourceChangeListener resChangedListener;
24 public MachineLaunchConfigType()
26 this.resChangedListener = this::resourceChanged;
27 ResourcesPlugin.getWorkspace().addResourceChangeListener(resChangedListener,
28 // IResourceChangeEvent.POST_BUILD |
29 IResourceChangeEvent.POST_CHANGE |
30 // IResourceChangeEvent.PRE_BUILD |
31 // IResourceChangeEvent.PRE_CLOSE |
32 // IResourceChangeEvent.PRE_DELETE |
33 // IResourceChangeEvent.PRE_REFRESH |
38 public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException
40 String projName = configuration.getAttribute(PROJECT_ATTR, "");
41 IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projName);
42 MachineContext machineContext = ProjectMachineContext.getMachineContextOf(project);
43 MachineDefinition machineDefinition = machineContext.getMachineDefinition().orElseThrow();
45 MachineDebugTarget debugTarget = new MachineDebugTarget(new MachineProcess(launch, machineDefinition));
46 debugTarget.setExecutionSpeed(10d);
49 private void resourceChanged(IResourceChangeEvent event)
51 // TODO react to MPM changes
52 int type = event.getType();
56 case IResourceChangeEvent.POST_BUILD:
57 typeStr = "POST_BUILD";
59 case IResourceChangeEvent.POST_CHANGE:
60 typeStr = "POST_CHANGE";
62 case IResourceChangeEvent.PRE_BUILD:
63 typeStr = "PRE_BUILD";
65 case IResourceChangeEvent.PRE_CLOSE:
66 typeStr = "PRE_CLOSE";
68 case IResourceChangeEvent.PRE_DELETE:
69 typeStr = "PRE_DELETE";
71 case IResourceChangeEvent.PRE_REFRESH:
72 typeStr = "PRE_REFRESH";
75 typeStr = "<unknown: " + type + ">";
77 System.out.println(typeStr + ": " + event);