import net.sourceforge.phpeclipse.PHPeclipsePlugin;
import org.eclipse.core.resources.IMarkerDelta;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
/**
* Debug target for PHP debug model.
*/
-public class PHPDebugTarget implements IPHPDebugTarget, ILaunchListener,
+public class PHPDebugTarget extends PHPDebugElement implements IPHPDebugTarget, ILaunchListener,
IDebugEventSetListener {
private IProcess process;
private final State state = new State();
public PHPDebugTarget(ILaunch launch, IProcess process) {
+ super (null);
if (null == launch && null == process)
throw new IllegalArgumentException();
this.launch = launch;
}
public void breakpointChanged(IBreakpoint breakpoint, IMarkerDelta arg1) {
- // is called e.g. after a line has been inserted before a breakpoint
- // but then the debugger is out of sync with the file anyway, so
- // debugging
- // should be stopped here.
+ // This method is called whenever a source file has changed in which
+ // case
+ // we terminate since the source will be out of sync with the debugger
+ // The method will also be called when the user enables/disables
+ // breakpoints
+ // in this case we add or remove the breakpoint
+ try {
+ // Check if breakpoint state changed from disabled to enabled
+ if (breakpoint.isEnabled()
+ && !arg1.getAttribute("org.eclipse.debug.core.enabled",
+ false)) {
+ this.getPHPDBGProxy().addBreakpoint(breakpoint);
+ // Check if breakpoint state changed from enabled to disabled
+ } else if (!breakpoint.isEnabled()
+ && arg1
+ .getAttribute("org.eclipse.debug.core.enabled",
+ true)) {
+ this.getPHPDBGProxy().removeBreakpoint(breakpoint);
+ } else {
+ // All other cases will terminate the debugger
+ terminate();
+ }
+ } catch (CoreException e) {
+ // Do nothing
+ }
}
public boolean canDisconnect() {
/**
* When a debug target or process terminates, terminate DBG Proxy.
- *
+ *
* @see IDebugEventSetListener#handleDebugEvents(DebugEvent[])
*/
public void handleDebugEvents(DebugEvent[] events) {