diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog
index b9020995a25..d35323ee061 100644
--- a/debug/org.eclipse.cdt.debug.core/ChangeLog
+++ b/debug/org.eclipse.cdt.debug.core/ChangeLog
@@ -1,3 +1,10 @@
+2004-10-07 Mikhail Khodjaiants
+ Provide a context for expression evaluation.
+ * ICValue.java
+ * AbstractCValue.java
+ * CArrayPartitionValue.java
+ * CValue.java
+
2004-10-06 Mikhail Khodjaiants
Added the "getType" method to ICValue.
* ICValue.java
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICValue.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICValue.java
index 08d840c2dfa..39f5edb9a7f 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICValue.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICValue.java
@@ -20,5 +20,5 @@ public interface ICValue extends IValue, ICDebugElement {
ICType getType() throws DebugException;
- String evaluateAsExpression();
+ String evaluateAsExpression( ICStackFrame frame );
}
\ No newline at end of file
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/AbstractCValue.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/AbstractCValue.java
index 63025cfadfe..f4dcc6034ec 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/AbstractCValue.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/AbstractCValue.java
@@ -10,7 +10,9 @@
***********************************************************************/
package org.eclipse.cdt.debug.internal.core.model;
+import org.eclipse.cdt.debug.core.model.ICStackFrame;
import org.eclipse.cdt.debug.core.model.ICValue;
+import org.eclipse.debug.core.DebugException;
/**
* The abstract super class for the C/C++ value types.
@@ -34,6 +36,25 @@ public abstract class AbstractCValue extends CDebugElement implements ICValue {
return fParent;
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.debug.core.model.ICValue#evaluateAsExpression(org.eclipse.cdt.debug.core.model.ICStackFrame)
+ */
+ public String evaluateAsExpression( ICStackFrame frame ) {
+ String valueString = null;
+ AbstractCVariable parent = getParentVariable();
+ if ( parent != null ) {
+ if ( frame != null && frame.canEvaluate() ) {
+ try {
+ valueString = frame.evaluateExpressionToString( parent.getExpressionString() );
+ }
+ catch( DebugException e ) {
+ valueString = e.getMessage();
+ }
+ }
+ }
+ return valueString;
+ }
+
abstract protected void setChanged( boolean changed );
abstract public void dispose();
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CArrayPartitionValue.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CArrayPartitionValue.java
index 0dac459c568..8e09a1c323b 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CArrayPartitionValue.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CArrayPartitionValue.java
@@ -15,7 +15,6 @@ import java.util.Iterator;
import java.util.List;
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
import org.eclipse.cdt.debug.core.model.ICDebugElementStatus;
-import org.eclipse.cdt.debug.core.model.ICStackFrame;
import org.eclipse.cdt.debug.core.model.ICType;
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
@@ -129,27 +128,13 @@ public class CArrayPartitionValue extends AbstractCValue {
}
}
- public String evaluateAsExpression() {
- String valueString = null;
- AbstractCVariable parent = getParentVariable();
- if ( parent != null ) {
- ICStackFrame frame = parent.getStackFrame();
- if ( frame != null && frame.canEvaluate() ) {
- try {
- valueString = frame.evaluateExpressionToString( parent.getExpressionString() );
- }
- catch( DebugException e ) {
- valueString = e.getMessage();
- }
- }
- }
- return valueString;
- }
-
protected ICDIVariable getCDIVariable() {
return fCDIVariable;
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.debug.internal.core.model.AbstractCValue#dispose()
+ */
public void dispose() {
Iterator it = fVariables.iterator();
while( it.hasNext() ) {
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java
index fdd5c0b5033..6931114cbfc 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java
@@ -16,7 +16,6 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
-
import org.eclipse.cdt.core.IAddress;
import org.eclipse.cdt.core.IAddressFactory;
import org.eclipse.cdt.debug.core.cdi.CDIException;
@@ -34,7 +33,6 @@ import org.eclipse.cdt.debug.core.cdi.model.type.ICDIShortValue;
import org.eclipse.cdt.debug.core.cdi.model.type.ICDIWCharValue;
import org.eclipse.cdt.debug.core.model.CVariableFormat;
import org.eclipse.cdt.debug.core.model.ICDebugElementStatus;
-import org.eclipse.cdt.debug.core.model.ICStackFrame;
import org.eclipse.cdt.debug.core.model.ICType;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IVariable;
@@ -181,6 +179,9 @@ public class CValue extends AbstractCValue {
}
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.debug.internal.core.model.AbstractCValue#dispose()
+ */
public void dispose() {
Iterator it = fVariables.iterator();
while( it.hasNext() ) {
@@ -424,26 +425,6 @@ public class CValue extends AbstractCValue {
return result;
}
- /* (non-Javadoc)
- * @see org.eclipse.cdt.debug.core.model.ICValue#evaluateAsExpression()
- */
- public String evaluateAsExpression() {
- String valueString = null;
- AbstractCVariable parent = getParentVariable();
- if ( parent != null ) {
- ICStackFrame frame = parent.getStackFrame();
- if ( frame != null && frame.canEvaluate() ) {
- try {
- valueString = frame.evaluateExpressionToString( parent.getExpressionString() );
- }
- catch( DebugException e ) {
- valueString = e.getMessage();
- }
- }
- }
- return valueString;
- }
-
/**
* Invalidates the string cache.
*/
diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog
index caa7f31b841..b03a1fd02ee 100644
--- a/debug/org.eclipse.cdt.debug.ui/ChangeLog
+++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog
@@ -1,3 +1,10 @@
+2004-10-07 Mikhail Khodjaiants
+ Provide a context for expression evaluation.
+ * CDebugUIUtils.java
+ * CDTDebugModelPresentation.java
+ * CDTValueDetailProvider.java renamed to CValueDetailProvider.java
+ * DebugTextHover.java
+
2004-10-06 Mikhail Khodjaiants
Use the same approach to generate expressions and variables labels.
* CDTDebugModelPresentation.java
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java
index 1e5bd3a808c..9f729f9ab3b 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java
@@ -133,7 +133,7 @@ public class CDTDebugModelPresentation extends LabelProvider implements IDebugMo
* @see org.eclipse.debug.ui.IDebugModelPresentation#computeDetail(IValue, IValueDetailListener)
*/
public void computeDetail( IValue value, IValueDetailListener listener ) {
- CDTValueDetailProvider.getDefault().computeDetail( value, listener );
+ CValueDetailProvider.getDefault().computeDetail( value, listener );
}
/*
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugUIUtils.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugUIUtils.java
index da18ac04286..b13c89c0b87 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugUIUtils.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugUIUtils.java
@@ -8,64 +8,47 @@
* Contributors:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
-
package org.eclipse.cdt.debug.internal.ui;
+import org.eclipse.cdt.debug.core.model.ICStackFrame;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.Region;
/**
- *
- * Enter type comment.
- *
- * @since Jul 30, 2002
+ * Utility methods for C/C++ Debug UI.
*/
-public class CDebugUIUtils
-{
+public class CDebugUIUtils {
-
- static public IRegion findWord( IDocument document, int offset )
- {
+ static public IRegion findWord( IDocument document, int offset ) {
int start = -1;
int end = -1;
-
- try
- {
+ try {
int pos = offset;
char c;
-
- while( pos >= 0 )
- {
+ while( pos >= 0 ) {
c = document.getChar( pos );
if ( !Character.isJavaIdentifierPart( c ) )
break;
--pos;
}
-
start = pos;
-
pos = offset;
int length = document.getLength();
-
- while( pos < length )
- {
+ while( pos < length ) {
c = document.getChar( pos );
if ( !Character.isJavaIdentifierPart( c ) )
break;
++pos;
}
-
end = pos;
-
- }
- catch( BadLocationException x )
- {
}
-
- if ( start > -1 && end > -1 )
- {
+ catch( BadLocationException x ) {
+ }
+ if ( start > -1 && end > -1 ) {
if ( start == offset && end == offset )
return new Region( offset, 0 );
else if ( start == offset )
@@ -73,7 +56,20 @@ public class CDebugUIUtils
else
return new Region( start + 1, end - start - 1 );
}
-
return null;
}
-}
+
+ /**
+ * Returns the currently selected stack frame or the topmost frame
+ * in the currently selected thread in the Debug view
+ * of the current workbench page. Returns null
+ * if no stack frame or thread is selected, or if not called from the UI thread.
+ *
+ * @return the currently selected stack frame or the topmost frame
+ * in the currently selected thread
+ */
+ static public ICStackFrame getCurrentStackFrame() {
+ IAdaptable context = DebugUITools.getDebugContext();
+ return ( context != null ) ? (ICStackFrame)context.getAdapter( ICStackFrame.class ) : null;
+ }
+}
\ No newline at end of file
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTValueDetailProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CValueDetailProvider.java
similarity index 57%
rename from debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTValueDetailProvider.java
rename to debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CValueDetailProvider.java
index e551a09a0da..26be3d30f6c 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTValueDetailProvider.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CValueDetailProvider.java
@@ -8,44 +8,40 @@
* Contributors:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
-
package org.eclipse.cdt.debug.internal.ui;
+import org.eclipse.cdt.debug.core.model.ICStackFrame;
import org.eclipse.cdt.debug.core.model.ICValue;
import org.eclipse.debug.core.model.IValue;
import org.eclipse.debug.ui.IValueDetailListener;
import org.eclipse.swt.widgets.Display;
/**
- * Enter type comment.
- *
- * @since Jun 4, 2003
+ * Computes a detailed description of the given value.
*/
-public class CDTValueDetailProvider
-{
- //The shared instance.
- private static CDTValueDetailProvider fInstance = null;
+public class CValueDetailProvider {
- public static CDTValueDetailProvider getDefault()
- {
- if ( fInstance == null )
- {
- fInstance = new CDTValueDetailProvider();
+ //The shared instance.
+ private static CValueDetailProvider fInstance = null;
+
+ public static CValueDetailProvider getDefault() {
+ if ( fInstance == null ) {
+ fInstance = new CValueDetailProvider();
}
return fInstance;
}
- public void computeDetail( final IValue value, final IValueDetailListener listener )
- {
- if ( value instanceof ICValue )
- {
- Display.getCurrent().asyncExec( new Runnable()
- {
- public void run()
- {
- listener.detailComputed( value, ((ICValue)value).evaluateAsExpression() );
- }
- } );
+ public void computeDetail( final IValue value, final IValueDetailListener listener ) {
+ if ( value instanceof ICValue ) {
+ final ICStackFrame frame = CDebugUIUtils.getCurrentStackFrame();
+ if ( frame != null ) {
+ Display.getCurrent().asyncExec( new Runnable() {
+
+ public void run() {
+ listener.detailComputed( value, ((ICValue)value).evaluateAsExpression( frame ) );
+ }
+ } );
+ }
}
}
-}
+}
\ No newline at end of file
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/DebugTextHover.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/DebugTextHover.java
index 566ad25fd18..4c14b1d4e2f 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/DebugTextHover.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/DebugTextHover.java
@@ -49,7 +49,9 @@ public class DebugTextHover implements ICEditorTextHover, ITextHoverExtension, I
super();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see org.eclipse.jface.text.ITextHover#getHoverInfo(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)
*/
public String getHoverInfo( ITextViewer textViewer, IRegion hoverRegion ) {
@@ -65,7 +67,7 @@ public class DebugTextHover implements ICEditorTextHover, ITextHoverExtension, I
expression = expression.trim();
if ( expression.length() == 0 )
return null;
- StringBuffer buffer= new StringBuffer();
+ StringBuffer buffer = new StringBuffer();
String result = evaluateExpression( frame, expression );
if ( result == null )
return null;
@@ -87,7 +89,9 @@ public class DebugTextHover implements ICEditorTextHover, ITextHoverExtension, I
return null;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see org.eclipse.jface.text.ITextHover#getHoverRegion(org.eclipse.jface.text.ITextViewer, int)
*/
public IRegion getHoverRegion( ITextViewer viewer, int offset ) {
@@ -119,12 +123,14 @@ public class DebugTextHover implements ICEditorTextHover, ITextHoverExtension, I
value = value.substring( 0, MAX_HOVER_INFO_SIZE ) + " ..."; //$NON-NLS-1$
buffer.append( "
" ); //$NON-NLS-1$ buffer.append( "
" ).append( expression ).append( "" ); //$NON-NLS-1$ //$NON-NLS-2$ - buffer.append( " =" ); //$NON-NLS-1$ + buffer.append( " = " ); //$NON-NLS-1$ buffer.append( "
" ).append( value ).append( "" ); //$NON-NLS-1$ //$NON-NLS-2$ buffer.append( "" ); //$NON-NLS-1$ } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.ui.text.c.hover.ICEditorTextHover#setEditor(org.eclipse.ui.IEditorPart) */ public void setEditor( IEditorPart editor ) { @@ -144,26 +150,34 @@ public class DebugTextHover implements ICEditorTextHover, ITextHoverExtension, I } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection) */ public void selectionChanged( IWorkbenchPart part, ISelection selection ) { fSelection = selection; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.ui.IPartListener#partActivated(org.eclipse.ui.IWorkbenchPart) */ public void partActivated( IWorkbenchPart part ) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.ui.IPartListener#partBroughtToTop(org.eclipse.ui.IWorkbenchPart) */ public void partBroughtToTop( IWorkbenchPart part ) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.ui.IPartListener#partClosed(org.eclipse.ui.IWorkbenchPart) */ public void partClosed( IWorkbenchPart part ) { @@ -176,13 +190,17 @@ public class DebugTextHover implements ICEditorTextHover, ITextHoverExtension, I } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.ui.IPartListener#partDeactivated(org.eclipse.ui.IWorkbenchPart) */ public void partDeactivated( IWorkbenchPart part ) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.ui.IPartListener#partOpened(org.eclipse.ui.IWorkbenchPart) */ public void partOpened( IWorkbenchPart part ) { @@ -206,7 +224,9 @@ public class DebugTextHover implements ICEditorTextHover, ITextHoverExtension, I return null; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.text.ITextHoverExtension#getHoverControlCreator() */ public IInformationControlCreator getHoverControlCreator() { @@ -214,36 +234,27 @@ public class DebugTextHover implements ICEditorTextHover, ITextHoverExtension, I } /** - * Replace any characters in the given String that would confuse an HTML - * parser with their escape sequences. + * Replace any characters in the given String that would confuse an HTML parser with their escape sequences. */ - private static String makeHTMLSafe( String string ) - { + private static String makeHTMLSafe( String string ) { StringBuffer buffer = new StringBuffer( string.length() ); - - for ( int i = 0; i != string.length(); i++ ) - { + for( int i = 0; i != string.length(); i++ ) { char ch = string.charAt( i ); - - switch( ch ) - { + switch( ch ) { case '&': buffer.append( "&" ); //$NON-NLS-1$ break; - case '<': buffer.append( "<" ); //$NON-NLS-1$ break; - case '>': buffer.append( ">" ); //$NON-NLS-1$ break; - default: buffer.append( ch ); break; } } - return buffer.toString(); + return buffer.toString(); } } \ No newline at end of file