Skip to content

Commit 0290ac6

Browse files
committed
Fixed remaining issues due to refactoring and restored the link to the multidimensional timeline
1 parent 2231f4e commit 0290ac6

7 files changed

Lines changed: 123 additions & 54 deletions

File tree

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

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public class OmniscientGenericSequentialModelDebugger extends GenericSequentialM
2828
private var steppingOverStackFrameIndex = -1
2929

3030
private var steppingReturnStackFrameIndex = -1
31+
32+
private val List<EObject> callerStack = new ArrayList
3133

3234
new(IDSLDebugEventProcessor target, ISequentialExecutionEngine engine, ITraceExplorer addon) {
3335
super(target, engine)
@@ -45,7 +47,7 @@ public class OmniscientGenericSequentialModelDebugger extends GenericSequentialM
4547
}
4648
return mse
4749
}
48-
50+
4951
def private void pushStackFrame(String threadName, IStep step) {
5052
var EObject caller
5153
var MSE mse
@@ -70,6 +72,12 @@ public class OmniscientGenericSequentialModelDebugger extends GenericSequentialM
7072
val String callerType = caller.eClass().getName()
7173
val String prettyName = "(" + callerType + ") " +objectName + " -> " + opName +"()"
7274
pushStackFrame(threadName, prettyName, caller, caller)
75+
callerStack.add(0,caller)
76+
}
77+
78+
override void popStackFrame(String threadName) {
79+
super.popStackFrame(threadName)
80+
callerStack.remove(0)
7381
}
7482

7583
override void aboutToExecuteMSEOccurrence(IBasicExecutionEngine executionEngine, MSEOccurrence mseOccurrence) {
@@ -119,8 +127,9 @@ public class OmniscientGenericSequentialModelDebugger extends GenericSequentialM
119127
super.setupStepOverPredicateBreak
120128
}
121129
}
122-
123-
private val List<Object> callStack = new ArrayList
130+
131+
private val List<Object> previousCallStack = new ArrayList
132+
private val List<IStep> newCallStack = new ArrayList
124133

