diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/MessagesForVariablesVM.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/MessagesForVariablesVM.java index 14442ecf7b1..0b0ab78b489 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/MessagesForVariablesVM.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/MessagesForVariablesVM.java @@ -22,10 +22,10 @@ public class MessagesForVariablesVM extends NLS { public static String VariableColumnPresentation_name; public static String VariableColumnPresentation_type; public static String VariableColumnPresentation_value; - public static String VariableColumnPresentation_address; + public static String VariableColumnPresentation_location; - public static String VariableVMNode_Address_column__Error__text_format; - public static String VariableVMNode_Address_column__text_format; + public static String VariableVMNode_Location_column__Error__text_format; + public static String VariableVMNode_Location_column__text_format; public static String VariableVMNode_Description_column__text_format; public static String VariableVMNode_Expression_column__text_format; public static String VariableVMNode_Name_column__text_format; diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableColumnPresentation.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableColumnPresentation.java index fb208f38f86..30ad94afcc3 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableColumnPresentation.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableColumnPresentation.java @@ -42,7 +42,7 @@ public class VariableColumnPresentation implements IColumnPresentation { } else if (IDebugVMConstants.COLUMN_ID__VALUE.equals(id)) { return MessagesForVariablesVM.VariableColumnPresentation_value; } else if (IDebugVMConstants.COLUMN_ID__ADDRESS.equals(id)) { - return MessagesForVariablesVM.VariableColumnPresentation_address; + return MessagesForVariablesVM.VariableColumnPresentation_location; } return null; } diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java index 2ee2f2ef28e..dd7964f64a8 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java @@ -17,7 +17,6 @@ import java.util.List; import java.util.Map; import java.util.concurrent.RejectedExecutionException; -import org.eclipse.cdt.core.IAddress; import org.eclipse.cdt.debug.internal.ui.CDebugImages; import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor; import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor; @@ -36,6 +35,7 @@ import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionChangedDMEvent; import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMAddress; import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext; import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMData; +import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMLocation; import org.eclipse.cdt.dsf.debug.service.IMemory.IMemoryChangedEvent; import org.eclipse.cdt.dsf.debug.service.IRunControl.ISuspendedDMEvent; import org.eclipse.cdt.dsf.debug.service.IStack.IFrameDMContext; @@ -132,7 +132,7 @@ public class VariableVMNode extends AbstractExpressionVMNode * * @since 2.0 */ - private IElementLabelProvider fLabelProvider; + private final IElementLabelProvider fLabelProvider; public class VariableExpressionVMC extends DMVMContext implements IFormattedValueVMContext { @@ -375,9 +375,9 @@ public class VariableVMNode extends AbstractExpressionVMNode IDebugVMConstants.COLUMN_ID__ADDRESS, new LabelColumnInfo(new LabelAttribute[] { new LabelText( - MessagesForVariablesVM.VariableVMNode_Address_column__text_format, + MessagesForVariablesVM.VariableVMNode_Location_column__text_format, new String[] { PROP_VARIABLE_ADDRESS }), - new LabelText(MessagesForVariablesVM.VariableVMNode_Address_column__Error__text_format, new String[] {}), + new LabelText(MessagesForVariablesVM.VariableVMNode_Location_column__Error__text_format, new String[] {}), new LabelBackground( DebugUITools.getPreferenceColor(IDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB()) { @@ -706,9 +706,10 @@ public class VariableVMNode extends AbstractExpressionVMNode @ConfinedToDsfExecutor("getSession().getExecutor()") protected void fillAddressDataProperties(IPropertiesUpdate update, IExpressionDMAddress address) { - IExpressionDMAddress expression = address; - IAddress expAddress = expression.getAddress(); - update.setProperty(PROP_VARIABLE_ADDRESS, "0x" + expAddress.toString(16)); //$NON-NLS-1$ + if (address instanceof IExpressionDMLocation) + update.setProperty(PROP_VARIABLE_ADDRESS, ((IExpressionDMLocation)address).getLocation()); + else + update.setProperty(PROP_VARIABLE_ADDRESS, "0x" + address.getAddress().toString(16)); //$NON-NLS-1$ } public CellEditor getCellEditor(IPresentationContext context, String columnId, Object element, Composite parent) { diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/messages.properties b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/messages.properties index c957a6e9dec..ae1f44cfe5b 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/messages.properties +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/messages.properties @@ -7,16 +7,17 @@ # # Contributors: # Wind River Systems - initial API and implementation -# Wind River Systems - added Address +# Wind River Systems - added Location +# Wind River Systems - changed Location to Location ############################################################################### VariableColumnPresentation_name=Name VariableColumnPresentation_type=Type VariableColumnPresentation_value=Value -VariableColumnPresentation_address=Address +VariableColumnPresentation_location=Location -VariableVMNode_Address_column__Error__text_format= -VariableVMNode_Address_column__text_format={0} +VariableVMNode_Location_column__Error__text_format= +VariableVMNode_Location_column__text_format={0} VariableVMNode_Description_column__text_format= VariableVMNode_Expression_column__text_format={0} VariableVMNode_Name_column__text_format={0} diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions.java index 293cc20f2f6..3ccb9a640e7 100644 --- a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions.java +++ b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions.java @@ -11,6 +11,7 @@ *******************************************************************************/ package org.eclipse.cdt.dsf.debug.service; +import java.math.BigInteger; import java.util.Map; import org.eclipse.cdt.core.IAddress; @@ -41,14 +42,61 @@ public interface IExpressions extends IFormattedValues { */ String getExpression(); } - + + /** * The address and size of an expression. */ public interface IExpressionDMAddress { + + /** + * Returns the address of the expression. + */ IAddress getAddress(); + + /** + * Returns the size of the address. + */ int getSize(); } + + /** + * A representation of an expression location that does not correspond to + * an address. + * + * @since 2.1 + */ + public interface IExpressionDMLocation extends IExpressionDMAddress { + + /** + * A constant that can be returned by {@link IExpressionDMAddress#getAddress()} + * to represent an invalid address. Implementations of + * IExpressionDMLocation can return this constant if no + * valid address can be returned for a given expression location. + */ + public static final IAddress INVALID_ADDRESS = new IAddress() { + public IAddress add(BigInteger offset) { return this; } + public IAddress add(long offset) { return this; } + public BigInteger getMaxOffset() { return BigInteger.ZERO; } + public BigInteger distanceTo(IAddress other) { return BigInteger.ZERO; } + public BigInteger getValue() { return BigInteger.ZERO; } + public boolean isZero() { return false; } + public boolean isMax() { return false; } + public String toString(int radix) { return "INVALID"; } + public String toHexAddressString() { return toString(); } + public String toBinaryAddressString() { return toString(); } + public int getCharsNum() { return 0; } + public int getSize() { return 0; } + public int compareTo(Object o) { return 0; } + }; + + /** + * Returns a string representation of the expression location. + */ + public String getLocation(); + } + + /** * This is the model data interface that corresponds to IExpressionDMContext. @@ -140,7 +188,9 @@ public interface IExpressions extends IFormattedValues { /** * Retrieves the address and size of an expression given by the expression context(dmc). * Non-lvalues do not have an addresses (e.g., "x + 5"). When the expression -- * has no address, the data request monitor will contain null. +- * has no address, the request monitor will have an error with code + * IDsfStatusConstants.REQUEST_FAILED and the data request + * monitor will contain null. * * @param dmc * The ExpressionDMC for the expression