public String[] getStack() {
   org.eclipse.emf.ecore.EObject next = interpreterDelegate.getNextObjectToInterprete();
   java.util.List<org.eclipse.emf.ecore.EObject> parents =
       new java.util.ArrayList<org.eclipse.emf.ecore.EObject>();
   org.eclipse.emf.ecore.EObject current = next;
   while (current != null) {
     parents.add(current);
     current = current.eContainer();
   }
   String[] stack = new String[parents.size()];
   int i = parents.size();
   for (org.eclipse.emf.ecore.EObject parent : parents) {
     String serializedStackElement =
         org.feature.multi.perspective.mapping.viewmapping.resource.mtext.util.MtextStringUtil
             .encode(
                 ',',
                 new String[] {
                   parent.eClass().getName(),
                   Integer.toString(stackFrameID),
                   parent.eResource().getURI().toString(),
                   Integer.toString(getLine(parent)),
                   Integer.toString(getCharStart(parent)),
                   Integer.toString(getCharEnd(parent))
                 });
     stack[--i] = serializedStackElement;
     stackFrameMap.put(stackFrameID++, parent);
   }
   return stack;
 }
 private ResultType interprete(ContextType context) {
   startUpAndWait();
   // start interpretation when the debugger has sent the resume signal
   ResultType result = interpreterDelegate.interprete(context);
   terminate();
   return result;
 }
 public void stepReturn() {
   org.eclipse.emf.ecore.EObject current = interpreterDelegate.getNextObjectToInterprete();
   final int parentLevel =
       org.feature.multi.perspective.mapping.viewmapping.resource.mtext.util.MtextEObjectUtil
               .getDepth(current)
           - 1;
   stopCondition =
       new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextCommand<
           org.eclipse.emf.ecore.EObject>() {
         public boolean execute(org.eclipse.emf.ecore.EObject element) {
           // For step return, we stop at the next object that is at least one level higher
           int depth =
               org.feature.multi.perspective.mapping.viewmapping.resource.mtext.util
                   .MtextEObjectUtil.getDepth(element);
           return depth <= parentLevel;
         }
       };
   resume();
 }
 public void stepOver() {
   final org.eclipse.emf.ecore.EObject current = interpreterDelegate.getNextObjectToInterprete();
   final int currentLevel =
       org.feature.multi.perspective.mapping.viewmapping.resource.mtext.util.MtextEObjectUtil
           .getDepth(current);
   stopCondition =
       new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextCommand<
           org.eclipse.emf.ecore.EObject>() {
         public boolean execute(org.eclipse.emf.ecore.EObject element) {
           // For step over, we stop at the next object that is at the same level or higher
           int depth =
               org.feature.multi.perspective.mapping.viewmapping.resource.mtext.util
                   .MtextEObjectUtil.getDepth(element);
           boolean sameOrHigher = depth <= currentLevel;
           boolean differentElement = element != current;
           return sameOrHigher && differentElement;
         }
       };
   resume();
 }
 public void terminate() {
   interpreterDelegate.terminate();
   super.terminate();
 }