125134
override public void stepInto(String threadName) {
126135
if (traceExplorer.inReplayMode) {
@@ -236,20 +245,33 @@ public class OmniscientGenericSequentialModelDebugger extends GenericSequentialM
236245
}
237246

238247
override updateStack(String threadName, EObject instruction) {
239-
if (!traceExplorer.inReplayMode) {
240-
update
241-
}
248+
val obj_callStack = newCallStack.map[s|s.parameters.get("this")]
249+
var i = 0
250+
while (i < previousCallStack.size && i < obj_callStack.size && previousCallStack.get(i) == obj_callStack.get(i)) i++
251+
for (var j=i;j<previousCallStack.size;j++) popStackFrame(threadName)
252+
if (!callerStack.empty)
253+
setCurrentInstruction(threadName,callerStack.get(0))
254+
for (var j=i;j<newCallStack.size;j++) pushStackFrame(threadName,newCallStack.get(j))
255+
previousCallStack.clear
256+
previousCallStack.addAll(obj_callStack)
242257
}
243258

244259
override update() {
245-
val path = traceExplorer.callStack
246-
val obj_path = path.map[s|s.parameters.get("this")]
247-
var i = 0
248-
while (i < obj_path.size && i < callStack.size && obj_path.get(i) == callStack.get(i)) i++
249-
for (var j=i;j<callStack.size;j++) popStackFrame(threadName)
250-
for (var j=i;j<path.size;j++) pushStackFrame(threadName,path.get(j))
251-
callStack.clear
252-
callStack.addAll(obj_path)
260+
newCallStack.clear
261+
newCallStack.addAll(traceExplorer.callStack)
262+
try {
263+
val obj_callStack = newCallStack.map[s|s.parameters.get("this")]
264+
var i = 0
265+
while (i < previousCallStack.size && i < obj_callStack.size && previousCallStack.get(i) == obj_callStack.get(i)) i++
266+
for (var j=i;j<previousCallStack.size;j++) popStackFrame(threadName)
267+
if (!callerStack.empty)
268+
setCurrentInstruction(threadName,callerStack.get(0))
269+
for (var j=i;j<newCallStack.size;j++) pushStackFrame(threadName,newCallStack.get(j))
270+
previousCallStack.clear
271+
previousCallStack.addAll(obj_callStack)
272+
scheduleSelectLastStackframe(500)
273+
} catch (IllegalStateException e) {
274+
//Shhh
275+
}
253276
}
254-
255277
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,6 @@ public interface IMultiDimensionalTraceAddon extends IEngineAddon {
2020

2121
IStepFactory getFactory();
2222

23+
void goTo(int stateIndex);
24+
2325
}

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,14 @@
1818
import fr.inria.diverse.trace.api.IStep;
1919
import fr.inria.diverse.trace.api.ITraceManager;
2020

21-
public interface ITraceExplorer {
21+
public interface ITraceExplorer extends ITraceNotifier, ITraceListener {
2222

2323
List<StateWrapper> getStatesOrValues(int line, int startStateIndex, int endStateIndex);
2424

2525
List<IStep> getStepsForStates(int startingState, int endingState);
2626

2727
void setTraceManager(ITraceManager traceManager);
2828

29-
void notifyListeners();
30-
31-
void addListener(ITraceListener listener);
32-
33-
void removeListener(ITraceListener listener);
34-
3529
int getNumberOfTraces();
3630

3731
int getTraceLength(int traceIndex);
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package fr.inria.diverse.trace.gemoc.api;
2+
3+
public interface ITraceNotifier {
4+
5+
void notifyListeners();
6+
7+
void addListener(ITraceListener listener);
8+
9+
void removeListener(ITraceListener listener);
10+
11+
}

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import org.gemoc.xdsmlframework.api.extensions.engine_addon.EngineAddonSpecifica
2929
abstract class AbstractTraceAddon extends DefaultEngineAddon implements IMultiDimensionalTraceAddon {
3030

3131
private IExecutionContext _executionContext;
32-
private val ITraceExplorer traceExplorer = new DefaultTraceExplorer
32+
private val ITraceExplorer traceExplorer = new DefaultTraceExplorer(this)
3333
private IGemocTraceManager traceManager
3434
private boolean shouldSave = true
3535

@@ -146,8 +146,7 @@ abstract class AbstractTraceAddon extends DefaultEngineAddon implements IMultiDi
146146
traceManager.addStep(eventName, params)
147147
traceExplorer.updateCallStack(mseOccurrence)
148148
])
149-
150-
// traceExplorer.notifyListeners()
149+
151150
if (shouldSave)
152151
traceManager.save()
153152
}
@@ -174,8 +173,6 @@ abstract class AbstractTraceAddon extends DefaultEngineAddon implements IMultiDi
174173
modifyTrace([traceManager.endStep(eventName, null)])
175174

176175
}
177-
178-
// traceExplorer.notifyListeners()
179176
}
180177

181178
/**
@@ -185,6 +182,14 @@ abstract class AbstractTraceAddon extends DefaultEngineAddon implements IMultiDi
185182
setUp(engine)
186183
}
187184

185+
override goTo(int stateIndex) {
186+
if (_executionContext != null) {
187+
modifyTrace([traceManager.goTo(stateIndex)])
188+
} else {
189+
traceManager.goTo(stateIndex)
190+
}
191+
}
192+
188193
/**
189194
* Wrapper using lambda to always use a RecordingCommand when modifying the trace
190195
*/

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

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package fr.inria.diverse.trace.gemoc.traceaddon
33
import fr.inria.diverse.trace.api.IStep
44
import fr.inria.diverse.trace.api.ITraceManager
55
import fr.inria.diverse.trace.api.IValueTrace
6+
import fr.inria.diverse.trace.gemoc.api.IMultiDimensionalTraceAddon
67
import fr.inria.diverse.trace.gemoc.api.ITraceExplorer
78
import fr.inria.diverse.trace.gemoc.api.ITraceListener
89
import java.util.ArrayList
@@ -14,12 +15,16 @@ import org.gemoc.executionframework.engine.mse.MSEOccurrence
1415

