diff options
author | Patrick Chuong | 2011-03-30 13:56:31 +0000 |
---|---|---|
committer | Patrick Chuong | 2011-03-30 13:56:31 +0000 |
commit | c1d6a1cffe3eb58e5b41caef41ff3b40490c42ab (patch) | |
tree | 5d6ee952ab18c981d368ad4b8f10f80aee72d893 | |
parent | 16fdcfdd185330e552f89a7b3681f29928c2a6c5 (diff) | |
download | org.eclipse.cdt-c1d6a1cffe3eb58e5b41caef41ff3b40490c42ab.tar.gz org.eclipse.cdt-c1d6a1cffe3eb58e5b41caef41ff3b40490c42ab.tar.xz org.eclipse.cdt-c1d6a1cffe3eb58e5b41caef41ff3b40490c42ab.zip |
Bug 340177 - [breakpoints] Update CDT ToggleBreakpointTargetFactory enablement
8 files changed, 361 insertions, 77 deletions
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 @@ -<?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 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 @@ </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 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 @@ <and> <reference definitionId="org.eclipse.cdt.debug.ui.testIsTracepointActionSetActive"> - </reference> - <instanceof value="org.eclipse.cdt.dsf.debug.internal.ui.disassembly.DisassemblyPart"/> + </reference> + <test + property="org.eclipse.cdt.dsf.debug.ui.isCLaunchTypeDisassembly"> + </test> </and> </enablement> </toggleTargetFactory> 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"> </propertyTester> + <propertyTester + class="org.eclipse.cdt.dsf.debug.internal.ui.disassembly.DisassemblyToggleBreakpointTester" + id="org.eclipse.cdt.dsf.debug.ui.disassemblyViewToggleBreakpointTester" + namespace="org.eclipse.cdt.dsf.debug.ui" + properties="isDisassemblyViewSupportsCBreakpoint" + type="org.eclipse.cdt.dsf.debug.internal.ui.disassembly.DisassemblyView"> + </propertyTester> </extension> <extension point="org.eclipse.debug.ui.detailPaneFactories"> @@ -768,7 +775,9 @@ class="org.eclipse.cdt.dsf.debug.internal.ui.ToggleBreakpointsTargetFactory"> <enablement> <!-- Enable the breakpoint toggle for DSF Disassembly --> - <instanceof value="org.eclipse.cdt.dsf.debug.internal.ui.disassembly.DisassemblyPart"/> + <test + property="org.eclipse.cdt.dsf.debug.ui.isDisassemblyViewSupportsCBreakpoint"> + </test> </enablement> </toggleTargetFactory> </extension> 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 |