diff --git a/debug/org.eclipse.cdt.debug.core/.settings/.api_filters b/debug/org.eclipse.cdt.debug.core/.settings/.api_filters
index 50097440abc..136cb894639 100644
--- a/debug/org.eclipse.cdt.debug.core/.settings/.api_filters
+++ b/debug/org.eclipse.cdt.debug.core/.settings/.api_filters
@@ -1,49 +1,56 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugUtils.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugUtils.java
index ec7de3bb4ec..e51cb1b918c 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugUtils.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugUtils.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2010 QNX Software Systems and others.
+ * Copyright (c) 2000, 2011 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
* Contributors:
* QNX Software Systems - Initial API and implementation
* Freescale Semiconductor - Address watchpoints, https://bugs.eclipse.org/bugs/show_bug.cgi?id=118299
+ * Patrick Chuong (Texas Instruments) - Update CDT ToggleBreakpointTargetFactory enablement (340177)
*******************************************************************************/
package org.eclipse.cdt.debug.core;
@@ -43,16 +44,19 @@ import org.eclipse.cdt.debug.internal.core.model.CFloatingPointValue;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.IStatusHandler;
import org.eclipse.debug.core.model.IBreakpoint;
+import org.osgi.service.prefs.BackingStoreException;
import org.w3c.dom.Document;
import com.ibm.icu.text.MessageFormat;
@@ -696,4 +700,60 @@ public class CDebugUtils {
}
return defaultValue;
}
-}
+
+ /**
+ * Overrides the standard project ICBreakpoint toggle breakpoint factory with
+ * a custom toggle breakpoint factory. The ICBreakpoint toggle breakpoint factory
+ * will be disabled and it is up to the client to contribute it's own toggle
+ * breakpoint factory.
+ *
+ * @param project a project
+ * @param factoryId a breakpoint toggle factory identifier
+ * @since 7.1
+ */
+ public static void setToggleBreakpointFactory(IProject project, String factoryId) {
+ try {
+ IEclipsePreferences pref = new ProjectScope(project).getNode(CDebugCorePlugin.PLUGIN_ID);
+ pref.put(ICDebugConstants.PREF_TOGGLE_BREAKPOINT_MODEL_IDENTIFIER, factoryId);
+ pref.flush();
+ } catch (BackingStoreException e) {
+ CDebugCorePlugin.log(e);
+ }
+ }
+
+ /**
+ * Returns the toggle breakpoint factory identifier for the project
+ *
+ * @param project the project
+ * @return the toggle breakpoint factory identifier, can be {@code null}
+ * @since 7.1
+ */
+ public static String getToggleBreakpointFactory(IProject project) {
+ IEclipsePreferences pref = new ProjectScope(project.getProject()).getNode(CDebugCorePlugin.PLUGIN_ID);
+ return pref.get(ICDebugConstants.PREF_TOGGLE_BREAKPOINT_MODEL_IDENTIFIER, null);
+ }
+
+ /**
+ * Returns whether the project uses the standard ICBreakpoint toggle breakpoint factory.
+ *
+ * @param project the project
+ * @return {@code true} if the project uses the standard ICBreakpoint breakpoint toggle factory
+ * @since 7.1
+ */
+ public static boolean isStandardCBreakpointFactory(IProject project) {
+ return getToggleBreakpointFactory(project) == null;
+ }
+
+ /**
+ * Returns whether the custom toggle breakpoint factory should be consider when evaluating the
+ * enablement of the standard ICBreakpoint toggle breakpoint factory.
+ *
+ * @return true if the custom model breakpoint system property is set
+ * @since 7.1
+ * @see ICDebugConstants#PREF_TOGGLE_BREAKPOINT_MODEL_IDENTIFIER
+ */
+ public static boolean isCustomToggleBreakpointFactory() {
+ String customModel = System.getProperty(ICDebugConstants.PREF_TOGGLE_BREAKPOINT_MODEL_IDENTIFIER, null);
+ return customModel != null && Boolean.valueOf(customModel);
+ }
+}
\ No newline at end of file
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICDebugConstants.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICDebugConstants.java
index 2896181833f..c56fd788c15 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICDebugConstants.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICDebugConstants.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2010 QNX Software Systems and others.
+ * Copyright (c) 2000, 2011 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -8,11 +8,14 @@
* Contributors:
* QNX Software Systems - Initial API and implementation
* Ken Ryall (Nokia) - 207675
+ * Patrick Chuong (Texas Instruments) - Update CDT ToggleBreakpointTargetFactory enablement (340177)
*******************************************************************************/
package org.eclipse.cdt.debug.core;
/**
* Constant definitions for C/C++ debug plug-in.
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
*/
public interface ICDebugConstants {
@@ -114,4 +117,14 @@ public interface ICDebugConstants {
public static final String PREF_VALUE_STEP_MODE_CONTEXT = "context"; //$NON-NLS-1$
public static final String PREF_VALUE_STEP_MODE_SOURCE = "source"; //$NON-NLS-1$
public static final String PREF_VALUE_STEP_MODE_INSTRUCTION = "instruction"; //$NON-NLS-1$
+
+ /**
+ * Preference key for toggle breakpoint model identifier. Debugger that contribute custom
+ * CBreakpoint should set the system property with this key to true. when this system property
+ * is set to true, the standard ICBreakpoint toggle breakpoint factory enablement will take
+ * into account for non-standard ICElement input.
+ *
+ * @since 7.1
+ */
+ public static final String PREF_TOGGLE_BREAKPOINT_MODEL_IDENTIFIER = PLUGIN_ID + ".toggleBreakpointModel"; //$NON-NLS-1$
}
diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml
index 94262f51938..7bb1df689ba 100644
--- a/debug/org.eclipse.cdt.debug.ui/plugin.xml
+++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml
@@ -1754,6 +1754,23 @@
+
+
+
+
+
+
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
@@ -1788,19 +1801,12 @@
definitionId="org.eclipse.cdt.debug.ui.testIsTracepointActionSetActive">
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ToggleCBreakpointTester.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ToggleCBreakpointTester.java
new file mode 100644
index 00000000000..4a494ad263c
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ToggleCBreakpointTester.java
@@ -0,0 +1,126 @@
+/*****************************************************************
+ * Copyright (c) 2011 Texas Instruments and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Patrick Chuong (Texas Instruments) -
+ * Update CDT ToggleBreakpointTargetFactory enablement (340177)
+ *****************************************************************/
+package org.eclipse.cdt.debug.internal.ui;
+
+import java.util.List;
+
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.IDeclaration;
+import org.eclipse.cdt.core.model.IFunctionDeclaration;
+import org.eclipse.cdt.core.model.IMethodDeclaration;
+import org.eclipse.cdt.core.model.IVariableDeclaration;
+import org.eclipse.cdt.debug.core.CDebugUtils;
+import org.eclipse.cdt.internal.ui.editor.CEditor;
+import org.eclipse.cdt.internal.ui.editor.asm.AsmTextEditor;
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.core.resources.IResource;
+
+/**
+ * Toggle breakpoint factor enablement tester for editors and IDeclaration.
+ *
+ * @since 7.1
+ */
+public class ToggleCBreakpointTester extends PropertyTester {
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
+ */
+ public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+ // test for CEditor
+ if ("isCEditorSupportsCBreakpoint".equals(property) && (receiver instanceof CEditor)) { //$NON-NLS-1$
+ if (!CDebugUtils.isCustomToggleBreakpointFactory())
+ return true;
+
+ CEditor editor = (CEditor) receiver;
+ ICElement cElement = editor.getInputCElement();
+ if (cElement != null) {
+ ICProject cproject = cElement.getCProject();
+ if (cproject != null) {
+ // Handles the case for external file, check to see whether the file exist.
+ // This is to workaround the EditorUtility wrongly assign the project for
+ // external file.
+ IResource resource = cElement.getResource();
+ if (resource == null || !resource.exists())
+ return true;
+
+ if (CDebugUtils.isStandardCBreakpointFactory(cproject.getProject()))
+ return true;
+
+ } else {
+ return true; // can't figure the associated project, enable it by default.
+ }
+ }
+
+ // test for AsmEditor
+ } else if ("isAsmEditorSupportsCBreakpoint".equals(property) && (receiver instanceof AsmTextEditor)) { //$NON-NLS-1$
+ if (!CDebugUtils.isCustomToggleBreakpointFactory())
+ return true;
+
+ AsmTextEditor editor = (AsmTextEditor) receiver;
+ ICElement cElement = editor.getInputCElement();
+ if (cElement != null) {
+ // Handles the case for external file, check to see whether the file exist.
+ // This is to workaround the EditorUtility wrongly assign the project for
+ // external file.
+ IResource resource = cElement.getResource();
+ if (resource == null || !resource.exists())
+ return true;
+
+ ICProject cproject = cElement.getCProject();
+ if (cproject != null) {
+ if (CDebugUtils.isStandardCBreakpointFactory(cproject.getProject()))
+ return true;
+
+ } else {
+ return true; // can't figure the associated project, enable it by default.
+ }
+ }
+
+ // test for IVariableDeclaration, IFunctionDeclaration, IMethodDeclaration
+ } else if ("isCDeclarationSupportsCBreakpoint".equals(property) && (receiver instanceof List>)) { //$NON-NLS-1$
+ if (!CDebugUtils.isCustomToggleBreakpointFactory())
+ return true;
+
+ List> list = (List>) receiver;
+ if (list.size() == 1) {
+ Object element = list.get(0);
+ if ((element instanceof IDeclaration) &&
+ (element instanceof IVariableDeclaration ||
+ element instanceof IFunctionDeclaration ||
+ element instanceof IMethodDeclaration)) {
+
+ IDeclaration cElement = (IDeclaration) element;
+
+ // Handles the case for external file, check to see whether the file exist.
+ // This is to workaround the EditorUtility wrongly assign the project for
+ // external file.
+ IResource resource = cElement.getResource();
+ if (resource == null || !resource.exists())
+ return true;
+
+ ICProject cproject = cElement.getCProject();
+ if (cproject != null) {
+ if (CDebugUtils.isStandardCBreakpointFactory(cproject.getProject()))
+ return true;
+
+ } else {
+ return true; // can't figure the associated project, enable it by default.
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml
index b4a01fa5808..92c40ca22a8 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml
@@ -473,8 +473,10 @@
-
-
+
+
+
diff --git a/dsf/org.eclipse.cdt.dsf.ui/plugin.xml b/dsf/org.eclipse.cdt.dsf.ui/plugin.xml
index 2f4990f3a05..91069209aba 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/plugin.xml
+++ b/dsf/org.eclipse.cdt.dsf.ui/plugin.xml
@@ -457,6 +457,13 @@
properties="isGroupDebugContextsVisible,isUngroupDebugContextsVisible"
type="org.eclipse.cdt.dsf.ui.viewmodel.datamodel.IDMVMContext">
+
+
@@ -768,7 +775,9 @@
class="org.eclipse.cdt.dsf.debug.internal.ui.ToggleBreakpointsTargetFactory">
-
+
+
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyToggleBreakpointTester.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyToggleBreakpointTester.java
new file mode 100644
index 00000000000..e872b33742e
--- /dev/null
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyToggleBreakpointTester.java
@@ -0,0 +1,61 @@
+/*****************************************************************
+ * Copyright (c) 2011 Texas Instruments and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Patrick Chuong (Texas Instruments) -
+ * Update CDT ToggleBreakpointTargetFactory enablement (340177 )
+ *****************************************************************/
+package org.eclipse.cdt.dsf.debug.internal.ui.disassembly;
+
+import org.eclipse.cdt.debug.core.CDIDebugModel;
+import org.eclipse.cdt.debug.core.CDebugUtils;
+import org.eclipse.cdt.debug.core.model.ICBreakpoint;
+import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.provisional.IDisassemblyPart;
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.debug.core.model.IDebugElement;
+import org.eclipse.debug.core.model.IDebugModelProvider;
+import org.eclipse.debug.ui.DebugUITools;
+
+/**
+ * Disassembly toggle breakpoint factory enablement tester.
+ *
+ * @since 2.2
+ */
+public class DisassemblyToggleBreakpointTester extends PropertyTester {
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
+ */
+ public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+ if ("isDisassemblyViewSupportsCBreakpoint".equals(property) && (receiver instanceof IDisassemblyPart)) { //$NON-NLS-1$
+ IDisassemblyPart view = ((IDisassemblyPart) receiver);
+ if (!CDebugUtils.isCustomToggleBreakpointFactory())
+ return true;
+
+ IAdaptable element = DebugUITools.getPartDebugContext(view.getSite());
+ if (element != null) {
+ IDebugModelProvider modelProvider = (IDebugModelProvider)element.getAdapter(IDebugModelProvider.class);
+ if (modelProvider != null) {
+ String[] models = modelProvider.getModelIdentifiers();
+ for (String model : models) {
+ if (CDIDebugModel.getPluginIdentifier().equals(model) ||
+ ICBreakpoint.C_BREAKPOINTS_DEBUG_MODEL_ID.equals(model)) {
+ return true;
+ }
+ }
+ } else if (element instanceof IDebugElement) {
+ if (CDIDebugModel.getPluginIdentifier().equals(((IDebugElement)element).getModelIdentifier()) ) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+}
\ No newline at end of file