Skip to content

Commit 540a9a6

Browse files
committed
Working demo with omniscient debugging and REPL
1 parent f796be2 commit 540a9a6

File tree

17 files changed

+362
-49
lines changed

17 files changed

+362
-49
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ bin/
22
**/xtend-gen/
33
*/*.class
44
**/target/
5+
**/.settings

.project

+6
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,13 @@
55
<projects>
66
</projects>
77
<buildSpec>
8+
<buildCommand>
9+
<name>org.eclipse.m2e.core.maven2Builder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
813
</buildSpec>
914
<natures>
15+
<nature>org.eclipse.m2e.core.maven2Nature</nature>
1016
</natures>
1117
</projectDescription>

java_engine/plugins/org.eclipse.gemoc.execution.sequential.javaengine.ui/.project

+6
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,14 @@
2525
<arguments>
2626
</arguments>
2727
</buildCommand>
28+
<buildCommand>
29+
<name>org.eclipse.m2e.core.maven2Builder</name>
30+
<arguments>
31+
</arguments>
32+
</buildCommand>
2833
</buildSpec>
2934
<natures>
35+
<nature>org.eclipse.m2e.core.maven2Nature</nature>
3036
<nature>org.eclipse.jdt.core.javanature</nature>
3137
<nature>org.eclipse.pde.PluginNature</nature>
3238
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>

java_engine/plugins/org.eclipse.gemoc.execution.sequential.javaengine/.project

+6
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,14 @@
2525
<arguments>
2626
</arguments>
2727
</buildCommand>
28+
<buildCommand>
29+
<name>org.eclipse.m2e.core.maven2Builder</name>
30+
<arguments>
31+
</arguments>
32+
</buildCommand>
2833
</buildSpec>
2934
<natures>
35+
<nature>org.eclipse.m2e.core.maven2Nature</nature>
3036
<nature>org.eclipse.pde.PluginNature</nature>
3137
<nature>org.eclipse.jdt.core.javanature</nature>
3238
<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>

