Skip to content

Commit

Permalink
Merge pull request #106 from eclipse/lsp4e-debuggers
Browse files Browse the repository at this point in the history
Replace hand-crafted debuggers with LSP4E-based debuggers
  • Loading branch information
agarciadom authored Jul 4, 2024
2 parents 30f467c + 6835811 commit c015c25
Show file tree
Hide file tree
Showing 36 changed files with 357 additions and 1,510 deletions.
4 changes: 3 additions & 1 deletion examples/org.eclipse.epsilon.edl.dt/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@
delegate="org.eclipse.epsilon.edl.dt.launching.EdlLaunchConfigurationDelegate"
id="org.epsilon.edl.eclipse.dt.launching.EdlLaunchConfigurationDelegate"
modes="run, debug"
name="EDL Demo"/>
name="EDL Demo"
sourceLocatorId="org.eclipse.lsp4e.debug.sourceLocator"
sourcePathComputerId="org.eclipse.lsp4e.debug.sourcePathComputer"/>
</extension>
<extension
point="org.eclipse.debug.ui.launchConfigurationTabGroups">
Expand Down
4 changes: 3 additions & 1 deletion examples/org.eclipse.epsilon.examples.testlang.dt/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
delegate="org.eclipse.epsilon.examples.testlang.dt.launching.TestLangLaunchConfigurationDelegate"
id="org.eclipse.epsilon.examples.testlang.dt.launchConfigurationType"
modes="run,debug"
name="TestLang Launch Configuration">
name="TestLang Launch Configuration"
sourceLocatorId="org.eclipse.lsp4e.debug.sourceLocator"
sourcePathComputerId="org.eclipse.lsp4e.debug.sourcePathComputer">
</launchConfigurationType>
</extension>
<extension
Expand Down
4 changes: 3 additions & 1 deletion plugins/org.eclipse.epsilon.ecl.dt/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@
delegate="org.eclipse.epsilon.ecl.dt.launching.EclLaunchConfigurationDelegate"
id="org.epsilon.ecl.eclipse.dt.launching.EclLaunchConfigurationDelegate"
modes="run, debug"
name="ECL Comparison"/>
name="ECL Comparison"
sourceLocatorId="org.eclipse.lsp4e.debug.sourceLocator"
sourcePathComputerId="org.eclipse.lsp4e.debug.sourcePathComputer"/>
</extension>
<extension
point="org.eclipse.debug.ui.launchConfigurationTabGroups">
Expand Down
4 changes: 3 additions & 1 deletion plugins/org.eclipse.epsilon.egl.dt/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
delegate="org.eclipse.epsilon.egl.dt.launching.EglLaunchConfigurationDelegate"
id="org.epsilon.egl.eclipse.dt.launching.EglLaunchConfigurationDelegate"
modes="run,debug"
name="EGL Generator">
name="EGL Generator"
sourceLocatorId="org.eclipse.lsp4e.debug.sourceLocator"
sourcePathComputerId="org.eclipse.lsp4e.debug.sourcePathComputer">
xxx
</launchConfigurationType>
</extension>
Expand Down
4 changes: 3 additions & 1 deletion plugins/org.eclipse.epsilon.emg.dt/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@
delegate="org.eclipse.epsilon.emg.dt.launching.EmgLaunchConfigurationDelegate"
id="org.epsilon.emg.eclipse.dt.launching.EmgLaunchConfigurationDelegate"
modes="run, debug"
name="EMG Program">
name="EMG Program"
sourceLocatorId="org.eclipse.lsp4e.debug.sourceLocator"
sourcePathComputerId="org.eclipse.lsp4e.debug.sourcePathComputer">
</launchConfigurationType>
</extension>
<extension
Expand Down
4 changes: 3 additions & 1 deletion plugins/org.eclipse.epsilon.eml.dt/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@
delegate="org.eclipse.epsilon.eml.dt.launching.EmlLaunchConfigurationDelegate"
id="org.epsilon.eml.eclipse.dt.launcing.EmlLaunchConfigurationDelegate"
modes="run,debug"
name="EML Merging"/>
name="EML Merging"
sourceLocatorId="org.eclipse.lsp4e.debug.sourceLocator"
sourcePathComputerId="org.eclipse.lsp4e.debug.sourcePathComputer"/>
</extension>
<extension
point="org.eclipse.debug.ui.launchConfigurationTypeImages">
Expand Down
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
/*******************************************************************************
* Copyright (c) 2008 The University of York.
* Copyright (c) 2008-2024 The University of York.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* Dimitrios Kolovos - initial API and implementation
******************************************************************************/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.epsilon.eml.dt.launching;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.Collection;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.epsilon.common.dt.launching.extensions.ModuleImplementationExtension;
import org.eclipse.epsilon.common.module.IModule;
import org.eclipse.epsilon.ecl.EclModule;
import org.eclipse.epsilon.ecl.debug.EclDebugger;
import org.eclipse.epsilon.ecl.dt.launching.EclLaunchConfigurationDelegate;
import org.eclipse.epsilon.ecl.trace.MatchTrace;
import org.eclipse.epsilon.eml.EmlModule;
import org.eclipse.epsilon.eml.debug.EmlDebugger;
import org.eclipse.epsilon.eol.EolModule;
import org.eclipse.epsilon.eol.IEolModule;
import org.eclipse.epsilon.eol.dt.launching.EolLaunchConfigurationAttributes;
import org.eclipse.epsilon.eol.dt.launching.EpsilonLaunchConfigurationDelegate;
import org.eclipse.epsilon.eol.models.ModelRepository;
import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
import org.eclipse.epsilon.eol.execute.control.IExecutionListener;

