From: robekras Date: Sun, 11 Dec 2005 15:01:47 +0000 (+0000) Subject: 1) Added handling of conditional breakpoints to the breakpointChanged method. X-Git-Url: http://git.phpeclipse.com 1) Added handling of conditional breakpoints to the breakpointChanged method. --- diff --git a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPDebugTarget.java b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPDebugTarget.java index 1d11803..36d415b 100644 --- a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPDebugTarget.java +++ b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPDebugTarget.java @@ -13,6 +13,7 @@ package net.sourceforge.phpdt.internal.debug.core.model; import net.sourceforge.phpdt.internal.debug.core.PHPDBGProxy; import net.sourceforge.phpdt.internal.debug.core.PHPDebugCorePlugin; +import net.sourceforge.phpdt.internal.debug.core.breakpoints.PHPLineBreakpoint; import net.sourceforge.phpeclipse.PHPeclipsePlugin; import org.eclipse.core.resources.IMarkerDelta; @@ -224,28 +225,41 @@ public class PHPDebugTarget extends PHPDebugElement implements IPHPDebugTarget, this.getPHPDBGProxy().removeBreakpoint(breakpoint); } - public void breakpointChanged(IBreakpoint breakpoint, IMarkerDelta arg1) { - // 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 + /** + * The method will be called when the user enables/disables + * breakpoints. In this case we add or remove the breakpoint. + * It's also called when leaving the breakpoint properties dialog + * (skip count and breakpoint condition) with the OK button. + * + * This method is also called whenever a source file has changed. + * In this case we terminate since the source will be out of sync with the debugger. + * TODO Is it correct to call this method when a sourcefile is modified? + * + */ + public void breakpointChanged (IBreakpoint breakpoint, IMarkerDelta arg1) { + PHPLineBreakpoint bp; + bp = (PHPLineBreakpoint) breakpoint; + try { - // Check if breakpoint state changed from disabled to enabled - if (breakpoint.isEnabled() - && !arg1.getAttribute("org.eclipse.debug.core.enabled", - false)) { + if (breakpoint.isEnabled () && // Check if breakpoint state changed from disabled to enabled + !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)) { + } + else if (!breakpoint.isEnabled () && // Check if breakpoint state changed from enabled to disabled + arg1.getAttribute ("org.eclipse.debug.core.enabled", true)) { this.getPHPDBGProxy().removeBreakpoint(breakpoint); - } else { - // All other cases will terminate the debugger - terminate(); + } + else if (bp.getChangeID() != arg1.getAttribute ("net.sourceforge.phpeclipse.debug.changeID", 0)) { + if (breakpoint.isEnabled()) { // If the breakpoint is already enabled + this.getPHPDBGProxy().removeBreakpoint(breakpoint); // we remove this breakpoint first + this.getPHPDBGProxy().addBreakpoint(breakpoint); // and then we add again (else DBG would have two breakpoints!). + } + else { + this.getPHPDBGProxy().removeBreakpoint(breakpoint); + } + } + else { // All other cases will terminate the debugger + terminate (); } } catch (CoreException e) { // Do nothing