Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPawel Piech2012-11-07 14:36:40 +0000
committerGerrit Code Review @ Eclipse.org2012-11-07 14:36:40 +0000
commit79506b78e36d7223653d4bae92bdca43e66c6db3 (patch)
tree83c9429f2a1ee1156f59957feade009da8a5536c /plugins/org.eclipse.tcf.cdt.ui
parent6d990a7578522df6364d5a1e32b00e43e4cf3f76 (diff)
parentbc3ab209fecc7e718d487fb0804156dd42c070c1 (diff)
downloadorg.eclipse.tcf-79506b78e36d7223653d4bae92bdca43e66c6db3.tar.gz
org.eclipse.tcf-79506b78e36d7223653d4bae92bdca43e66c6db3.tar.xz
org.eclipse.tcf-79506b78e36d7223653d4bae92bdca43e66c6db3.zip
Merge "Bug 393615 - [breakpoints] It should not be possible to remove or modify foreign breakpoints."
Diffstat (limited to 'plugins/org.eclipse.tcf.cdt.ui')
-rw-r--r--plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/TCFBreakpointStatusListener.java33
1 files changed, 32 insertions, 1 deletions
diff --git a/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/TCFBreakpointStatusListener.java b/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/TCFBreakpointStatusListener.java
index 15ed7841b..ecdad2606 100644
--- a/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/TCFBreakpointStatusListener.java
+++ b/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/TCFBreakpointStatusListener.java
@@ -12,6 +12,7 @@ package org.eclipse.tcf.internal.cdt.ui;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -26,6 +27,7 @@ import org.eclipse.cdt.debug.internal.core.breakpoints.CFunctionBreakpoint;
import org.eclipse.cdt.debug.internal.core.breakpoints.CLineBreakpoint;
import org.eclipse.cdt.debug.internal.core.breakpoints.CWatchpoint;
import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IMarkerDelta;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.resources.WorkspaceJob;
@@ -36,6 +38,7 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.IBreakpointListener;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.tcf.internal.debug.model.ITCFBreakpointListener;
@@ -58,7 +61,7 @@ class TCFBreakpointStatusListener {
/** Ref count attribute for foreign breakpoints */
private static final String ATTR_REFCOUNT = "org.eclipse.tcf.cdt.refcount";
- private class BreakpointListener implements ITCFBreakpointListener {
+ private class BreakpointListener implements ITCFBreakpointListener, IBreakpointListener {
private final TCFBreakpointsStatus status;
private final Map<String,ICBreakpoint> installed = new HashMap<String,ICBreakpoint>();
@@ -69,6 +72,7 @@ class TCFBreakpointStatusListener {
status = launch.getBreakpointsStatus();
status.addListener(this);
bp_listeners.put(launch, this);
+ DebugPlugin.getDefault().getBreakpointManager().addBreakpointListener(this);
for (String id : status.getStatusIDs()) breakpointStatusChanged(id);
}
@@ -78,6 +82,32 @@ class TCFBreakpointStatusListener {
if (bp == null) createOrUpdateBreakpoint(id);
}
+ public void breakpointAdded(IBreakpoint breakpoint) {}
+ public void breakpointChanged(IBreakpoint breakpoint, IMarkerDelta delta) {
+ updateBreakpoint(breakpoint, false);
+ }
+ public void breakpointRemoved(final IBreakpoint breakpoint, IMarkerDelta delta) {
+ updateBreakpoint(breakpoint, true);
+ }
+
+ private void updateBreakpoint(IBreakpoint breakpoint, final boolean removed) {
+ try {
+ IMarker marker = breakpoint.getMarker();
+ if (marker == null || !marker.exists()) return;
+ if (TCFBreakpointsModel.isLocal(marker)) return;
+ final String marker_id = TCFBreakpointsModel.getBreakpointID(breakpoint);
+ Protocol.invokeLater(new Runnable() {
+ public void run() {
+ if (removed) {
+ foreign.remove(marker_id);
+ }
+ createOrUpdateBreakpoint(marker_id);
+ }
+ });
+
+ } catch (CoreException e) {}
+ }
+
private void updateStatus(String id, IBreakpoint bp) {
if (bp instanceof ICBreakpoint) {
boolean ok = false;
@@ -121,6 +151,7 @@ class TCFBreakpointStatusListener {
}
void dispose() {
+ DebugPlugin.getDefault().getBreakpointManager().removeBreakpointListener(this);
for (ICBreakpoint cbp : installed.values()) {
decrementInstallCount(cbp);
}

Back to the top