public class EmlLaunchConfigurationDelegate extends EpsilonLaunchConfigurationDelegate {

MatchTrace matchTrace = null;
ModelRepository modelRepository = null;

/**
* The language provided by the plugin. It allows other plugins to contribute
* alternate IModule implementation of the language.
Expand All @@ -38,37 +38,69 @@ public class EmlLaunchConfigurationDelegate extends EpsilonLaunchConfigurationDe
public String getLanguage() {
return "EML";
}


class EclEmlModule extends EolModule {
EclModule eclModule = new EclModule();
EmlModule emlModule = new EmlModule();

@Override
public URI getUri() {
try {
return new URI("dummy-ecl-eml-module");
} catch (URISyntaxException e) {
e.printStackTrace();
}
return null;
}

@Override
public Object executeImpl() throws EolRuntimeException {
// Use the ECL model repository for this combo module (to ensure proper disposal)
getContext().setModelRepository(eclModule.getContext().getModelRepository());

// Copy over execution listeners to the ECL and EML modules (for debugging)
final Collection<IExecutionListener> eclListeners = getContext().getExecutorFactory().getExecutionListeners();
eclListeners.forEach(l -> eclModule.getContext().getExecutorFactory().addExecutionListener(l));
eclListeners.forEach(l -> emlModule.getContext().getExecutorFactory().addExecutionListener(l));

// Execute the ECL module first
context.getExecutorFactory().execute(eclModule, context);

// Bring over the results from the ECL module
emlModule.getContext().setMatchTrace(eclModule.getContext().getMatchTrace().getReduced());
emlModule.getContext().setModelRepository(eclModule.getContext().getModelRepository());

return emlModule.execute();
}
}

@Override
public void launch(ILaunchConfiguration configuration, String mode,
ILaunch launch, IProgressMonitor progressMonitor)
throws CoreException {

EclLaunchConfigurationDelegate eclLaunchConfigurationDelegate = new EclLaunchConfigurationDelegate() {
@Override
protected void postExecute(IEolModule module) {
if (module instanceof EclModule) {
matchTrace = ((EclModule) module).getContext().getMatchTrace().getReduced();
modelRepository = ((EclModule) module).getContext().getModelRepository();
}
}
};

if (!eclLaunchConfigurationDelegate.launch(configuration, mode, launch,
progressMonitor, new EclModule(), new EclDebugger(), EmlLaunchConfigurationAttributes.ECL_SOURCE, true, false))
return;

super.launch(configuration, mode, launch,
progressMonitor, new EmlModule(), new EmlDebugger(), EolLaunchConfigurationAttributes.SOURCE, false, true);

super.launch(configuration, mode, launch, progressMonitor, new EclEmlModule(),
null, EolLaunchConfigurationAttributes.SOURCE, true, true);
}

@Override
protected void preExecute(IEolModule module) {
if (module instanceof EmlModule) {
((EmlModule) module).getContext().setMatchTrace(matchTrace);
((EmlModule) module).getContext().setModelRepository(modelRepository);
}
protected void setupModule(ILaunchConfiguration configuration, ILaunch launch, IProgressMonitor progressMonitor, IEolModule module, boolean setup) throws Exception {
// Setup context for combo module (to allow printing errors from the EML/ECL modules to the Eclipse console)
super.setupModule(configuration, launch, progressMonitor, module, false);

// Load the models for ECL
final boolean loadModelsECL = true;
super.setupModule(configuration, launch, progressMonitor, ((EclEmlModule) module).eclModule, loadModelsECL);

// Don't load them for EML (we'll reuse the model repository from ECL in EML)
final boolean loadModelsEML = false;
super.setupModule(configuration, launch, progressMonitor, ((EclEmlModule) module).emlModule, loadModelsEML);
}

@Override
protected boolean parse(IModule module, String sourceAttribute, ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor progressMonitor) throws CoreException {
// Parse the nested ECL module as well
return super.parse(((EclEmlModule)module).eclModule, EmlLaunchConfigurationAttributes.ECL_SOURCE, configuration, mode, launch, progressMonitor)
&& super.parse(((EclEmlModule)module).emlModule, sourceAttribute, configuration, mode, launch, progressMonitor);
}

@Override
Expand Down
2 changes: 1 addition & 1 deletion plugins/org.eclipse.epsilon.eol.dap/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Bundle-Version: 2.6.0.qualifier
Export-Package: org.eclipse.epsilon.eol.dap,
org.eclipse.epsilon.eol.dap.variables
Require-Bundle: org.eclipse.epsilon.eol.engine;bundle-version="2.6.0",
org.eclipse.lsp4j.debug,
org.eclipse.lsp4j.debug;bundle-version="0.23.1",
org.eclipse.lsp4j.jsonrpc,
org.eclipse.lsp4j.jsonrpc.debug,
com.google.gson;bundle-version="2.0.0",
Expand Down
5 changes: 4 additions & 1 deletion plugins/org.eclipse.epsilon.eol.dt/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ Require-Bundle: org.eclipse.jface.text,
org.eclipse.ui.console,
org.eclipse.ui.workbench.texteditor,
org.eclipse.ui.ide,
org.eclipse.epsilon.common.dt
org.eclipse.epsilon.common.dt,
org.eclipse.epsilon.eol.dap,
org.eclipse.lsp4e.debug,
org.eclipse.lsp4j.debug
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.epsilon.eol.dt,
org.eclipse.epsilon.eol.dt.debug,
Expand Down
11 changes: 3 additions & 8 deletions plugins/org.eclipse.epsilon.eol.dt/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
delegate="org.eclipse.epsilon.eol.dt.launching.EolLaunchConfigurationDelegate"
id="org.epsilon.eol.eclipse.dt.launching.EolLaunchConfigurationDelegate"
modes="run, debug"
name="EOL Program">
name="EOL Program"
sourceLocatorId="org.eclipse.lsp4e.debug.sourceLocator"
sourcePathComputerId="org.eclipse.lsp4e.debug.sourcePathComputer">
</launchConfigurationType>
</extension>
<extension
Expand Down Expand Up @@ -93,13 +95,6 @@
</action>
</viewerContribution>
</extension>
<extension
point="org.eclipse.debug.ui.debugModelPresentations">
<debugModelPresentation
class="org.eclipse.epsilon.eol.dt.debug.DebugModelPresentation"
id="eol.debugModel">
</debugModelPresentation>
</extension>
<extension
point="org.eclipse.epsilon.common.dt.moduleValidator">
<moduleValidator
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,11 @@ public String getModelIdentifier() {
class EolBreakpointUpdater implements IBreakpointListener {

public void breakpointAdded(IBreakpoint breakpoint) {
// TODO Auto-generated method stub

// nothing to do
}

public void breakpointRemoved(IBreakpoint breakpoint, IMarkerDelta delta) {
// TODO Auto-generated method stub

// nothing to do
}

public void breakpointChanged(IBreakpoint breakpoint, IMarkerDelta delta) {
Expand Down
Loading

0 comments on commit c015c25

Please sign in to comment.