1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-09-10 12:03:16 +02:00

Bug 376236 - [breakpoints] Create event breakpoints using breakpoint properties dialog

This commit is contained in:
Scott Tepavich 2012-04-30 10:51:21 -07:00 committed by Pawel Piech
parent 9ba6060632
commit 99b0e4643d
11 changed files with 397 additions and 33 deletions

View file

@ -14,25 +14,30 @@ package org.eclipse.cdt.debug.internal.ui.actions.breakpoints;
import org.eclipse.cdt.debug.core.CDIDebugModel;
import org.eclipse.cdt.debug.internal.ui.actions.ActionMessages;
import org.eclipse.cdt.debug.internal.ui.dialogs.AddEventBreakpointDialog;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
import org.eclipse.cdt.debug.ui.UIMessages;
import org.eclipse.cdt.debug.ui.breakpoints.IToggleBreakpointsTargetCExtension;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.actions.IToggleBreakpointsTarget;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IViewActionDelegate;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.actions.ActionDelegate;
/**
* A delegate for the "Add Event Breakpoint" action.
*/
public class AddEventBreakpointActionDelegate extends ActionDelegate implements IViewActionDelegate {
public class AddEventBreakpointActionDelegate extends ActionDelegate implements IViewActionDelegate, IObjectActionDelegate {
private IViewPart fView;
private IWorkbenchPart fPart;
private ISelection fSelection;
private ToggleBreakpointAdapter fDefaultToggleTarget = new ToggleBreakpointAdapter();
/* (non-Javadoc)
* @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
@ -43,27 +48,35 @@ public class AddEventBreakpointActionDelegate extends ActionDelegate implements
}
private void setView(IViewPart view) {
fView = view;
fPart = fView = view;
}
protected IViewPart getView() {
return fView;
}
@Override
public void selectionChanged(IAction action, ISelection selection) {
fSelection = selection;
}
/* (non-Javadoc)
* @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
*/
@Override
public void run(IAction action) {
AddEventBreakpointDialog dlg = new AddEventBreakpointDialog(CDebugUIPlugin.getActiveWorkbenchShell());
if (dlg.isActive() == false) {
String message = ActionMessages.getString("AddEventBreakpointActionDelegate.2"); //$NON-NLS-1$
MessageDialog.openError( getView().getSite().getShell(), UIMessages.getString( "CDebugUIPlugin.0" ), message); //$NON-NLS-1$
} else {
if (dlg.open() == Window.OK) {
addEventBreakpoint(dlg.getEventTypeId(), dlg.getEventArgument());
}
}
IToggleBreakpointsTarget toggleTarget = DebugUITools.getToggleBreakpointsTargetManager().getToggleBreakpointsTarget(fPart, fSelection);
IToggleBreakpointsTargetCExtension cToggleTarget = null;
if (toggleTarget instanceof IToggleBreakpointsTargetCExtension) {
cToggleTarget = (IToggleBreakpointsTargetCExtension)toggleTarget;
} else {
cToggleTarget = fDefaultToggleTarget;
}
try {
cToggleTarget.createEventBreakpointsInteractive(fPart, fSelection);
} catch (CoreException e) {
CDebugUIPlugin.errorDialog( ActionMessages.getString("AddEventBreakpointActionDelegate.2"), e ); //$NON-NLS-1$
}
}
protected void addEventBreakpoint(String id, String arg) {
@ -80,4 +93,9 @@ public class AddEventBreakpointActionDelegate extends ActionDelegate implements
return ResourcesPlugin.getWorkspace().getRoot();
}
@Override
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
fPart = targetPart;
}
}

View file

