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;
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