blob: e92f16e36eddab6c65fd5e6d4027e7dfb29dec1e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 Chase Technology Ltd - http://www.chasetechnology.co.uk
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Doug Satchwell (Chase Technology Ltd) - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.xsl.launching.model;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.debug.core.model.IThread;
public class XSLThread extends XSLDebugElement implements IThread
{
/**
* Breakpoints this thread is suspended at or <code>null</code> if none.
*/
private IBreakpoint[] fBreakpoints;
/**
* Whether this thread is stepping
*/
private boolean fStepping = false;
/**
* Constructs a new thread for the given target
*/
public XSLThread(IDebugTarget target)
{
super(target);
}
public IStackFrame[] getStackFrames() throws DebugException
{
if (isSuspended())
{
return ((IXSLDebugTarget) getDebugTarget()).getStackFrames();
}
else
{
return new IStackFrame[0];
}
}
public boolean hasStackFrames() throws DebugException
{
return isSuspended();
}
public int getPriority() throws DebugException
{
return 0;
}
public IStackFrame getTopStackFrame() throws DebugException
{
IStackFrame[] frames = getStackFrames();
if (frames.length > 0)
{
return frames[0];
}
return null;
}
public String getName() throws DebugException
{
return "Thread[1]"; //$NON-NLS-1$
}
public IBreakpoint[] getBreakpoints()
{
if (fBreakpoints == null)
{
return new IBreakpoint[0];
}
return fBreakpoints;
}
/**
* Sets the breakpoints this thread is suspended at, or <code>null</code>
* if none.
*
* @param breakpoints
* the breakpoints this thread is suspended at, or
* <code>null</code> if none
* @since 1.0
*/
public void setBreakpoints(IBreakpoint[] breakpoints)
{
fBreakpoints = breakpoints;
}
public boolean canResume()
{
return isSuspended();
}
public boolean canSuspend()
{
return !isSuspended();
}
public boolean isSuspended()
{
return getDebugTarget().isSuspended();
}
public void resume() throws DebugException
{
getDebugTarget().resume();
}
public void suspend() throws DebugException
{
getDebugTarget().suspend();
}
public boolean canStepInto()
{
return isSuspended();
}
public boolean canStepOver()
{
return isSuspended();
}
public boolean canStepReturn()
{
return isSuspended();
}
public boolean isStepping()
{
return fStepping;
}
public void stepInto() throws DebugException
{
((IXSLDebugTarget) getDebugTarget()).stepInto();
}
public void stepOver() throws DebugException
{
((IXSLDebugTarget) getDebugTarget()).stepOver();
}
public void stepReturn() throws DebugException
{
((IXSLDebugTarget) getDebugTarget()).stepReturn();
}
public boolean canTerminate()
{
return !isTerminated();
}
public boolean isTerminated()
{
return getDebugTarget().isTerminated();
}
public void terminate() throws DebugException
{
getDebugTarget().terminate();
}
/**
* @since 1.0
*/
public void setStepping(boolean stepping)
{
fStepping = stepping;
}
}