1516
class DefaultTraceExplorer implements ITraceExplorer {
1617

17-
private val nameprovider = new DefaultDeclarativeQualifiedNameProvider();
18-
private var ITraceManager traceManager;
19-
private var boolean inThePast;
20-
private var int lastJumpIndex;
18+
private val nameprovider = new DefaultDeclarativeQualifiedNameProvider()
19+
private var ITraceManager traceManager
20+
private val IMultiDimensionalTraceAddon traceAddon
21+
private var int lastJumpIndex = -1
2122
private val List<IStep> callStack = new ArrayList
2223

24+
new (IMultiDimensionalTraceAddon addon) {
25+
this.traceAddon = addon
26+
}
27+
2328
private val List<ITraceListener> listeners = new ArrayList
2429

2530
override addListener(ITraceListener listener) {
@@ -183,7 +188,7 @@ class DefaultTraceExplorer implements ITraceExplorer {
183188
}
184189

185190
override isInReplayMode() {
186-
return inThePast
191+
return stepIntoResult != null
187192
}
188193

189194
override jump(EObject o) {
@@ -301,7 +306,7 @@ class DefaultTraceExplorer implements ITraceExplorer {
301306
jumpBeforeStep(lastStep)
302307
}
303308

304-
def computeBackInto(List<IStep> stepPath, List<IStep> rootSteps) {
309+
def private computeBackInto(List<IStep> stepPath, List<IStep> rootSteps) {
305310
var IStep result = null
306311
if (stepPath.size > 1) {
307312
val reversedPath = stepPath.reverseView
@@ -340,23 +345,23 @@ class DefaultTraceExplorer implements ITraceExplorer {
340345
return result
341346
}
342347

343-
def computeBackOver(List<IStep> stepPath, List<IStep> rootSteps) {
348+
def private computeBackOver(List<IStep> stepPath, List<IStep> rootSteps) {
344349
if (!stepPath.empty) {
345350
val reversedPath = stepPath.reverseView
346351
return findPreviousStep(reversedPath,rootSteps,reversedPath.get(0),1)
347352
}
348353
return null
349354
}
350355

351-
def computeBackOut(List<IStep> stepPath, List<IStep> rootSteps) {
356+
def private computeBackOut(List<IStep> stepPath, List<IStep> rootSteps) {
352357
if (stepPath.size > 1) {
353358
val reversedPath = stepPath.reverseView
354359
return findPreviousStep(reversedPath,rootSteps,reversedPath.get(1),2)
355360
}
356361
return null
357362
}
358363

359-
def findPreviousStep(List<IStep> stepPath, List<IStep> rootSteps, IStep previousStep, int start) {
364+
def private findPreviousStep(List<IStep> stepPath, List<IStep> rootSteps, IStep previousStep, int start) {
360365
var IStep result = null
361366
var i = start
362367
var previous = previousStep
@@ -380,7 +385,7 @@ class DefaultTraceExplorer implements ITraceExplorer {
380385
return result
381386
}
382387

383-
def findNextStep(List<IStep> stepPath, List<IStep> rootSteps, IStep previousStep, int start) {
388+
def private findNextStep(List<IStep> stepPath, List<IStep> rootSteps, IStep previousStep, int start) {
384389
var IStep result = null
385390
var i = start
386391
var previous = previousStep
@@ -415,19 +420,19 @@ class DefaultTraceExplorer implements ITraceExplorer {
415420
return result
416421
}
417422

418-
def computeStepInto(List<IStep> stepPath, List<IStep> rootSteps) {
423+
def private computeStepInto(List<IStep> stepPath, List<IStep> rootSteps) {
419424
return findNextStep(stepPath.reverseView,rootSteps,null,0)
420425
}
421426

422-
def computeStepOver(List<IStep> stepPath, List<IStep> rootSteps) {
427+
def private computeStepOver(List<IStep> stepPath, List<IStep> rootSteps) {
423428
if (!stepPath.empty) {
424429
val reversedPath = stepPath.reverseView
425430
return findNextStep(reversedPath,rootSteps,reversedPath.get(0),1)
426431
}
427432
return null
428433
}
429434

430-
def computeStepReturn(List<IStep> stepPath, List<IStep> rootSteps) {
435+
def private computeStepReturn(List<IStep> stepPath, List<IStep> rootSteps) {
431436
if (stepPath.size > 1) {
432437
val reversedPath = stepPath.reverseView
433438
return findNextStep(reversedPath,rootSteps,reversedPath.get(1),2)
@@ -450,7 +455,6 @@ class DefaultTraceExplorer implements ITraceExplorer {
450455
override public boolean stepBackInto() {
451456
if (backIntoResult != null) {
452457
jumpBeforeStep(backIntoResult)
453-
inThePast = true
454458
return true
455459
}
456460
return false
@@ -459,7 +463,6 @@ class DefaultTraceExplorer implements ITraceExplorer {
459463
override public boolean stepBackOver() {
460464
if (backOverResult != null) {
461465
jumpBeforeStep(backOverResult)
462-
inThePast = true
463466
return true
464467
}
465468
return false
@@ -468,7 +471,6 @@ class DefaultTraceExplorer implements ITraceExplorer {
468471
override public boolean stepBackOut() {
469472
if (backOutResult != null) {
470473
jumpBeforeStep(backOutResult)
471-
inThePast = true
472474
return true
473475
}
474476
return false
@@ -477,7 +479,6 @@ class DefaultTraceExplorer implements ITraceExplorer {
477479
override public boolean stepInto() {
478480
if (stepIntoResult != null) {
479481
jumpBeforeStep(stepIntoResult)
480-
inThePast = stepIntoResult == null
481482
return true
482483
}
483484
return false
@@ -486,7 +487,6 @@ class DefaultTraceExplorer implements ITraceExplorer {
486487
override public boolean stepOver() {
487488
if (stepOverResult != null) {
488489
jumpBeforeStep(stepOverResult)
489-
inThePast = stepIntoResult == null
490490
return true
491491
}
492492
return false
@@ -495,7 +495,6 @@ class DefaultTraceExplorer implements ITraceExplorer {
495495
override public boolean stepReturn() {
496496
if (stepReturnResult != null) {
497497
jumpBeforeStep(stepReturnResult)
498-
inThePast = stepIntoResult == null
499498
return true
500499
}
501500
return false
@@ -510,7 +509,7 @@ class DefaultTraceExplorer implements ITraceExplorer {
510509
} else {
511510
lastJumpIndex = i
512511
}
513-
traceManager.goTo(i)
512+
traceAddon.goTo(i)
514513
//Computing the new callstack
515514
val newPath = new ArrayList
516515
newPath.add(step.parameters.get("this"))
@@ -520,7 +519,6 @@ class DefaultTraceExplorer implements ITraceExplorer {
520519
parent = parent.parentStep
521520
}
522521
doStuff(newPath)
523-
inThePast = stepIntoResult == null
524522
}
525523
}
526524

@@ -536,9 +534,10 @@ class DefaultTraceExplorer implements ITraceExplorer {
536534
}
537535

538536
override public canBackValue(int traceIndex) {
537+
val index = traceIndex - 1
539538
val allValueTraces = traceManager.allValueTraces
540-
if (traceIndex < allValueTraces.size && traceIndex > -1) {
541-
val valueTrace = allValueTraces.get(traceIndex)
539+
if (index < allValueTraces.size && index > -1) {
540+
val valueTrace = allValueTraces.get(index)
542541
val currentValueIndex = valueTrace.getActiveValueIndex(currentStateIndex)
543542
var stateIndex = currentStateIndex
544543
var valueIndex = valueTrace.getActiveValueIndex(stateIndex)
@@ -552,7 +551,7 @@ class DefaultTraceExplorer implements ITraceExplorer {
552551
}
553552

554553
override public backValue(int traceIndex) {
555-
val valueTrace = traceManager.allValueTraces.get(traceIndex)
554+
val valueTrace = traceManager.allValueTraces.get(traceIndex-1)
556555
jump(valueTrace.getValue(getPreviousValueIndex(valueTrace)))
557556
}
558557

@@ -575,7 +574,7 @@ class DefaultTraceExplorer implements ITraceExplorer {
575574
}
576575

577576
override public stepValue(int traceIndex) {
578-
val valueTrace = traceManager.allValueTraces.get(traceIndex)
577+
val valueTrace = traceManager.allValueTraces.get(traceIndex-1)
579578
val i = getNextValueIndex(valueTrace)
580579
if (i < valueTrace.size && i != -1) {
581580
jump(valueTrace.getValue(i))
@@ -603,4 +602,8 @@ class DefaultTraceExplorer implements ITraceExplorer {
603602
doStuff(newPath)
604603
}
605604

605+
override update() {
606+
notifyListeners
607+
}
608+
606609
}

0 commit comments

Comments
 (0)