@ -22,6 +22,7 @@ import org.eclipse.cdt.debug.core.cdi.model.ICDIMemorySpaceManagement;
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
import org.eclipse.cdt.debug.core.model.ICBreakpointType;
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
import org.eclipse.cdt.debug.core.model.ICEventBreakpoint;
import org.eclipse.cdt.debug.core.model.ICFunctionBreakpoint;
import org.eclipse.cdt.debug.core.model.ICLineBreakpoint;
import org.eclipse.cdt.debug.core.model.ICWatchpoint;
@ -94,10 +95,20 @@ public class ToggleBreakpointAdapter extends AbstractToggleBreakpointAdapter {
ICWatchpoint bp = CDIDebugModel.createBlankWatchpoint();
Map<String, Object> attributes = new HashMap<String, Object>();
CDIDebugModel.setWatchPointAttributes(attributes, sourceHandle, resource, true, false,
expression, memorySpace, new BigInteger(range), true, 0, ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
expression, memorySpace, new BigInteger(range), true, 0, ""); //$NON-NLS-1$
openBreakpointPropertiesDialog(bp, part, resource, attributes);
}
@Override
protected void createEventBreakpoint( boolean interactive, IWorkbenchPart part, IResource resource, String type,
String arg ) throws CoreException
{
ICEventBreakpoint bp = CDIDebugModel.createBlankEventBreakpoint();
Map<String, Object> attributes = new HashMap<String, Object>();
CDIDebugModel.setEventBreakpointAttributes(attributes,type, arg);
openBreakpointPropertiesDialog(bp, part, resource, attributes);
}
protected int getBreakpointType() {
return ICBreakpointType.REGULAR;
}

View file

