Skip to main content
summaryrefslogtreecommitdiffstats
path: root/debug
diff options
context:
space:
mode:
authorPatrick Chuong2011-03-30 09:56:31 -0400
committerPatrick Chuong2011-03-30 09:56:31 -0400
commitc1d6a1cffe3eb58e5b41caef41ff3b40490c42ab (patch)
tree5d6ee952ab18c981d368ad4b8f10f80aee72d893 /debug
parent16fdcfdd185330e552f89a7b3681f29928c2a6c5 (diff)
downloadorg.eclipse.cdt-c1d6a1cffe3eb58e5b41caef41ff3b40490c42ab.tar.gz
org.eclipse.cdt-c1d6a1cffe3eb58e5b41caef41ff3b40490c42ab.tar.xz
org.eclipse.cdt-c1d6a1cffe3eb58e5b41caef41ff3b40490c42ab.zip
Bug 340177 - [breakpoints] Update CDT ToggleBreakpointTargetFactory enablement
Diffstat (limited to 'debug')
-rw-r--r--debug/org.eclipse.cdt.debug.core/.settings/.api_filters101
-rw-r--r--debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugUtils.java64
-rw-r--r--debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICDebugConstants.java15
-rw-r--r--debug/org.eclipse.cdt.debug.ui/plugin.xml54
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ToggleCBreakpointTester.java126
5 files changed, 286 insertions, 74 deletions
diff --git a/debug/org.eclipse.cdt.debug.core/.settings/.api_filters b/debug/org.eclipse.cdt.debug.core/.settings/.api_filters
index 50097440ab..136cb89463 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 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
<component id="org.eclipse.cdt.debug.core" version="2">
- <resource path="src/org/eclipse/cdt/debug/core/sourcelookup/MappingSourceContainer.java" type="org.eclipse.cdt.debug.core.sourcelookup.MappingSourceContainer">
- <filter id="643846161">
- <message_arguments>
- <message_argument value="MapEntrySourceContainer"/>
- <message_argument value="MappingSourceContainer"/>
- <message_argument value="addMapEntries(MapEntrySourceContainer[])"/>
- </message_arguments>
- </filter>
- <filter id="643846161">
- <message_arguments>
- <message_argument value="MapEntrySourceContainer"/>
- <message_argument value="MappingSourceContainer"/>
- <message_argument value="addMapEntry(MapEntrySourceContainer)"/>
- </message_arguments>
- </filter>
- <filter id="643846161">
- <message_arguments>
- <message_argument value="MapEntrySourceContainer"/>
- <message_argument value="MappingSourceContainer"/>
- <message_argument value="removeMapEntries(MapEntrySourceContainer[])"/>
- </message_arguments>
- </filter>
- <filter id="643846161">
- <message_arguments>
- <message_argument value="MapEntrySourceContainer"/>
- <message_argument value="MappingSourceContainer"/>
- <message_argument value="removeMapEntry(MapEntrySourceContainer)"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="src/org/eclipse/cdt/debug/core/sourcelookup/SourceLookupMessages.java" type="org.eclipse.cdt.debug.core.sourcelookup.SourceLookupMessages">
- <filter comment="SourceLookupMessages class is no longer public." id="305365105">
- <message_arguments>
- <message_argument value="org.eclipse.cdt.debug.core.sourcelookup.SourceLookupMessages"/>
- <message_argument value="org.eclipse.cdt.debug.core_7.1.0"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="src/org/eclipse/cdt/debug/internal/core/srcfinder/CSourceFinder.java" type="org.eclipse.cdt.debug.internal.core.srcfinder.CSourceFinder">
- <filter id="574619656">
- <message_arguments>
- <message_argument value="ISourceFinder"/>
- <message_argument value="CSourceFinder"/>
- </message_arguments>
- </filter>
- </resource>
+<resource path="src/org/eclipse/cdt/debug/core/ICDebugConstants.java" type="org.eclipse.cdt.debug.core.ICDebugConstants">
+<filter id="403853384">
+<message_arguments>
+<message_argument value="org.eclipse.cdt.debug.core.ICDebugConstants"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="src/org/eclipse/cdt/debug/core/sourcelookup/MappingSourceContainer.java" type="org.eclipse.cdt.debug.core.sourcelookup.MappingSourceContainer">
+<filter id="643846161">
+<message_arguments>
+<message_argument value="MapEntrySourceContainer"/>
+<message_argument value="MappingSourceContainer"/>
+<message_argument value="addMapEntries(MapEntrySourceContainer[])"/>
+</message_arguments>
+</filter>
+<filter id="643846161">
+<message_arguments>
+<message_argument value="MapEntrySourceContainer"/>
+<message_argument value="MappingSourceContainer"/>
+<message_argument value="addMapEntry(MapEntrySourceContainer)"/>
+</message_arguments>
+</filter>
+<filter id="643846161">
+<message_arguments>
+<message_argument value="MapEntrySourceContainer"/>
+<message_argument value="MappingSourceContainer"/>
+<message_argument value="removeMapEntries(MapEntrySourceContainer[])"/>
+</message_arguments>
+</filter>
+<filter id="643846161">
+<message_arguments>
+<message_argument value="MapEntrySourceContainer"/>
+<message_argument value="MappingSourceContainer"/>
+<message_argument value="removeMapEntry(MapEntrySourceContainer)"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="src/org/eclipse/cdt/debug/core/sourcelookup/SourceLookupMessages.java" type="org.eclipse.cdt.debug.core.sourcelookup.SourceLookupMessages">
+<filter comment="SourceLookupMessages class is no longer public." id="305365105">
+<message_arguments>
+<message_argument value="org.eclipse.cdt.debug.core.sourcelookup.SourceLookupMessages"/>
+<message_argument value="org.eclipse.cdt.debug.core_7.1.0"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="src/org/eclipse/cdt/debug/internal/core/srcfinder/CSourceFinder.java" type="org.eclipse.cdt.debug.internal.core.srcfinder.CSourceFinder">
+<filter id="574619656">
+<message_arguments>
+<message_argument value="ISourceFinder"/>
+<message_argument value="CSourceFinder"/>
+</message_arguments>
+</filter>
+</resource>
</component>
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 ec7de3bb4e..e51cb1b918 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 2896181833..c56fd788c1 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 94262f5193..7bb1df689b 100644
--- a/debug/org.eclipse.cdt.debug.ui/plugin.xml
+++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml
@@ -1754,6 +1754,23 @@
</attribute>
</breakpointLabels>
</extension>
+ <extension
+ point="org.eclipse.core.expressions.propertyTesters">
+ <propertyTester
+ class="org.eclipse.cdt.debug.internal.ui.ToggleCBreakpointTester"
+ id="org.eclipse.cdt.debug.ui.editorToggleBreakpointTester"
+ namespace="org.eclipse.cdt.debug.ui"
+ properties="isCEditorSupportsCBreakpoint,isAsmEditorSupportsCBreakpoint,isDisassemblyEditorSupportsCBreakpoint"
+ type="org.eclipse.ui.IWorkbenchPart">
+ </propertyTester>
+ <propertyTester
+ class="org.eclipse.cdt.debug.internal.ui.ToggleCBreakpointTester"
+ id="org.eclipse.cdt.debug.ui.declarationToggleBreakpointTester"
+ namespace="org.eclipse.cdt.debug.ui"
+ properties="isCDeclarationSupportsCBreakpoint"
+ type="java.util.List">
+ </propertyTester>
+ </extension>
<extension point="org.eclipse.debug.ui.toggleBreakpointsTargetFactories">
<toggleTargetFactory
@@ -1762,19 +1779,15 @@
<enablement>
<!-- Enable the breakpoint toggle for CDT's editors and model elements -->
<or>
- <instanceof value="org.eclipse.cdt.internal.ui.editor.CEditor"/>
- <instanceof value="org.eclipse.cdt.internal.ui.editor.asm.AsmTextEditor"/>
- <instanceof value="org.eclipse.cdt.debug.internal.ui.disassembly.editor.DisassemblyEditor"/>
+ <test property="org.eclipse.cdt.debug.ui.isCEditorSupportsCBreakpoint"/>
+ <test property="org.eclipse.cdt.debug.ui.isAsmEditorSupportsCBreakpoint"/>
+ <test
+ property="org.eclipse.cdt.debug.ui.isDisassemblyEditorSupportsCBreakpoint">
+ </test>
<with variable="selection">
<count value="1"/>
- <iterate>
- <or>
- <instanceof value="org.eclipse.cdt.core.model.IFunction"/>
- <instanceof value="org.eclipse.cdt.core.model.IMethod"/>
- <instanceof value="org.eclipse.cdt.core.model.IVariable"/>
- </or>
- </iterate>
- </with>
+ <test property="org.eclipse.cdt.debug.ui.isCDeclarationSupportsCBreakpoint"/>
+ </with>
</or>
</enablement>
</toggleTargetFactory>
@@ -1788,19 +1801,12 @@
definitionId="org.eclipse.cdt.debug.ui.testIsTracepointActionSetActive">
</reference>
<or>
- <instanceof value="org.eclipse.cdt.internal.ui.editor.CEditor"/>
- <instanceof value="org.eclipse.cdt.internal.ui.editor.asm.AsmTextEditor"/>
- <instanceof value="org.eclipse.cdt.debug.internal.ui.disassembly.editor.DisassemblyEditor"/>
- <with variable="selection">
- <count value="1"/>
- <iterate>
- <or>
- <instanceof value="org.eclipse.cdt.core.model.IFunction"/>
- <instanceof value="org.eclipse.cdt.core.model.IMethod"/>
- <instanceof value="org.eclipse.cdt.core.model.IVariable"/>
- </or>
- </iterate>
- </with>
+ <test property="org.eclipse.cdt.debug.ui.isCEditorSupportsCBreakpoint"/>
+ <test property="org.eclipse.cdt.debug.ui.isAsmEditorSupportsCBreakpoint"/>
+ <with variable="selection">
+ <count value="1"/>
+ <test property="org.eclipse.cdt.debug.ui.isCDeclarationSupportsCBreakpoint"/>
+ </with>
</or>
</and>
</enablement>
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 0000000000..4a494ad263
--- /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;
+ }
+}

Back to the top