/**
* <copyright>
* </copyright>
*
*
*/
package org.feature.multi.perspective.mapping.viewmapping.resource.mtext.debug;
public class MtextDebugThread extends org.feature.multi.perspective.mapping.viewmapping.resource.mtext.debug.MtextDebugElement implements org.eclipse.debug.core.model.IThread, org.feature.multi.perspective.mapping.viewmapping.resource.mtext.debug.IMtextDebugEventListener {
private boolean suspended = false;
private org.feature.multi.perspective.mapping.viewmapping.resource.mtext.debug.MtextDebugTarget debugTarget;
public MtextDebugThread(org.feature.multi.perspective.mapping.viewmapping.resource.mtext.debug.MtextDebugTarget target) {
super(target);
this.debugTarget = target;
}
public org.eclipse.debug.core.model.IBreakpoint[] getBreakpoints() {
return null;
}
public String getName() throws org.eclipse.debug.core.DebugException {
return "Thread [main]";
}
public int getPriority() throws org.eclipse.debug.core.DebugException {
return 0;
}
public org.eclipse.debug.core.model.IStackFrame[] getStackFrames() throws org.eclipse.debug.core.DebugException {
if (isSuspended()) {
org.feature.multi.perspective.mapping.viewmapping.resource.mtext.debug.MtextDebugMessage stack = this.debugTarget.getDebugProxy().getStack();
String framesData = stack.getArgument(0);
if (framesData != null && !"".equals(framesData)) {
java.util.List<String> frames = org.feature.multi.perspective.mapping.viewmapping.resource.mtext.util.MtextStringUtil.decode(framesData, '#');
org.eclipse.debug.core.model.IStackFrame[] theFrames = new org.eclipse.debug.core.model.IStackFrame[frames.size()];
for (int i = 0; i < frames.size(); i++) {
String data = frames.get(i);
theFrames[frames.size() - i - 1] = new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.debug.MtextStackFrame(getTarget(), data);
}
return theFrames;
}
}
return new org.eclipse.debug.core.model.IStackFrame[0];
}
public org.eclipse.debug.core.model.IStackFrame getTopStackFrame() throws org.eclipse.debug.core.DebugException {
org.eclipse.debug.core.model.IStackFrame[] frames = getStackFrames();
if (frames.length > 0) {
return frames[0];
}
return null;
}
public boolean hasStackFrames() throws org.eclipse.debug.core.DebugException {
return isSuspended();
}
public boolean canResume() {
return isSuspended();
}
public boolean canSuspend() {
return !isSuspended();
}
public boolean isSuspended() {
return suspended && !isTerminated();
}
public void resume() throws org.eclipse.debug.core.DebugException {
debugTarget.getDebugProxy().resume();
suspended = false;
}
public void suspend() throws org.eclipse.debug.core.DebugException {
suspended = true;
fireSuspendEvent(org.eclipse.debug.core.DebugEvent.BREAKPOINT);
}
public boolean canStepInto() {
return true;
}
public boolean canStepOver() {
return true;
}
public boolean canStepReturn() {
return true;
}
public boolean isStepping() {
return false;
}
public void stepInto() throws org.eclipse.debug.core.DebugException {
getTarget().getDebugProxy().stepInto();
}
public void stepOver() throws org.eclipse.debug.core.DebugException {
getTarget().getDebugProxy().stepOver();
}
public void stepReturn() throws org.eclipse.debug.core.DebugException {
getTarget().getDebugProxy().stepReturn();
}
public boolean canTerminate() {
return !isTerminated();
}
public boolean isTerminated() {
return getDebugTarget().isTerminated();
}
public void terminate() throws org.eclipse.debug.core.DebugException {
getTarget().getDebugProxy().terminate();
}
public void handleMessage(org.feature.multi.perspective.mapping.viewmapping.resource.mtext.debug.MtextDebugMessage message) {
if (message.hasType(org.feature.multi.perspective.mapping.viewmapping.resource.mtext.debug.EMtextDebugMessageTypes.STARTED)) {
fireCreationEvent();
} else if (message.hasType(org.feature.multi.perspective.mapping.viewmapping.resource.mtext.debug.EMtextDebugMessageTypes.RESUMED)) {
suspended = false;
fireResumeEvent(0);
} else if (message.hasType(org.feature.multi.perspective.mapping.viewmapping.resource.mtext.debug.EMtextDebugMessageTypes.SUSPENDED)) {
suspended = true;
fireSuspendEvent(org.eclipse.debug.core.DebugEvent.BREAKPOINT);
} else if (message.hasType(org.feature.multi.perspective.mapping.viewmapping.resource.mtext.debug.EMtextDebugMessageTypes.TERMINATED)) {
// ignore this event
} else {
System.out.println("ERROR " + this.getClass().getName() + ".handleMessage(" + message + ") unknown event");
}
}
public org.feature.multi.perspective.mapping.viewmapping.resource.mtext.debug.MtextDebugTarget getTarget() {
return debugTarget;
}
}