package org.eclipse.jdt.internal.debug.core.model; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IStep; import com.sun.jdi.ThreadReference; public class PatchedForCeylonJDIThread extends JDIThread { public PatchedForCeylonJDIThread(JDIDebugTarget debugTarget, ThreadReference reference) { super(debugTarget, reference); } /** * This method is synchronized, such that the step request begins before a * background evaluation can be performed. * * @see IStep#stepInto() */ public void stepInto() throws DebugException { synchronized (this) { if (!canStepInto()) { return; } } StepHandler handler = newStepIntoHandler(); handler.step(); } /** * This method is synchronized, such that the step request begins before a * background evaluation can be performed. * * @see IStep#stepOver() */ public void stepOver() throws DebugException { synchronized (this) { if (!canStepOver()) { return; } } StepHandler handler = newStepOverHandler(); handler.step(); } /** * This method is synchronized, such that the step request begins before a * background evaluation can be performed. * * @see IStep#stepReturn() */ public void stepReturn() throws DebugException { synchronized (this) { if (!canStepReturn()) { return; } } StepHandler handler = newStepReturnHandler(); handler.step(); } protected class StepOverHandler extends JDIThread.StepOverHandler {} protected class StepIntoHandler extends JDIThread.StepIntoHandler {} protected class StepReturnHandler extends JDIThread.StepReturnHandler {} protected StepIntoHandler newStepIntoHandler() { return new StepIntoHandler(); } protected StepOverHandler newStepOverHandler() { return new StepOverHandler(); } protected StepReturnHandler newStepReturnHandler() { return new StepReturnHandler(); } }