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">
+