java_engine/plugins/org.eclipse.gemoc.execution.sequential.javaengine/src/org/eclipse/gemoc/execution/sequential/javaengine/PlainK3ExecutionEngine.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,8 @@ private Bundle findBundle(final ISequentialModelExecutionContext<?> executionCon
350350
// We try to look into an already loaded bundle
351351
bundle = Platform.getBundle(bundleName);
352352
}
353-
} else {
353+
}
354+
if (bundle == null) {
354355
// the main isn't visible directly from the workspace, try another
355356
// method
356357
bundle = _executionContext.getDslBundle();

java_engine/pomfirst/.project

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>pomfirst</name>
4+
<comment></comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
<buildCommand>
9+
<name>org.eclipse.m2e.core.maven2Builder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
13+
</buildSpec>
14+
<natures>
15+
<nature>org.eclipse.m2e.core.maven2Nature</nature>
16+
</natures>
17+
</projectDescription>

java_engine/pomfirst/org.eclipse.gemoc.execution.sequential.javaengine.mep/pom.xml

+20
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,13 @@
5454
<artifactId>org.eclipse.gemoc.execution.sequential.javaengine</artifactId>
5555
<version>4.0.0-SNAPSHOT</version>
5656
</dependency>
57+
<dependency>
58+
<groupId>org.eclipse.emf</groupId>
59+
<artifactId>org.eclipse.emf.compare</artifactId>
60+
<version>3.5.2.201805161152</version>
61+
<scope>system</scope>
62+
<systemPath>${basedir}/lib_not_correctly_deployed/org.eclipse.emf.compare_3.5.2.201805161152.jar</systemPath>
63+
</dependency>
5764
<dependency>
5865
<groupId>org.eclipse.emf</groupId>
5966
<artifactId>org.eclipse.emf.transaction</artifactId>
@@ -76,6 +83,19 @@
7683
<artifactId>org.eclipse.gemoc.trace.gemoc</artifactId>
7784
<version>3.0.1-SNAPSHOT</version>
7885
</dependency>
86+
<dependency>
87+
<groupId>org.emfjson</groupId>
88+
<artifactId>emfjson-jackson</artifactId>
89+
<version>1.3.0</version>
90+
</dependency>
91+
92+
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
93+
<dependency>
94+
<groupId>com.fasterxml.jackson.core</groupId>
95+
<artifactId>jackson-core</artifactId>
96+
<version>2.12.1</version>
97+
</dependency>
98+
7999
</dependencies>
80100
<repositories>
81101
<repository>

java_engine/pomfirst/org.eclipse.gemoc.execution.sequential.javaengine.mep/src/main/java/org/eclipse/gemoc/execution/sequential/javaengine/mep/HeadlessDebugEventHandler.java

+11-13
Original file line numberDiff line numberDiff line change
@@ -5,35 +5,33 @@
55
import org.eclipse.gemoc.dsl.debug.ide.event.IDSLDebugEvent;
66
import org.eclipse.gemoc.dsl.debug.ide.event.IDSLDebugEventProcessor;
77
import org.eclipse.gemoc.dsl.debug.ide.event.debugger.BreakpointReply;
8+
import org.eclipse.gemoc.dsl.debug.ide.event.debugger.SetCurrentInstructionReply;
89
import org.eclipse.gemoc.dsl.debug.ide.event.debugger.SpawnRunningThreadReply;
910
import org.eclipse.gemoc.dsl.debug.ide.event.debugger.TerminatedReply;
1011

1112
public class HeadlessDebugEventHandler implements IDSLDebugEventProcessor {
1213

1314
private volatile Semaphore breakReached;
14-
private volatile boolean simulationEnded;
15+
16+
public HeadlessDebugEventHandler() {
17+
this.breakReached = new Semaphore(0);
18+
}
1519

1620
@Override
1721
public Object handleEvent(IDSLDebugEvent event) {
18-
if (event instanceof SpawnRunningThreadReply) {
19-
simulationEnded = false;
20-
breakReached = new Semaphore(-1);
21-
} else if (event instanceof BreakpointReply) {
22-
breakReached.release();
23-
} else if (event instanceof TerminatedReply) {
24-
simulationEnded = true;
22+
if (event instanceof BreakpointReply || event instanceof TerminatedReply) {
2523
breakReached.release();
2624
}
27-
//System.out.println(" Debug event: " + event.toString());
25+
System.err.println(" Debug event: " + event.toString());
2826
return null;
2927
}
3028

31-
public boolean isSimulationEnded() {
32-
return this.simulationEnded;
33-
}
34-
3529
public void waitBreakReached() throws InterruptedException {
3630
this.breakReached.acquire();
3731
}
3832

33+
public void clearPermits() {
34+
this.breakReached.drainPermits();
35+
}
36+
3937
}

java_engine/pomfirst/org.eclipse.gemoc.execution.sequential.javaengine.mep/src/main/java/org/eclipse/gemoc/execution/sequential/javaengine/mep/HeadlessGenericSequentialModelDebugger.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@
55
import org.eclipse.gemoc.executionframework.debugger.GenericSequentialModelDebugger;
66
import org.eclipse.gemoc.xdsmlframework.api.core.IExecutionEngine;
77

8-
public class HeadlessGenericSequentialModelDebugger extends GenericSequentialModelDebugger {
8+
public class HeadlessGenericSequentialModelDebugger extends GenericSequentialModelDebugger implements IHeadlessGemocDebugger {
99

1010
public HeadlessGenericSequentialModelDebugger(IDSLDebugEventProcessor target, IExecutionEngine<?> engine) {
1111
super(target, engine);
1212
}
1313

14+
@Override
1415
public String getThreadName() {
1516
return threadName;
1617
}
1718

19+
@Override
1820
public EObject getCurrentInstruction() {
1921
return currentInstructions.get(threadName);
2022
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.eclipse.gemoc.execution.sequential.javaengine.mep;
2+
3+
import java.util.Set;
4+
import java.util.function.Supplier;
5+
6+
import org.eclipse.emf.ecore.EObject;
7+
import org.eclipse.gemoc.dsl.debug.ide.event.IDSLDebugEventProcessor;
8+
import org.eclipse.gemoc.executionframework.debugger.Activator;
9+
import org.eclipse.gemoc.executionframework.debugger.OmniscientGenericSequentialModelDebugger;
10+
import org.eclipse.gemoc.trace.gemoc.api.IMultiDimensionalTraceAddon;
11+
import org.eclipse.gemoc.trace.gemoc.api.ITraceViewNotifier;
12+
import org.eclipse.gemoc.xdsmlframework.api.core.IExecutionEngine;
13+
14+
public class HeadlessOmniscientGenericSequentialModelDebugger extends OmniscientGenericSequentialModelDebugger implements IHeadlessGemocDebugger {
15+
16+
public HeadlessOmniscientGenericSequentialModelDebugger(IDSLDebugEventProcessor target, IExecutionEngine<?> engine) {
17+
super(target, engine);
18+
}
19+
20+
@Override
21+
public String getThreadName() {
22+
return threadName;
23+
}
24+
25+
@Override
26+
public EObject getCurrentInstruction() {
27+
return currentInstructions.get(threadName);
28+
}
29+
30+
@Override
31+
public void engineStarted(final IExecutionEngine<?> executionEngine) {
32+
final Activator activator = Activator.getDefault();
33+
final Supplier<OmniscientGenericSequentialModelDebugger> _function = () -> {
34+
return this;
35+
};
36+
activator.setDebuggerSupplier(_function);
37+
super.engineStarted(executionEngine);
38+
final Set<IMultiDimensionalTraceAddon> traceAddons = executionEngine.<IMultiDimensionalTraceAddon>getAddonsTypedBy(IMultiDimensionalTraceAddon.class);
39+
final IMultiDimensionalTraceAddon traceAddon = traceAddons.iterator().next();
40+
this.traceExplorer = traceAddon.getTraceExplorer();
41+
final ITraceViewNotifier.TraceViewCommand _function_1 = () -> {
42+
this.update();
43+
};
44+
this.traceExplorer.registerCommand(this, _function_1);
45+
}
46+
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.eclipse.gemoc.execution.sequential.javaengine.mep;
2+
3+
import org.eclipse.emf.ecore.EObject;
4+
import org.eclipse.gemoc.dsl.debug.ide.event.IDSLDebugEvent;
5+
import org.eclipse.gemoc.executionframework.debugger.IGemocDebugger;
6+
7+
public interface IHeadlessGemocDebugger extends IGemocDebugger {
8+
9+
String getThreadName();
10+
11+
EObject getCurrentInstruction();
12+
13+
void stepReturn(String threadName);
14+
15+
Object handleEvent(IDSLDebugEvent event);
16+
17+
void stepOver(String threadName);
18+
19+
void stepInto(String threadName);
20+
21+
boolean isTerminated();
22+
23+
void terminate();
24+
25+
void resume();
26+
27+
}

0 commit comments

Comments
 (0)