Skip to content

Commit 8489782

Browse files
committed
Improved state graph layouting, and added a diff viewer allowing to compare two execution traces
1 parent 6212f1f commit 8489782

File tree

44 files changed

+1742
-539
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1742
-539
lines changed

java_execution/java_engine/plugins/org.gemoc.execution.sequential.javaengine.ui/src/org/gemoc/execution/sequential/javaengine/ui/debug/OmniscientGenericSequentialModelDebugger.xtend

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public class OmniscientGenericSequentialModelDebugger extends GenericSequentialM
109109
if (steppingOverStackFrameIndex != -1) {
110110
val seqEngine = engine as IExecutionEngine
111111
val stack = traceExplorer.callStack
112-
val idx = stack.size - steppingOverStackFrameIndex
112+
val idx = stack.size - steppingOverStackFrameIndex - 1
113113
// We add a future break as soon as the step is over
114114
addPredicateBreak(new BiPredicate<IExecutionEngine, MSEOccurrence>() {
115115
// The operation we want to step over
@@ -152,7 +152,7 @@ public class OmniscientGenericSequentialModelDebugger extends GenericSequentialM
152152
if (steppingReturnStackFrameIndex != -1) {
153153
val seqEngine = engine as IExecutionEngine
154154
val stack = traceExplorer.callStack
155-
val idx = stack.size - steppingReturnStackFrameIndex
155+
val idx = stack.size - steppingReturnStackFrameIndex - 1
156156
addPredicateBreak(new BiPredicate<IExecutionEngine, MSEOccurrence>() {
157157
private MSEOccurrence steppedReturn = stack.get(idx).mseoccurrence
158158

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@
4343
<layout>p2</layout>
4444
<url>http://melange-lang.org/updatesite/</url>
4545
</repository>
46+
<repository>
47+
<id>elk</id>
48+
<layout>p2</layout>
49+
<url>http://download.eclipse.org/elk/updates/releases/0.1.0/</url>
50+
</repository>
4651
<!-- <repository> -->
4752
<!-- <id>Sirius</id> -->
4853
<!-- <layout>p2</layout> -->

trace/commons/plugins/fr.inria.diverse.trace.gemoc.api/src/fr/inria/diverse/trace/gemoc/api/ITraceExtractor.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,13 @@ public interface ITraceExtractor {
8585
* @return A generic wrapper of the state
8686
*/
8787
StateWrapper getStateWrapper(int stateIndex);
88+
89+
/**
90+
* Creates and returns a generic wrapper of the provided specific state.
91+
* @param state The state to create a wrapper for
92+
* @return A generic wrapper of the state
93+
*/
94+
StateWrapper getStateWrapper(EObject state);
8895

8996
/**
9097
* Returns a list of generic wrappers of the specific states located between
@@ -183,17 +190,27 @@ class StateWrapper {
183190
public EObject state;
184191
public int stateIndex;
185192
public boolean breakable;
193+
public String description;
186194

187195
public StateWrapper() {
188196
state = null;
189197
stateIndex = -1;
190198
breakable = false;
199+
description = "";
191200
}
192-
201+
193202
public StateWrapper(EObject value, int stateIndex, boolean breakable) {
194203
this.state = value;
195204
this.stateIndex = stateIndex;
196205
this.breakable = breakable;
206+
this.description = "";
207+
}
208+
209+
public StateWrapper(EObject value, int stateIndex, boolean breakable, String description) {
210+
this.state = value;
211+
this.stateIndex = stateIndex;
212+
this.breakable = breakable;
213+
this.description = description;
197214
}
198215
}
199216

trace/generator/plugins/fr.inria.diverse.trace.gemoc/src/fr/inria/diverse/trace/gemoc/traceaddon/AbstractTraceAddon.xtend

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@ abstract class AbstractTraceAddon extends DefaultEngineAddon implements IMultiDi
106106
traceConstructor.addStep(step)
107107
else
108108
traceConstructor.endStep(step)
109-
traceExplorer.updateCallStack(step)
110109
traceExtractor.update()
110+
traceExplorer.updateCallStack(step)
111111
])
112112

113113
if (shouldSave) {

trace/generator/plugins/fr.inria.diverse.trace.gemoc/src/fr/inria/diverse/trace/gemoc/traceaddon/GenericTraceExtractor.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,4 +120,14 @@ public Collection<List<EObject>> computeStateEquivalenceClasses() {
120120
return null;
121121
}
122122

123+
@Override
124+
public StateWrapper getStateWrapper(EObject state) {
125+
return null;
126+
}
127+
128+
@Override
129+
public int[][] alignTraces(List<? extends EObject> states1, List<? extends EObject> states2) {
130+
return null;
131+
}
132+
123133
}

trace/generator/plugins/fr.inria.diverse.trace.plugin.generator/src/fr/inria/diverse/trace/plugin/generator/TraceExtractorGeneratorJava.xtend

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,9 +294,11 @@ class TraceExtractorGeneratorJava {
294294
public Collection<List<EObject>> computeStateEquivalenceClasses(List<? extends EObject> states) {
295295
final Map<Integer, List<«stateFQN»>> statesMap = new HashMap<>();
296296
final Map<«stateFQN», List<«valueFQN»>> stateToValues = new HashMap<>();
297+
final Map<«stateFQN», Integer> stateToIndex = new HashMap<>();
297298
// First we build the map of states, grouped by their number of dimensions
298299
// and we associate to each state the list of its values
299300
states.stream().distinct().map(e -> («stateFQN») e).forEach(s -> {
301+
stateToIndex.put(s, stateToIndex.size());
300302
final List<«valueFQN»> values = getAllStateValues(s);
301303
stateToValues.put(s, values);
302304
final int size = values.size();
@@ -331,7 +333,15 @@ class TraceExtractorGeneratorJava {
331333
equivalentStates = new ArrayList<>();
332334
accumulator.put(n, equivalentStates);
333335
}
334-
equivalentStates.add(state);
336+
if (equivalentStates.isEmpty()) {
337+
equivalentStates.add(state);
338+
} else {
339+
if (stateToIndex.get(state) < stateToIndex.get(equivalentStates.get(0))) {
340+
equivalentStates.add(0, state);
341+
} else {
342+
equivalentStates.add(state);
343+
}
344+
}
335345
}
336346
});
337347
return accumulator.values();
@@ -663,7 +673,19 @@ class TraceExtractorGeneratorJava {
663673
public StateWrapper getStateWrapper(int stateIndex) {
664674
if (stateIndex > -1 && stateIndex < statesTrace.size()) {
665675
final «stateFQN» state = statesTrace.get(stateIndex);
666-
return new StateWrapper(state, stateIndex, isStateBreakable(state));
676+
return new StateWrapper(state, stateIndex, isStateBreakable(state), getStateDescription(stateIndex));
677+
}
678+
return null;
679+
}
680+
681+
@Override
682+
public StateWrapper getStateWrapper(EObject state) {
683+
if (state instanceof «stateFQN») {
684+
final int idx = statesTrace.indexOf(state);
685+
if (idx != -1) {
686+
final «stateFQN» state_cast = («stateFQN») state;
687+
return new StateWrapper(state_cast, idx, isStateBreakable(state_cast), getStateDescription(idx));
688+
}
667689
}
668690
return null;
669691
}
@@ -676,7 +698,7 @@ class TraceExtractorGeneratorJava {
676698
677699
for (int i = startStateIndex; i < endStateIndex + 1; i++) {
678700
final «stateFQN» state = statesTrace.get(i);
679-
result.add(new StateWrapper(state, i, isStateBreakable(state)));
701+
result.add(new StateWrapper(state, i, isStateBreakable(state), getStateDescription(i)));
680702
}
681703
682704
return result;
@@ -777,7 +799,7 @@ class TraceExtractorGeneratorJava {
777799
String result = "";
778800
for (int i = 0; i < valueTraces.size(); i++) {
779801
if (!isValueTraceIgnored(i)) {
780-
result += (i == 0 ? "" : "\n") + getValueDescription(i, stateIndex);
802+
result += (result.length() == 0 ? "" : "\n") + getValueDescription(i, stateIndex);
781803
}
782804
}
783805
return result;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<classpath>
3+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
4+
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
5+
<classpathentry kind="src" path="src"/>
6+
<classpathentry kind="output" path="bin"/>
7+
</classpath>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>org.gemoc.sequential_addons.diffviewer</name>
4+
<comment></comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
<buildCommand>
9+
<name>org.eclipse.jdt.core.javabuilder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
13+
<buildCommand>
14+
<name>org.eclipse.pde.ManifestBuilder</name>
15+
<arguments>
16+
</arguments>
17+
</buildCommand>
18+
<buildCommand>
19+
<name>org.eclipse.pde.SchemaBuilder</name>
20+
<arguments>
21+
</arguments>
22+
</buildCommand>
23+
</buildSpec>
24+
<natures>
25+
<nature>org.eclipse.pde.PluginNature</nature>
26+
<nature>org.eclipse.jdt.core.javanature</nature>
27+
</natures>
28+
</projectDescription>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
eclipse.preferences.version=1
2+
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3+
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
4+
org.eclipse.jdt.core.compiler.compliance=1.8
5+
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
6+
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
7+
org.eclipse.jdt.core.compiler.source=1.8
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
Manifest-Version: 1.0
2+
Bundle-ManifestVersion: 2
3+
Bundle-Name: Diffviewer
4+
Bundle-SymbolicName: org.gemoc.sequential_addons.diffviewer;singleton:=true
5+
Bundle-Version: 0.1.0.qualifier
6+
Bundle-Activator: org.gemoc.sequential_addons.diffviewer.Activator
7+
Require-Bundle: org.eclipse.ui,
8+
org.eclipse.core.runtime,
9+
fr.inria.diverse.trace.api;bundle-version="1.0.0",
10+
fr.inria.diverse.trace.gemoc.api;bundle-version="1.0.0",
11+
fr.inria.diverse.trace.gemoc;bundle-version="1.0.0",
12+
org.gemoc.executionframework.ui,
13+
org.gemoc.xdsmlframework.api;bundle-version="0.1.0",
14+
org.eclipse.emf.ecore.xmi
15+
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
16+
Bundle-ActivationPolicy: lazy

0 commit comments

Comments
 (0)