diff --git a/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF b/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF index c3c06a0139b..5d85dba662b 100644 --- a/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF +++ b/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF @@ -10,7 +10,7 @@ Export-Package: org.eclipse.cdt.debug.internal.ui;x-internal:x-friends:="org.eclipse.cdt.dsf.ui";x-friends:="org.eclipse.cdt.dsf.ui", org.eclipse.cdt.debug.internal.ui.actions;x-friends:="org.eclipse.cdt.dsf.ui,org.eclipse.cdt.debug.ui.memory.memorybrowser", org.eclipse.cdt.debug.internal.ui.actions.breakpoints;x-internal:=true, - org.eclipse.cdt.debug.internal.ui.breakpoints;x-friends:="org.eclipse.cdt.dsf.ui", + org.eclipse.cdt.debug.internal.ui.breakpoints;x-friends:="org.eclipse.cdt.dsf.ui,org.eclipse.cdt.dsf.gdb.ui", org.eclipse.cdt.debug.internal.ui.commands;x-internal:=true, org.eclipse.cdt.debug.internal.ui.dialogfields;x-friends:="org.eclipse.cdt.dsf.gdb.ui", org.eclipse.cdt.debug.internal.ui.dialogs;x-internal:=true, diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/BreakpointsMessages.properties b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/BreakpointsMessages.properties index 90c7a30e04b..1877790d4f4 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/BreakpointsMessages.properties +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/BreakpointsMessages.properties @@ -41,3 +41,7 @@ CBreakpointPropertyPage.enabled_label=Enabled CBreakpointPropertyPage.eventType_label=Event Type ThreadFilterEditor.0=&Restrict to Selected Targets and Threads: + +TracepointPropertyPage.tracepointType_function_label=C/C++ Function Tracepoint +TracepointPropertyPage.tracepointType_address_label=C/C++ Address Tracepoint +TracepointPropertyPage.tracepointType_line_label=C/C++ Line Tracepoint diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/CBreakpointContext.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/CBreakpointContext.java index bc179355e35..5e94f2860eb 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/CBreakpointContext.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/CBreakpointContext.java @@ -177,11 +177,23 @@ class CBreakpointContextWorkbenchAdapter implements IWorkbenchAdapter { private String getBreakpointMainLabel(ICBreakpoint breakpoint) { if (breakpoint instanceof ICFunctionBreakpoint) { - return BreakpointsMessages.getString("CBreakpointPropertyPage.breakpointType_function_label"); //$NON-NLS-1$ + if (breakpoint instanceof ICTracepoint) { + return BreakpointsMessages.getString("TracepointPropertyPage.tracepointType_function_label"); //$NON-NLS-1$ + } else { + return BreakpointsMessages.getString("CBreakpointPropertyPage.breakpointType_function_label"); //$NON-NLS-1$ + } } else if (breakpoint instanceof ICAddressBreakpoint) { - return BreakpointsMessages.getString("CBreakpointPropertyPage.breakpointType_address_label"); //$NON-NLS-1$ + if (breakpoint instanceof ICTracepoint) { + return BreakpointsMessages.getString("TracepointPropertyPage.tracepointType_address_label"); //$NON-NLS-1$ + } else { + return BreakpointsMessages.getString("CBreakpointPropertyPage.breakpointType_address_label"); //$NON-NLS-1$ + } } else if (breakpoint instanceof ICLineBreakpoint) { - return BreakpointsMessages.getString("CBreakpointPropertyPage.breakpointType_line_label"); //$NON-NLS-1$ + if (breakpoint instanceof ICTracepoint) { + return BreakpointsMessages.getString("TracepointPropertyPage.tracepointType_line_label"); //$NON-NLS-1$ + } else { + return BreakpointsMessages.getString("CBreakpointPropertyPage.breakpointType_line_label"); //$NON-NLS-1$ + } } else if (breakpoint instanceof ICEventBreakpoint) { return BreakpointsMessages.getString("CBreakpointPropertyPage.breakpointType_event_label"); //$NON-NLS-1$ } else if (breakpoint instanceof ICWatchpoint) { diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/CBreakpointPreferenceStore.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/CBreakpointPreferenceStore.java index 6a284f5039e..612bae3e6df 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/CBreakpointPreferenceStore.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/CBreakpointPreferenceStore.java @@ -8,6 +8,7 @@ * Contributors: * QNX Software Systems - Initial API and implementation * QNX Software Systems - Refactored to use platform implementation + * Marc Khouzam (Ericsson) - Added support for Tracepoints (bug 376116) *******************************************************************************/ package org.eclipse.cdt.debug.internal.ui.breakpoints; @@ -23,6 +24,7 @@ import java.util.Set; import org.eclipse.cdt.debug.core.CDIDebugModel; import org.eclipse.cdt.debug.core.model.ICBreakpoint; import org.eclipse.cdt.debug.core.model.ICLineBreakpoint2; +import org.eclipse.cdt.debug.core.model.ICTracepoint; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRunnable; @@ -36,7 +38,8 @@ import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; /** - * A preference store that presents the state of the properties of a C/C++ breakpoint. + * A preference store that presents the state of the properties of a C/C++ breakpoint + * or Tracepoint. */ public class CBreakpointPreferenceStore implements IPersistentPreferenceStore { @@ -131,6 +134,9 @@ public class CBreakpointPreferenceStore implements IPersistentPreferenceStore { else if ( property.equals( ICBreakpoint.IGNORE_COUNT ) ) { breakpoint.setIgnoreCount( getInt( ICBreakpoint.IGNORE_COUNT ) ); } + else if ( breakpoint instanceof ICTracepoint && property.equals( ICTracepoint.PASS_COUNT ) ) { + ((ICTracepoint)breakpoint).setPassCount( getInt( ICTracepoint.PASS_COUNT ) ); + } else if ( property.equals( ICBreakpoint.CONDITION ) ) { breakpoint.setCondition( getString( ICBreakpoint.CONDITION ) ); } 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 81593486d9a..ada72312ab3 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml @@ -191,7 +191,13 @@ id="org.eclipse.cdt.dsf.gdb.tracepoint.common" name="%tracepoints.property.common"> - + + + + + + + diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/DisassemblyToggleTracepointsTarget.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/DisassemblyToggleTracepointsTarget.java index 5b0fc65561c..7cf47ad934a 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/DisassemblyToggleTracepointsTarget.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/DisassemblyToggleTracepointsTarget.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Ericsson, Inc. and others. + * Copyright (c) 2009, 2013 Ericsson, Inc. 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 @@ -7,15 +7,22 @@ * * Contributors: * Ericsson - initial API and implementation + * Marc Khouzam (Ericsson) - Updated to allow updating properties + * before creating the tracepoint (Bug 376116) *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.internal.ui.breakpoints; +import java.util.HashMap; +import java.util.Map; + import org.eclipse.cdt.core.IAddress; import org.eclipse.cdt.debug.core.CDIDebugModel; import org.eclipse.cdt.debug.core.model.ICBreakpointType; +import org.eclipse.cdt.debug.core.model.ICLineBreakpoint; import org.eclipse.cdt.dsf.debug.ui.actions.AbstractDisassemblyBreakpointsTarget; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; +import org.eclipse.ui.IWorkbenchPart; /** * Toggle tracepoint target implementation for the disassembly part. @@ -26,18 +33,40 @@ public class DisassemblyToggleTracepointsTarget extends AbstractDisassemblyBreak * @see org.eclipse.cdt.dsf.debug.internal.ui.disassembly.provisional.AbstractDisassemblyBreakpointsTarget#createLineBreakpoint(java.lang.String, org.eclipse.core.resources.IResource, int) */ @Override - protected void createLineBreakpoint( String sourceHandle, IResource resource, int lineNumber ) throws CoreException { - CDIDebugModel.createLineTracepoint( sourceHandle, resource, getBreakpointType(), lineNumber, true, 0, "", true ); //$NON-NLS-1$ + protected void createLineBreakpoint(String sourceHandle, IResource resource, int lineNumber) throws CoreException { + CDIDebugModel.createLineTracepoint(sourceHandle, resource, getBreakpointType(), lineNumber, true, 0, "", true); //$NON-NLS-1$ } - + + @Override + protected void createLineBreakpointInteractive(IWorkbenchPart part, String sourceHandle, IResource resource, int lineNumber) + throws CoreException + { + ICLineBreakpoint lineBp = CDIDebugModel.createBlankLineTracepoint(); + Map attributes = new HashMap(); + CDIDebugModel.setLineBreakpointAttributes( + attributes, sourceHandle, getBreakpointType(), lineNumber, true, 0, "" ); //$NON-NLS-1$ + openBreakpointPropertiesDialog(lineBp, part, resource, attributes); + } + /* (non-Javadoc) * @see org.eclipse.cdt.dsf.debug.internal.ui.disassembly.provisional.AbstractDisassemblyBreakpointsTarget#createAddressBreakpoint(org.eclipse.core.resources.IResource, org.eclipse.cdt.core.IAddress) */ @Override - protected void createAddressBreakpoint( IResource resource, IAddress address ) throws CoreException { - CDIDebugModel.createAddressTracepoint( null, null, resource, getBreakpointType(), -1, address, true, 0, "", true ); //$NON-NLS-1$ + protected void createAddressBreakpoint(IResource resource, IAddress address) throws CoreException { + CDIDebugModel.createAddressTracepoint(null, null, resource, getBreakpointType(), -1, address, true, 0, "", true); //$NON-NLS-1$ } + @Override + protected void createAddressBreakpointInteractive(IWorkbenchPart part, IResource resource, IAddress address) + throws CoreException + { + ICLineBreakpoint lineBp = CDIDebugModel.createBlankAddressTracepoint(); + Map attributes = new HashMap(); + CDIDebugModel.setAddressBreakpointAttributes( + attributes, null, null, getBreakpointType(), -1, address, true, 0, "" ); //$NON-NLS-1$ + openBreakpointPropertiesDialog(lineBp, part, resource, attributes); + } + protected int getBreakpointType() { return ICBreakpointType.REGULAR; } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/GDBTracepointPropertyPage.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/GDBTracepointPropertyPage.java index acfa8557ac2..9567949d65f 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/GDBTracepointPropertyPage.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/GDBTracepointPropertyPage.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009 Ericsson and others. + * Copyright (c) 2009, 2013 Ericsson 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 @@ -7,36 +7,41 @@ * * Contributors: * Ericsson - Initial API and implementation + * Marc Khouzam (Ericsson) - Updated to allow updating properties + * before creating the tracepoint (Bug 376116) *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.internal.ui.breakpoints; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - +import org.eclipse.cdt.debug.core.CDIDebugModel; import org.eclipse.cdt.debug.core.model.ICAddressBreakpoint; +import org.eclipse.cdt.debug.core.model.ICBreakpoint; import org.eclipse.cdt.debug.core.model.ICFunctionBreakpoint; +import org.eclipse.cdt.debug.core.model.ICLineBreakpoint; import org.eclipse.cdt.debug.core.model.ICTracepoint; +import org.eclipse.cdt.debug.internal.ui.breakpoints.CBreakpointContext; +import org.eclipse.cdt.debug.internal.ui.breakpoints.CBreakpointPreferenceStore; +import org.eclipse.cdt.debug.ui.breakpoints.ICBreakpointContext; import org.eclipse.cdt.debug.ui.preferences.ReadOnlyFieldEditor; -import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin; import org.eclipse.core.resources.IMarker; -import org.eclipse.core.resources.IWorkspaceRunnable; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.debug.core.model.ILineBreakpoint; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.model.IDebugElement; +import org.eclipse.debug.core.model.IDebugModelProvider; +import org.eclipse.debug.ui.DebugUITools; +import org.eclipse.debug.ui.contexts.IDebugContextProvider; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.FieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.IntegerFieldEditor; import org.eclipse.jface.preference.StringFieldEditor; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPropertyPage; +import org.eclipse.ui.model.IWorkbenchAdapter; /** * The preference page used to present the properties of a GDB tracepoint as preferences. @@ -122,6 +127,12 @@ public class GDBTracepointPropertyPage extends FieldEditorPreferencePage impleme super.doStore(); } } + + @Override + protected void doLoad() { + String value = getPreferenceStore().getString(getPreferenceName()); + setStringValue(value); + } /** * Clears the error message from the message line if the error message is the error message from this field editor. @@ -176,19 +187,21 @@ public class GDBTracepointPropertyPage extends FieldEditorPreferencePage impleme private IAdaptable fElement; /** - * The "fake" preference store used to interface between - * the tracepoint and the tracepoint preference page. + * The preference store used to interface between the tracepoint and the + * tracepoint preference page. This preference store is initialized only + * when the preference store cannot be retrieved from the preference + * dialog's element. + * @see #getPreferenceStore() */ - private TracepointPreferenceStore fTracepointPreferenceStore; + private CBreakpointPreferenceStore fTracepointPreferenceStore; /** * Constructor for GDBTracepointPropertyPage. * */ public GDBTracepointPropertyPage() { - super( GRID ); + super(GRID); noDefaultAndApplyButton(); - fTracepointPreferenceStore = new TracepointPreferenceStore(); } /* @@ -202,26 +215,10 @@ public class GDBTracepointPropertyPage extends FieldEditorPreferencePage impleme createMainLabel(tracepoint); createTypeSpecificLabelFieldEditors(tracepoint); createEnabledField(getFieldEditorParent()); - IPreferenceStore store = getPreferenceStore(); - try { - String condition = tracepoint.getCondition(); - if ( condition == null ) { - condition = ""; //$NON-NLS-1$ - } - store.setValue(TracepointPreferenceStore.CONDITION, condition); - createConditionEditor(getFieldEditorParent()); - store.setValue(TracepointPreferenceStore.ENABLED, tracepoint.isEnabled()); - // GDB does not support ignore count right now -// int ignoreCount = tracepoint.getIgnoreCount(); -// store.setValue(TracepointPreferenceStore.IGNORE_COUNT, (ignoreCount >= 0) ? ignoreCount : 0); -// createIgnoreCountEditor(getFieldEditorParent()); - int passCount = tracepoint.getPassCount(); - store.setValue(TracepointPreferenceStore.PASS_COUNT, (passCount >= 0) ? passCount : 0); - createPassCountEditor(getFieldEditorParent()); - } - catch( CoreException ce ) { - GdbUIPlugin.log(ce); - } + createConditionEditor(getFieldEditorParent()); + // GDB does not support ignore count right now + //createIgnoreCountEditor(getFieldEditorParent()); + createPassCountEditor(getFieldEditorParent()); } private void createMainLabel(ICTracepoint tracepoint) { @@ -230,117 +227,86 @@ public class GDBTracepointPropertyPage extends FieldEditorPreferencePage impleme getTracepointMainLabel(tracepoint))); } - /** - * Method createTypeSpecificLabelFieldEditors. - * - * @param tracepoint - */ private void createTypeSpecificLabelFieldEditors(ICTracepoint tracepoint) { - if (tracepoint instanceof ICFunctionBreakpoint) { - ICFunctionBreakpoint ftrpt = (ICFunctionBreakpoint)tracepoint; - String function = Messages.TracepointPropertyPage_NotAvailable; - try { - function = ftrpt.getFunction(); - } - catch(CoreException e) { - GdbUIPlugin.log(e); - } - if (function != null) { - addField(createLabelEditor(getFieldEditorParent(), Messages.TracepointPropertyPage_FunctionName, function)); - } + createFunctionEditor(getFieldEditorParent()); } else if (tracepoint instanceof ICAddressBreakpoint) { - ICAddressBreakpoint atrpt = (ICAddressBreakpoint)tracepoint; - String address = Messages.TracepointPropertyPage_NotAvailable; - try { - address = atrpt.getAddress(); - } - catch(CoreException e) { - GdbUIPlugin.log(e); - } - if (address != null) { - addField(createLabelEditor(getFieldEditorParent(), Messages.TracepointPropertyPage_Address, address)); + String address = getPreferenceStore().getString(ICLineBreakpoint.ADDRESS); + if (address == null || address.trim().length() == 0) { + address = Messages.TracepointPropertyPage_NotAvailable; } + addField(createLabelEditor(getFieldEditorParent(), Messages.TracepointPropertyPage_Address, address)); } else { // LineTracepoint - String fileName = null; - try { - fileName = tracepoint.getSourceHandle(); - } - catch(CoreException e) { - GdbUIPlugin.log(e); - } + String fileName = getPreferenceStore().getString(ICBreakpoint.SOURCE_HANDLE); if (fileName != null) { addField(createLabelEditor(getFieldEditorParent(), Messages.TracepointPropertyPage_File, fileName)); } - ILineBreakpoint ltrpt = tracepoint; - - int lNumber = 0; - try { - lNumber = ltrpt.getLineNumber(); - } catch (CoreException e) { - GdbUIPlugin.log(e); - } - + int lNumber = getPreferenceStore().getInt(IMarker.LINE_NUMBER); if (lNumber > 0) { - getPreferenceStore().setValue(TracepointPreferenceStore.LINE, lNumber); createLineNumberEditor(getFieldEditorParent()); } } } private String getTracepointMainLabel(ICTracepoint tracepoint) { - if (tracepoint instanceof ICFunctionBreakpoint) - return Messages.TracepointPropertyPage_FunctionTracepoint; - if (tracepoint instanceof ICAddressBreakpoint) - return Messages.TracepointPropertyPage_AddressTracepoint; - - return Messages.TracepointPropertyPage_LineTracepoint; + IWorkbenchAdapter labelProvider = (IWorkbenchAdapter)getElement().getAdapter(IWorkbenchAdapter.class); + if (labelProvider != null) { + return labelProvider.getLabel(getElement()); + } + // default main label is the label of marker type for the tracepoint + return CDIDebugModel.calculateMarkerType(tracepoint); } + protected void createFunctionEditor(Composite parent) { + ICTracepoint tracepoint = getTracepoint(); + if (tracepoint == null || tracepoint.getMarker() == null) { + TracepointStringFieldEditor expressionEditor = new TracepointStringFieldEditor( + ICLineBreakpoint.FUNCTION, Messages.TracepointPropertyPage_FunctionName, parent); + expressionEditor.setErrorMessage(Messages.TracepointPropertyPage_function_value_errorMessage); + expressionEditor.setEmptyStringAllowed(false); + addField(expressionEditor); + } else { + String function = getPreferenceStore().getString(ICLineBreakpoint.FUNCTION); + if (function == null) { + function = Messages.TracepointPropertyPage_NotAvailable; + } + addField(createLabelEditor(getFieldEditorParent(), Messages.TracepointPropertyPage_FunctionName, function)); + } + } protected void createLineNumberEditor(Composite parent) { String title = Messages.TracepointPropertyPage_LineNumber; - TracepointIntegerFieldEditor labelFieldEditor = new TracepointIntegerFieldEditor(TracepointPreferenceStore.LINE ,title, parent); + TracepointIntegerFieldEditor labelFieldEditor = new TracepointIntegerFieldEditor(IMarker.LINE_NUMBER, title, parent); labelFieldEditor.setValidRange(1, Integer.MAX_VALUE); addField(labelFieldEditor); } - + protected void createEnabledField(Composite parent) { - fEnabled = new BooleanFieldEditor(TracepointPreferenceStore.ENABLED, Messages.TracepointPropertyPage_Enabled, parent); + fEnabled = new BooleanFieldEditor(ICBreakpoint.ENABLED, Messages.TracepointPropertyPage_Enabled, parent); addField(fEnabled); } - protected void createConditionEditor( Composite parent ) { - fCondition = new TracepointStringFieldEditor(TracepointPreferenceStore.CONDITION, Messages.TracepointPropertyPage_Condition, parent); + protected void createConditionEditor(Composite parent) { + fCondition = new TracepointStringFieldEditor(ICBreakpoint.CONDITION, Messages.TracepointPropertyPage_Condition, parent); fCondition.setEmptyStringAllowed(true); fCondition.setErrorMessage(Messages.TracepointPropertyPage_InvalidCondition); addField(fCondition); } protected void createIgnoreCountEditor(Composite parent) { - fIgnoreCount = new TracepointIntegerFieldEditor(TracepointPreferenceStore.IGNORE_COUNT, Messages.TracepointPropertyPage_IgnoreCount, parent); + fIgnoreCount = new TracepointIntegerFieldEditor(ICBreakpoint.IGNORE_COUNT, Messages.TracepointPropertyPage_IgnoreCount, parent); fIgnoreCount.setValidRange(0, Integer.MAX_VALUE); fIgnoreCountTextControl = fIgnoreCount.getTextControl(parent); - try { - fIgnoreCountTextControl.setEnabled(getTracepoint().getIgnoreCount() >= 0); - } - catch(CoreException ce) { - GdbUIPlugin.log(ce); - } + fIgnoreCountTextControl.setEnabled( getPreferenceStore().getInt(ICBreakpoint.IGNORE_COUNT) >= 0 ); addField(fIgnoreCount); } protected void createPassCountEditor(Composite parent) { - fPassCount = new TracepointIntegerFieldEditor(TracepointPreferenceStore.PASS_COUNT, Messages.TracepointPropertyPage_PassCount, parent); + fPassCount = new TracepointIntegerFieldEditor(ICTracepoint.PASS_COUNT, Messages.TracepointPropertyPage_PassCount, parent); fPassCount.setValidRange(0, Integer.MAX_VALUE); fPassCountTextControl = fPassCount.getTextControl(parent); - try { - fPassCountTextControl.setEnabled(getTracepoint().getPassCount() >= 0); - } - catch(CoreException ce) { - GdbUIPlugin.log(ce); - } + fPassCountTextControl.setEnabled(getPreferenceStore().getInt(ICTracepoint.PASS_COUNT) >= 0); addField(fPassCount); } @@ -350,9 +316,80 @@ public class GDBTracepointPropertyPage extends FieldEditorPreferencePage impleme protected ICTracepoint getTracepoint() { IAdaptable element = getElement(); - return (element instanceof ICTracepoint) ? (ICTracepoint)element : (ICTracepoint)element.getAdapter(ICTracepoint.class); + if (element instanceof ICTracepoint) { + return (ICTracepoint)element; + } + + if (element instanceof ICBreakpointContext) { + ICBreakpoint breakpoint =((ICBreakpointContext)element).getBreakpoint(); + if (breakpoint instanceof ICTracepoint) { + return (ICTracepoint)breakpoint; + } + assert false : "Should always have a tracepoint"; //$NON-NLS-1$ + } + + return (ICTracepoint)element.getAdapter(ICTracepoint.class); } + protected Object getDebugContext() { + IDebugContextProvider provider = (IDebugContextProvider)getElement().getAdapter(IDebugContextProvider.class); + if (provider != null) { + ISelection selection = provider.getActiveContext(); + if (selection instanceof IStructuredSelection) { + return ((IStructuredSelection) selection).getFirstElement(); + } + return null; + } + return DebugUITools.getDebugContext(); + } + + + protected IResource getResource() { + IAdaptable element = getElement(); + if (element instanceof ICTracepoint) { + IMarker marker = ((ICTracepoint)element).getMarker(); + if (marker != null) { + return marker.getResource(); + } + } else if (element instanceof ICBreakpointContext) { + return ((ICBreakpointContext)element).getResource(); + } + return null; + } + + @Override + public IPreferenceStore getPreferenceStore() { + IAdaptable element = getElement(); + if (element instanceof ICBreakpointContext) { + return ((ICBreakpointContext)element).getPreferenceStore(); + } + + if (fTracepointPreferenceStore == null) { + CBreakpointContext bpContext = element instanceof CBreakpointContext ? + (CBreakpointContext)element : null; + fTracepointPreferenceStore = new CBreakpointPreferenceStore(bpContext, null); + } + return fTracepointPreferenceStore; + } + + @Override + public boolean performCancel() { + IPreferenceStore store = getPreferenceStore(); + if (store instanceof CBreakpointPreferenceStore) { + ((CBreakpointPreferenceStore)store).setCanceled(true); + } + return super.performCancel(); + } + + @Override + public boolean performOk() { + IPreferenceStore store = getPreferenceStore(); + if (store instanceof CBreakpointPreferenceStore) { + ((CBreakpointPreferenceStore)store).setCanceled(false); + } + return super.performOk(); + } + /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPropertyPage#getElement() */ @@ -369,79 +406,16 @@ public class GDBTracepointPropertyPage extends FieldEditorPreferencePage impleme fElement = element; } - @Override - public IPreferenceStore getPreferenceStore() { - return fTracepointPreferenceStore; - } - - @Override - public boolean performOk() { - final List changedProperties = new ArrayList(5); - getPreferenceStore().addPropertyChangeListener( new IPropertyChangeListener() { - - /** - * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent) - */ - @Override - public void propertyChange(PropertyChangeEvent event) { - changedProperties.add(event.getProperty()); - } - } ); - boolean result = super.performOk(); - setBreakpointProperties(changedProperties); - return result; - } - - protected void setBreakpointProperties(final List changedProperties) { - IWorkspaceRunnable wr = new IWorkspaceRunnable() { - - @Override - public void run( IProgressMonitor monitor ) throws CoreException { - ICTracepoint tracepoint = getTracepoint(); - Iterator changed = changedProperties.iterator(); - while(changed.hasNext()) { - String property = changed.next(); - if (property.equals(TracepointPreferenceStore.ENABLED)) { - tracepoint.setEnabled(getPreferenceStore().getBoolean(TracepointPreferenceStore.ENABLED)); - } - else if (property.equals(TracepointPreferenceStore.IGNORE_COUNT)) { - tracepoint.setIgnoreCount(getPreferenceStore().getInt(TracepointPreferenceStore.IGNORE_COUNT)); - } - else if (property.equals(TracepointPreferenceStore.PASS_COUNT)) { - tracepoint.setPassCount(getPreferenceStore().getInt(TracepointPreferenceStore.PASS_COUNT)); - } - else if (property.equals(TracepointPreferenceStore.CONDITION)) { - tracepoint.setCondition(getPreferenceStore().getString(TracepointPreferenceStore.CONDITION)); - } - else if (property.equals(TracepointPreferenceStore.LINE)) { - // already workspace runnable, setting markers are safe - tracepoint.getMarker().setAttribute(IMarker.LINE_NUMBER, getPreferenceStore().getInt(TracepointPreferenceStore.LINE)); - } else { - // this allow set attributes contributed by other plugins - String value = getPropertyAsString(property); - tracepoint.getMarker().setAttribute(property, value); - } - } - } - }; - try { - ResourcesPlugin.getWorkspace().run(wr, null); - } - catch(CoreException ce) { - GdbUIPlugin.log(ce); - } - } - - /** - * Return string value of given property or null. - */ - protected String getPropertyAsString(String property) { - // currently only supports String and Integer - IPreferenceStore store = getPreferenceStore(); - - if (store.contains(property)) { - String value = store.getString(property); - return value; - } else return null; + protected String[] getDebugModelIds() { + String[] debugModelIds = null; + Object debugContext = getDebugContext(); + IDebugModelProvider debugModelProvider = (IDebugModelProvider) + DebugPlugin.getAdapter(debugContext, IDebugModelProvider.class); + if (debugModelProvider != null) { + debugModelIds = debugModelProvider.getModelIdentifiers(); + } else if (debugContext instanceof IDebugElement) { + debugModelIds = new String[] { ((IDebugElement)debugContext).getModelIdentifier() }; + } + return debugModelIds; } } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/Messages.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/Messages.java index 38b8bed6d9c..088a48303b0 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/Messages.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/Messages.java @@ -18,11 +18,8 @@ public class Messages extends NLS { public static String TracepointPropertyPage_integer_negative; public static String TracepointPropertyPage_NotAvailable; public static String TracepointPropertyPage_FunctionName; - public static String TracepointPropertyPage_FunctionTracepoint; public static String TracepointPropertyPage_Address; - public static String TracepointPropertyPage_AddressTracepoint; public static String TracepointPropertyPage_File; - public static String TracepointPropertyPage_LineTracepoint; public static String TracepointPropertyPage_LineNumber; public static String TracepointPropertyPage_Project; public static String TracepointPropertyPage_Condition; @@ -31,7 +28,8 @@ public class Messages extends NLS { public static String TracepointPropertyPage_PassCount; public static String TracepointPropertyPage_Class; public static String TracepointPropertyPage_Enabled; - + public static String TracepointPropertyPage_function_value_errorMessage; + public static String GdbThreadFilterEditor_Thread; public static String GdbThreadFilterEditor_RestrictToSelected; diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/Messages.properties b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/Messages.properties index 95a0dd2ac43..00829688e21 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/Messages.properties +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/Messages.properties @@ -10,17 +10,14 @@ # Ericsson - added Tracepoint support ############################################################################### -ToggleTracepointsTargetFactory_description=Standard C/C++ tracepoint type. +ToggleTracepointsTargetFactory_description=Standard C/C++ Tracepoint type. ToggleTracepointsTargetFactory_name=C/C++ Tracepoints TracepointPropertyPage_integer_negative=Count must be a nonnegative integer TracepointPropertyPage_NotAvailable=Not available TracepointPropertyPage_FunctionName=Function name: -TracepointPropertyPage_FunctionTracepoint=C/C++ function tracepoint TracepointPropertyPage_Address=Address: -TracepointPropertyPage_AddressTracepoint=C/C++ address tracepoint TracepointPropertyPage_File=File: -TracepointPropertyPage_LineTracepoint=C/C++ line tracepoint TracepointPropertyPage_LineNumber=Line number: TracepointPropertyPage_Project=Project: TracepointPropertyPage_Condition=&Condition: @@ -29,6 +26,7 @@ TracepointPropertyPage_IgnoreCount=&Ignore count: TracepointPropertyPage_PassCount=&Pass count: TracepointPropertyPage_Class=Class: TracepointPropertyPage_Enabled=Enabled +TracepointPropertyPage_function_value_errorMessage=Enter a function expression: GdbThreadFilterEditor_Thread=Thread GdbThreadFilterEditor_RestrictToSelected=&Restrict to Selected Processes and Threads: \ No newline at end of file diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/TracepointPreferenceStore.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/TracepointPreferenceStore.java deleted file mode 100644 index 7d5bacec548..00000000000 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/TracepointPreferenceStore.java +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009 Ericsson 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: - * Ericsson - Initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.dsf.gdb.internal.ui.breakpoints; - -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferenceStore; - -/** - * A preference store that presents the state of the properties of a C/C++ Tracepoint. - */ -public class TracepointPreferenceStore extends PreferenceStore implements IPreferenceStore { - - protected final static String ENABLED = "ENABLED"; //$NON-NLS-1$ - - protected final static String CONDITION = "CONDITION"; //$NON-NLS-1$ - - protected final static String IGNORE_COUNT = "IGNORE_COUNT"; //$NON-NLS-1$ - - protected final static String PASS_COUNT = "PASS_COUNT"; //$NON-NLS-1$ - - protected final static String LINE = "LINE"; //$NON-NLS-1$ - - /** - * Constructor for TracepointPreferenceStore. - */ - public TracepointPreferenceStore() { - - } - - /** - * Override to not save. - * This store used for temporary tracepoint setting in dialogs - * and does not require permanent storage. - */ - @Override - public boolean needsSaving() { - return false; - } -}