@ -84,6 +84,19 @@ public class ToggleTracepointAdapter extends AbstractToggleBreakpointAdapter {
int charStart, int charEnd, int lineNumber, String expression, String memorySpace, String range) throws CoreException
{
}
@Override
public boolean canCreateEventBreakpointsInteractive(IWorkbenchPart part, ISelection selection) {
return false;
}
@Override
protected void createEventBreakpoint(boolean interactive, IWorkbenchPart part, IResource resource, String type,
String arg) throws CoreException {
}
protected int getBreakpointType() {
return ICBreakpointType.REGULAR;

View file

@ -38,5 +38,6 @@ CBreakpointPropertyPage.condition_invalidValue_message=Invalid condition.
CBreakpointPropertyPage.ignoreCount_label=&Ignore count:
CBreakpointPropertyPage.breakpointType_label=Class:
CBreakpointPropertyPage.enabled_label=Enabled
CBreakpointPropertyPage.eventType_label=Event Type
ThreadFilterEditor.0=&Restrict to Selected Targets and Threads:

View file

@ -12,16 +12,21 @@
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui.breakpoints;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.debug.core.CDIDebugModel;
import org.eclipse.cdt.debug.core.cdi.model.ICDIMemorySpaceManagement;
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
import org.eclipse.cdt.debug.core.model.ICAddressBreakpoint;
import org.eclipse.cdt.debug.core.model.ICBreakpoint;
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
import org.eclipse.cdt.debug.core.model.ICEventBreakpoint;
import org.eclipse.cdt.debug.core.model.ICFunctionBreakpoint;
import org.eclipse.cdt.debug.core.model.ICLineBreakpoint;
import org.eclipse.cdt.debug.core.model.ICWatchpoint;
import org.eclipse.cdt.debug.core.model.ICWatchpoint2;
import org.eclipse.cdt.debug.internal.core.breakpoints.CEventBreakpoint;
import org.eclipse.cdt.debug.internal.ui.preferences.ComboFieldEditor;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
import org.eclipse.cdt.debug.ui.breakpoints.CBreakpointUIContributionFactory;
@ -34,10 +39,12 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.model.IDebugElement;
import org.eclipse.debug.core.model.IDebugModelProvider;
import org.eclipse.debug.core.model.ILineBreakpoint;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.contexts.IDebugContextProvider;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
@ -49,8 +56,11 @@ import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
@ -63,6 +73,10 @@ import org.eclipse.ui.model.IWorkbenchAdapter;
*/
public class CBreakpointPropertyPage extends FieldEditorPreferencePage implements IWorkbenchPropertyPage {
private Composite fEventBPComposite;
private Composite fEventArgsComposite;
private List<FieldEditor> fEventArgsFEs = null;
class BreakpointIntegerFieldEditor extends IntegerFieldEditor {
public BreakpointIntegerFieldEditor( String name, String labelText, Composite parent ) {
@ -384,6 +398,16 @@ public class CBreakpointPropertyPage extends FieldEditorPreferencePage implement
return array2d;
}
private String[][] joinToArray2D(String[] labels, String[] values) {
String[][] array2d = new String[labels.length][];
for (int i = 0; i < labels.length; i++) {
array2d[i] = new String[2];
array2d[i][0] = labels[i];
array2d[i][1] = values[i];
}
return array2d;
}
private ICDIMemorySpaceManagement getMemorySpaceManagement(){
Object debugViewElement = getDebugContext();
ICDIMemorySpaceManagement memMgr = null;
@ -527,6 +551,9 @@ public class CBreakpointPropertyPage extends FieldEditorPreferencePage implement
createLineNumberEditor(getFieldEditorParent());
}
}
else if ( breakpoint instanceof CEventBreakpoint ) {
createEventBreakpointEditor( breakpoint, ICBreakpointsUIContribution.BREAKPOINT_LABELS);
}
}
private String getBreakpointMainLabel(ICBreakpoint breakpoint) {
@ -760,18 +787,77 @@ public class CBreakpointPropertyPage extends FieldEditorPreferencePage implement
fElement = element;
}
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;
}
private void createEventBreakpointEditor( ICBreakpoint breakpoint, String conMainElement) {
boolean bAddEventType = true;
Composite parent = getFieldEditorParent();
String[] debugModelIds = getDebugModelIds();
try {
ICBreakpointsUIContribution[] cons;
CBreakpointUIContributionFactory factory = CBreakpointUIContributionFactory.getInstance();
IPreferenceStore prefStore = getPreferenceStore();
if (prefStore instanceof CBreakpointPreferenceStore) {
cons = factory.getBreakpointUIContributions(
debugModelIds, breakpoint, ((CBreakpointPreferenceStore) prefStore).getAttributes());
} else {
cons = factory.getBreakpointUIContributions(breakpoint);
}
setupEventTypeFieldEditor(cons, breakpoint, conMainElement, parent);
for (ICBreakpointsUIContribution con : cons) {
if ( conMainElement.equals(con.getMainElement()) ) {
FieldEditor fieldEditor = null;
if (breakpoint.getMarker() == null && con.getId().equals(ICEventBreakpoint.EVENT_TYPE_ID)) {
continue;
}
else if (con.getMarkerType().equalsIgnoreCase(ICEventBreakpoint.C_EVENT_BREAKPOINT_MARKER)) {
if ( breakpoint.getMarker() == null ) {
setupArgsComposite(parent);
fieldEditor = con.getFieldEditor(con.getId(), con.getLabel() + ":", fEventArgsComposite); //$NON-NLS-1$
if ( fieldEditor != null ) {
addEditorToComposite(fieldEditor);
fEventArgsComposite.setVisible(true);
}
else {
fEventArgsComposite.setVisible(false);
}
}
else {
if (con.getId().equals(ICEventBreakpoint.EVENT_TYPE_ID)) {
if (bAddEventType == true) bAddEventType = false;
else continue;
}
fieldEditor = con.getFieldEditor(con.getId(), con.getLabel() + ":", parent); //$NON-NLS-1$
}
}
if (fieldEditor != null) {
addField(fieldEditor);
}
}
}
} catch (CoreException ce) {
CDebugUIPlugin.log(ce);
}
}
/**
* Creates field editors contributed using breakpointUIContribution extension point
*/
private void createContributedFieldEditors(ICBreakpoint breakpoint, String conMainElement) {
Composite parent = getFieldEditorParent();
String[] debugModelIds = CBreakpointUIContributionFactory.DEBUG_MODEL_IDS_DEFAULT;
IDebugModelProvider debugModelProvider = (IDebugModelProvider)DebugPlugin.getAdapter(
getDebugContext(), IDebugModelProvider.class);
if (debugModelProvider != null) {
debugModelIds = debugModelProvider.getModelIdentifiers();
}
String[] debugModelIds = getDebugModelIds();
try {
ICBreakpointsUIContribution[] cons;
CBreakpointUIContributionFactory factory = CBreakpointUIContributionFactory.getInstance();
@ -785,7 +871,10 @@ public class CBreakpointPropertyPage extends FieldEditorPreferencePage implement
for (ICBreakpointsUIContribution con : cons) {
if ( conMainElement.equals(con.getMainElement()) ) {
FieldEditor fieldEditor = con.getFieldEditor(con.getId(), con.getLabel() + ":", parent); //$NON-NLS-1$
if (con.getMarkerType().equals(ICEventBreakpoint.C_EVENT_BREAKPOINT_MARKER)) {
continue;
}
FieldEditor fieldEditor = con.getFieldEditor(con.getId(), con.getLabel() + ":", parent); //$NON-NLS-1$
if (fieldEditor != null) {
addField(fieldEditor);
}
@ -794,7 +883,159 @@ public class CBreakpointPropertyPage extends FieldEditorPreferencePage implement
} catch (CoreException ce) {
CDebugUIPlugin.log(ce);
}
}
private void setupEventTypeFieldEditor(ICBreakpointsUIContribution[] cons, ICBreakpoint breakpoint, String conMainElement, Composite parent) {
String id = null;
ArrayList<String> eventTypeValueList = new ArrayList<String>();
ArrayList<String> eventTypeLabelList = new ArrayList<String>();
// The filter of the debugModelIds should already be done.
for (ICBreakpointsUIContribution con : cons) {
if ( conMainElement.equals(con.getMainElement()) ) {
if (breakpoint instanceof CEventBreakpoint && breakpoint.getMarker() == null &&
con.getId().equals(ICEventBreakpoint.EVENT_TYPE_ID)) {
id = con.getId();
for (String value : con.getPossibleValues()) {
eventTypeValueList.add(value);
eventTypeLabelList.add(con.getLabelForValue(value));
}
}
}
}
if (eventTypeValueList.size() != 0) {
EventTypeFieldEditor fieldEditor = new EventTypeFieldEditor(
id,
BreakpointsMessages.getString("CBreakpointPropertyPage.eventType_label"), //$NON-NLS-1$
eventTypeLabelList.toArray(new String[eventTypeLabelList.size()]),
eventTypeValueList.toArray(new String[eventTypeValueList.size()]),
parent,
breakpoint);
addField(fieldEditor);
setupArgsComposite(parent);
fieldEditor.initializeComboBox(getPreferenceStore(), this);
}
}
void addEditorToComposite(FieldEditor fieldEditor) {
if (fEventArgsFEs == null) {
fEventArgsFEs = new ArrayList<FieldEditor>();
}
fEventArgsFEs.add(fieldEditor);
}
void cleanEditorsFromComposite() {
if (fEventArgsFEs != null) {
for (FieldEditor editor : fEventArgsFEs){
editor.setPreferenceStore(null);
editor.setPage(null);
}
}
}
void setupArgsComposite(Composite parent) {
if (fEventArgsComposite != null) {
cleanEditorsFromComposite();
fEventArgsComposite.dispose();
fEventArgsComposite = null;
}
if (fEventBPComposite == null || fEventBPComposite.isDisposed()) {
fEventBPComposite = new Composite(parent,SWT.NONE);
fEventBPComposite.setLayout(parent.getLayout());
fEventBPComposite.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
GridDataFactory.defaultsFor(fEventBPComposite).grab(true, false).span(2, 1).applyTo(fEventBPComposite);
}
fEventArgsComposite = new Composite(fEventBPComposite,SWT.NONE);
fEventArgsComposite.setLayout(fEventBPComposite.getLayout());
GridDataFactory.defaultsFor(fEventArgsComposite).grab(true, false).span(2, 1).applyTo(fEventArgsComposite);
GridData gridData = (GridData)fEventArgsComposite.getLayoutData();
gridData.horizontalIndent = 10;
fEventArgsComposite.setLayoutData(gridData);
fEventArgsComposite.setVisible(false);
}
private void displayEventArgs(ICBreakpoint breakpoint, Composite parent) {
boolean result = false;
String[] debugModelIds = getDebugModelIds();
try {
ICBreakpointsUIContribution[] cons;
CBreakpointUIContributionFactory factory = CBreakpointUIContributionFactory.getInstance();
IPreferenceStore prefStore = getPreferenceStore();
if (prefStore instanceof CBreakpointPreferenceStore) {
cons = factory.getBreakpointUIContributions(
debugModelIds, breakpoint, ((CBreakpointPreferenceStore) prefStore).getAttributes());
} else {
cons = factory.getBreakpointUIContributions(breakpoint);
}
for (ICBreakpointsUIContribution con : cons) {
if (con.getMarkerType().equalsIgnoreCase(ICEventBreakpoint.C_EVENT_BREAKPOINT_MARKER) &&
!con.getId().equals(ICEventBreakpoint.EVENT_TYPE_ID)) {
setupArgsComposite(parent);
FieldEditor fieldEditor = con.getFieldEditor(con.getId(), con.getLabel() + ":", fEventArgsComposite); //$NON-NLS-1$
if ( fieldEditor != null ) {
fieldEditor.setPreferenceStore(getPreferenceStore());
fieldEditor.setPage(this);
addEditorToComposite(fieldEditor);
addField(fieldEditor);
result = true;
}
}
}
} catch (CoreException ce) {
CDebugUIPlugin.log(ce);
}
if (fEventArgsComposite != null && !fEventArgsComposite.isDisposed()) {
fEventArgsComposite.setVisible(result);
fEventArgsComposite.layout();
fEventBPComposite.layout();
}
}
class EventTypeFieldEditor extends ComboFieldEditor {
final Combo fCombo;
final Composite fParent;
final ICBreakpoint fBreakpoint;
class EventTypeSelectionListener implements SelectionListener {
@Override
public void widgetSelected(SelectionEvent e) {
doStore();
displayEventArgs(fBreakpoint, fParent);
fParent.layout();
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
}
public EventTypeFieldEditor( String name, String labelText, String[] eventTypesLabels, String[] eventTypesValues, Composite parent, ICBreakpoint breakpoint ) {
super( name, labelText, joinToArray2D(eventTypesLabels,eventTypesValues), parent);
fBreakpoint = breakpoint;
fParent = parent;
fCombo = this.getComboBoxControl();
fCombo.select(0);
fCombo.addSelectionListener(new EventTypeSelectionListener());
}
public void initializeComboBox(IPreferenceStore prefStore, CBreakpointPropertyPage page) {
if (getPage() == null) {
setPage(page);
}
if (getPreferenceStore() == null) {
setPreferenceStore(prefStore);
}
else
prefStore = getPreferenceStore();
String value = getValueForName(fCombo.getText());
if (prefStore instanceof CBreakpointPreferenceStore) {
prefStore.setValue(ICEventBreakpoint.EVENT_TYPE_ID, value);
}
displayEventArgs(fBreakpoint, fParent);
}
}
}

View file

@ -213,6 +213,18 @@ abstract public class AbstractToggleBreakpointAdapter
createWatchpoint(true, part, null, ResourcesPlugin.getWorkspace().getRoot(), -1, -1, -1, text, null, "0"); //$NON-NLS-1$
}
@Override
public boolean canCreateEventBreakpointsInteractive(IWorkbenchPart part, ISelection selection) {
return true;
}
@Override
public void createEventBreakpointsInteractive(IWorkbenchPart part, ISelection selection) throws CoreException {
String type = ""; //$NON-NLS-1$
String arg = ""; //$NON-NLS-1$
createEventBreakpoint( true, part, ResourcesPlugin.getWorkspace().getRoot(), type, arg );
}
@Override
public boolean canCreateFunctionBreakpointInteractive(IWorkbenchPart part, ISelection selection) {
return true;
@ -909,5 +921,17 @@ abstract public class AbstractToggleBreakpointAdapter
protected abstract void createWatchpoint(boolean interactive, IWorkbenchPart part, String sourceHandle,
IResource resource, int charStart, int charEnd, int lineNumber, String expression, String memorySpace,
String range) throws CoreException;
/**
* Creates an event breakpoint of the given type.
* @param interactive true if action should open a dialog to let user edit
* breakpoint properties prior to creation.
* @param part Workbench part where action was invoked.
* @param resource Resource to create breakpoint on.
* @param type Type of event breakpoint.
* @param arg Arugment of event breakpoint.
* @throws CoreException Exception while creating breakpoint.
*/
protected abstract void createEventBreakpoint(boolean interactive, IWorkbenchPart part, IResource resource,
String type, String arg) throws CoreException;
}

View file

@ -50,7 +50,7 @@ public class CBreakpointUIContributionFactory {
* @throws CoreException if cannot get marker attributes from bearkpoint
*/
public ICBreakpointsUIContribution[] getBreakpointUIContributions(IBreakpoint breakpoint) throws CoreException {
String debugModelId = breakpoint.getModelIdentifier();
String debugModelId = null;
IMarker bmarker = breakpoint.getMarker();
Map<String, Object> attributes = Collections.emptyMap();
String markerType = CDIDebugModel.calculateMarkerType(breakpoint);
@ -104,7 +104,7 @@ public class CBreakpointUIContributionFactory {
Map<String, Object> attributes)
{
return getBreakpointUIContributions(
debugModelId != null ? new String[] { debugModelId } : DEBUG_MODEL_IDS_DEFAULT,
debugModelId != null ? new String[] { debugModelId } : null,
markerType,
attributes);
@ -127,13 +127,15 @@ public class CBreakpointUIContributionFactory {
public ICBreakpointsUIContribution[] getBreakpointUIContributions(String[] debugModelIds, String markerType,
Map<String, Object> attributes)
{
List<String> debugModelIdsList = Arrays.asList(debugModelIds);
List<String> debugModelIdsList = null;
if (debugModelIds != null ) {
debugModelIdsList = Arrays.asList(debugModelIds);
}
ArrayList<ICBreakpointsUIContribution> list = new ArrayList<ICBreakpointsUIContribution>();
for (ICBreakpointsUIContribution con : contributions) {
try {
if (con.getDebugModelId() == null ||
con.getDebugModelId().equals(CDIDebugModel.getPluginIdentifier()) ||
debugModelIdsList.contains(con.getDebugModelId()))
((debugModelIdsList == null || debugModelIdsList.contains(con.getDebugModelId()))))
{
String contributedMarkerType = con.getMarkerType();
if (isMarkerSubtypeOf(markerType, contributedMarkerType)) {

View file

@ -12,6 +12,8 @@
*******************************************************************************/
package org.eclipse.cdt.debug.ui.breakpoints;
import java.util.Arrays;
import org.eclipse.cdt.debug.core.DebugCoreMessages;
import org.eclipse.cdt.debug.core.model.ICBreakpoint;
import org.eclipse.cdt.debug.core.model.ICEventBreakpoint;
@ -47,8 +49,10 @@ public class CEventBreakpointsLabelProviderFactory implements IAdapterFactory {
for (ICBreakpointsUIContribution con : bscs) {
Object attValue = breakpoint.getMarker().getAttribute(con.getId());
if (con.getId().equals(ICEventBreakpoint.EVENT_TYPE_ID)) {
if (!Arrays.asList(con.getPossibleValues()).contains(attValue))
continue;
buffer.append(con.getLabelForValue((String) attValue));
continue;
}

View file

@ -130,4 +130,39 @@ public interface IToggleBreakpointsTargetCExtension extends IToggleBreakpointsTa
* @throws CoreException if unable to perform the action
*/
public void createFunctionBreakpointInteractive(IWorkbenchPart part, ISelection selection) throws CoreException;
/**
* Returns whether the toggle target can create an event breakpoint at the
* given location. If the implementation does not support creating the
* breakpoint interactively then it should return <code>false</code>.
* <p>
* The selection varies depending on the given part. For example,
* a text selection is provided for text editors, and a structured
* selection is provided for tree views, and may be a multi-selection.
* </p>
* @param part the part on which the action has been invoked
* @param selection selection on which line breakpoints should be toggled
* @return Returns <code>true</code> if toggle target is able interactively
* create a breakpoint(s) at the given location.
*/
public boolean canCreateEventBreakpointsInteractive(IWorkbenchPart part, ISelection selection);
/**
* Creates a new event breakpoint interactively. The implementation should
* allows the user to edit all of the breakpoint's settings prior to
* creating the breakpoint. Unlike the
* {@link #toggleLineBreakpoints(IWorkbenchPart, ISelection)}
* method, this method does not remove the existing breakpoint at given
* location. It always creates a new breakpoint
* <p>
* The selection varies depending on the given part. For example,
* a text selection is provided for text editors, and a structured
* selection is provided for tree views, and may be a multi-selection.
* </p>
* @param part the part on which the action has been invoked
* @param selection selection on which line breakpoints should be toggled
* @throws CoreException if unable to perform the action
*/
public void createEventBreakpointsInteractive(IWorkbenchPart part, ISelection selection) throws CoreException;
}

View file

@ -3,6 +3,7 @@
<plugin>
<extension point="org.eclipse.cdt.debug.ui.breakpointContribution">
<breakpointLabels
debugModelId="org.eclipse.cdt.debug.core"
markerType="org.eclipse.cdt.debug.core.cEventBreakpointMarker">
<attribute name="org.eclipse.cdt.debug.core.eventbreakpoint_event_id" label="%catchType.label" type="string">
<value

View file

@ -226,7 +226,21 @@ public abstract class AbstractDisassemblyBreakpointsTarget
@Override
public void createWatchpointsInteractive(IWorkbenchPart part, ISelection selection) throws CoreException {
}
/**
* @since 2.3
*/
@Override
public boolean canCreateEventBreakpointsInteractive(IWorkbenchPart part, ISelection selection) {
return false;
}
/**
* @since 2.3
*/
@Override
public void createEventBreakpointsInteractive(IWorkbenchPart part, ISelection selection) throws CoreException {
}
private void toggleBreakpointEnabled(IBreakpoint bp) {
try {