1) Added handling of conditional breakpoints to the breakpointChanged method.
authorrobekras <robekras>
Sun, 11 Dec 2005 15:01:47 +0000 (15:01 +0000)
committerrobekras <robekras>
Sun, 11 Dec 2005 15:01:47 +0000 (15:01 +0000)
net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPDebugTarget.java

index 1d11803..36d415b 100644 (file)
@@ -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