6e5c4d91ca423af9ef2e10a06cff4ab465a5a8f3
[phpeclipse.git] / net.sourceforge.phpeclipse.xdebug.core / src / net / sourceforge / phpeclipse / xdebug / core / XDebugThread.java
1 /*
2  * Created on 23.11.2004
3  *
4  * TODO To change the template for this generated file go to
5  * Window - Preferences - Java - Code Style - Code Templates
6  */
7 package net.sourceforge.phpeclipse.xdebug.core;
8
9 import org.eclipse.debug.core.DebugException;
10 import org.eclipse.debug.core.model.IBreakpoint;
11 import org.eclipse.debug.core.model.IStackFrame;
12 import org.eclipse.debug.core.model.IThread;
13
14 /**
15  * @author Axel
16  *
17  * TODO To change the template for this generated type comment go to
18  * Window - Preferences - Java - Code Style - Code Templates
19  */
20 public class XDebugThread extends XDebugElement implements IThread {
21         
22         /**
23          * Breakpoints this thread is suspended at or <code>null</code>
24          * if none.
25          */
26         private IBreakpoint[] fBreakpoints;
27         
28         /**
29          * Whether this thread is stepping
30          */
31         private boolean fStepping = false;
32         
33         /**
34          * Constructs a new thread for the given target
35          * 
36          * @param target VM
37          */
38         public XDebugThread(XDebugTarget target) {
39                 super(target);
40         }
41         
42         /* (non-Javadoc)
43          * @see org.eclipse.debug.core.model.IThread#getStackFrames()
44          */
45         public IStackFrame[] getStackFrames() throws DebugException {
46                 if (isSuspended()) {
47                         return ((XDebugTarget)getDebugTarget()).getStackFrames();
48                 } else {
49                         return new IStackFrame[0];
50                 }
51         }
52         /* (non-Javadoc)
53          * @see org.eclipse.debug.core.model.IThread#hasStackFrames()
54          */
55         public boolean hasStackFrames() throws DebugException {
56                 return isSuspended();
57         }
58         /* (non-Javadoc)
59          * @see org.eclipse.debug.core.model.IThread#getPriority()
60          */
61         public int getPriority() throws DebugException {
62                 return 0;
63         }
64         /* (non-Javadoc)
65          * @see org.eclipse.debug.core.model.IThread#getTopStackFrame()
66          */
67         public IStackFrame getTopStackFrame() throws DebugException {
68                 IStackFrame[] frames = getStackFrames();
69                 if (frames.length > 0) {
70                         return frames[0];
71                 }
72                 return null;
73         }
74         /* (non-Javadoc)
75          * @see org.eclipse.debug.core.model.IThread#getName()
76          */
77         public String getName() throws DebugException {
78                 return "Thread[1]";
79         }
80         /* (non-Javadoc)
81          * @see org.eclipse.debug.core.model.IThread#getBreakpoints()
82          */
83         public IBreakpoint[] getBreakpoints() {
84                 if (fBreakpoints == null) {
85                         return new IBreakpoint[0];
86                 }
87                 return fBreakpoints;
88         }
89         /**
90          * Sets the breakpoints this thread is suspended at, or <code>null</code>
91          * if none.
92          * 
93          * @param breakpoints the breakpoints this thread is suspended at, or <code>null</code>
94          * if none
95          */
96         protected void setBreakpoints(IBreakpoint[] breakpoints) {
97                 fBreakpoints = breakpoints;
98         }
99         /* (non-Javadoc)
100          * @see org.eclipse.debug.core.model.ISuspendResume#canResume()
101          */
102         public boolean canResume() {
103                 return isSuspended();
104         }
105         /* (non-Javadoc)
106          * @see org.eclipse.debug.core.model.ISuspendResume#canSuspend()
107          */
108         public boolean canSuspend() {
109                 return !isSuspended();
110         }
111         /* (non-Javadoc)
112          * @see org.eclipse.debug.core.model.ISuspendResume#isSuspended()
113          */
114         public boolean isSuspended() {
115                 return getDebugTarget().isSuspended();
116         }
117         /* (non-Javadoc)
118          * @see org.eclipse.debug.core.model.ISuspendResume#resume()
119          */
120         public void resume() throws DebugException {
121                 getDebugTarget().resume();
122         }
123         /* (non-Javadoc)
124          * @see org.eclipse.debug.core.model.ISuspendResume#suspend()
125          */
126         public void suspend() throws DebugException {
127                 getDebugTarget().suspend();
128         }
129         /* (non-Javadoc)
130          * @see org.eclipse.debug.core.model.IStep#canStepInto()
131          */
132         public boolean canStepInto() {
133                 return false;
134         }
135         /* (non-Javadoc)
136          * @see org.eclipse.debug.core.model.IStep#canStepOver()
137          */
138         public boolean canStepOver() {
139                 return isSuspended();
140         }
141         /* (non-Javadoc)
142          * @see org.eclipse.debug.core.model.IStep#canStepReturn()
143          */
144         public boolean canStepReturn() {
145                 return false;
146         }
147         /* (non-Javadoc)
148          * @see org.eclipse.debug.core.model.IStep#isStepping()
149          */
150         public boolean isStepping() {
151                 return fStepping;
152         }
153         /* (non-Javadoc)
154          * @see org.eclipse.debug.core.model.IStep#stepInto()
155          */
156         public void stepInto() throws DebugException {
157         }
158         /* (non-Javadoc)
159          * @see org.eclipse.debug.core.model.IStep#stepOver()
160          */
161         public void stepOver() throws DebugException {
162                 ((XDebugTarget)getDebugTarget()).step();
163         }
164         /* (non-Javadoc)
165          * @see org.eclipse.debug.core.model.IStep#stepReturn()
166          */
167         public void stepReturn() throws DebugException {
168         }
169         /* (non-Javadoc)
170          * @see org.eclipse.debug.core.model.ITerminate#canTerminate()
171          */
172         public boolean canTerminate() {
173                 return !isTerminated();
174         }
175         /* (non-Javadoc)
176          * @see org.eclipse.debug.core.model.ITerminate#isTerminated()
177          */
178         public boolean isTerminated() {
179                 return getDebugTarget().isTerminated();
180         }
181         /* (non-Javadoc)
182          * @see org.eclipse.debug.core.model.ITerminate#terminate()
183          */
184         public void terminate() throws DebugException {
185                 getDebugTarget().terminate();
186         }
187         
188         /**
189          * Sets whether this thread is stepping
190          * 
191          * @param stepping whether stepping
192          */
193         protected void setStepping(boolean stepping) {
194                 fStepping = stepping;
195         }
196 }