diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java index ec820aa1d9d..cea76c1fd29 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java @@ -12,6 +12,7 @@ import java.util.HashMap; import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.ICDILocation; import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint; +import org.eclipse.cdt.debug.core.cdi.model.ICDIExpression; import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; import org.eclipse.cdt.debug.internal.core.breakpoints.CLineBreakpoint; import org.eclipse.cdt.debug.internal.core.breakpoints.CWatchpoint; @@ -24,12 +25,15 @@ import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.IBreakpointManager; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.model.IBreakpoint; import org.eclipse.debug.core.model.IDebugTarget; +import org.eclipse.debug.core.model.IExpression; import org.eclipse.debug.core.model.IProcess; /** @@ -275,4 +279,24 @@ public class CDebugModel attributes.put( ICWatchpoint.WRITE, new Boolean( writeAccess ) ); return new CWatchpoint( resource, attributes, add ); } + + public static IExpression createExpression( IDebugTarget target, String text ) throws DebugException + { + if ( target != null && target instanceof CDebugTarget ) + { + try + { + ICDIExpression cdiExpression = ((CDebugTarget)target).getCDISession().getExpressionManager().createExpression( text ); + } + catch( CDIException e ) + { + throw new DebugException( new Status( IStatus.ERROR, + getPluginIdentifier(), + DebugException.TARGET_REQUEST_FAILED, + "Create expression failed.", + e ) ); + } + } + return null; + } } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java index df1ef841d8a..2254739e126 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java @@ -59,10 +59,12 @@ import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.IBreakpointManager; +import org.eclipse.debug.core.IExpressionListener; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchListener; import org.eclipse.debug.core.model.IBreakpoint; import org.eclipse.debug.core.model.IDebugTarget; +import org.eclipse.debug.core.model.IExpression; import org.eclipse.debug.core.model.IMemoryBlock; import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.core.model.IRegisterGroup; @@ -81,6 +83,7 @@ public class CDebugTarget extends CDebugElement IFormattedMemoryRetrieval, IState, ILaunchListener, + IExpressionListener, ICExpressionEvaluator { /** @@ -1656,4 +1659,25 @@ public class CDebugTarget extends CDebugElement ((CRegisterGroup)it.next()).preserve(); } } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.IExpressionListener#expressionAdded(IExpression) + */ + public void expressionAdded( IExpression expression ) + { + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.IExpressionListener#expressionChanged(IExpression) + */ + public void expressionChanged( IExpression expression ) + { + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.IExpressionListener#expressionRemoved(IExpression) + */ + public void expressionRemoved( IExpression expression ) + { + } } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CExpression.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CExpression.java new file mode 100644 index 00000000000..f61d7f1cc77 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CExpression.java @@ -0,0 +1,69 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.core.model; + +import org.eclipse.cdt.debug.core.ICValue; +import org.eclipse.cdt.debug.core.cdi.CDIException; +import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent; +import org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener; +import org.eclipse.cdt.debug.core.cdi.model.ICDIExpression; +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.model.IExpression; +import org.eclipse.debug.core.model.IValue; + +/** + * + * Enter type comment. + * + * @since Sep 17, 2002 + */ +public class CExpression extends CVariable + implements IExpression +{ + /** + * Constructor for CExpression. + * @param target + */ + public CExpression( CDebugTarget target, ICDIExpression cdiExpression ) + { + super( target, cdiExpression ); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IExpression#getExpressionText() + */ + public String getExpressionText() + { + try + { + return getName(); + } + catch( DebugException e ) + { + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IExpression#getValue() + */ + public IValue getValue() + { + try + { + return super.getValue(); + } + catch( DebugException e ) + { + } + return null; + } + + public void dispose() + { + super.dispose(); + } +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValueFactory.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValueFactory.java index a1c74115cb1..478cac1de93 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValueFactory.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValueFactory.java @@ -12,16 +12,12 @@ import org.eclipse.debug.core.DebugException; /** * - * Generates variable values. + * Generates values for variable and expressions. * * @since Sep 9, 2002 */ public class CValueFactory { - /** - * Creates the appropriate kind of value, or null. - * - */ static public ICValue createValue( CVariable parent, ICDIValue cdiValue ) throws DebugException { return new CValue( parent, cdiValue ); diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/expression_obj.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/expression_obj.gif new file mode 100644 index 00000000000..870df5c473a Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/expression_obj.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties index 6f7c42e970e..4fcf1584e41 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.properties +++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties @@ -24,4 +24,5 @@ EnableBreakpoint.label=T&oggle Breakpoint BreakpointProperties.label=Breakpoint P&roperties... ManageBreakpointAction.label=Add/Remove C/C++ Brea&kpoint BreakpointPropertiesAction.label=P&roperties... -ManageWatchpointAction.label=Add C/C++ &Watchpoint +ManageWatchpointAction.label=Add C/C++ &Watchpoint... +AddExpressionAction.label=Add C/C++ &Expression... diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml index 8bbe13f6595..0da2046c5c3 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.xml +++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml @@ -95,6 +95,14 @@ name="cBreakpointGroup"> + + + + + + + + + + 0 ); + } + + private void storeData() + { + fExpression = fTextExpression.getText().trim(); + } + + private void addModifyListener( Text text ) + { + text.addModifyListener( + new ModifyListener() + { + public void modifyText( ModifyEvent e ) + { + setOkButtonState(); + } + } ); + } + + public String getExpression() + { + return fExpression; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.dialogs.Dialog#okPressed() + */ + protected void okPressed() + { + storeData(); + super.okPressed(); + } +}