1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bugzilla 247752. Adds "Address" column support to Variables/Expressions view.

This commit is contained in:
Randy Rohrbach 2008-09-17 02:51:49 +00:00
parent 97c4e5d095
commit 440f96fa1a
8 changed files with 203 additions and 55 deletions

View file

@ -20,6 +20,7 @@ public interface IDebugVMConstants {
public static final String COLUMN_ID__NAME = DsfDebugUIPlugin.PLUGIN_ID + ".COLUMN_ID__NAME"; //$NON-NLS-1$ public static final String COLUMN_ID__NAME = DsfDebugUIPlugin.PLUGIN_ID + ".COLUMN_ID__NAME"; //$NON-NLS-1$
public static final String COLUMN_ID__TYPE = DsfDebugUIPlugin.PLUGIN_ID + ".COLUMN_ID__TYPE"; //$NON-NLS-1$ public static final String COLUMN_ID__TYPE = DsfDebugUIPlugin.PLUGIN_ID + ".COLUMN_ID__TYPE"; //$NON-NLS-1$
public static final String COLUMN_ID__VALUE = DsfDebugUIPlugin.PLUGIN_ID + ".COLUMN_ID__VALUE"; //$NON-NLS-1$ public static final String COLUMN_ID__VALUE = DsfDebugUIPlugin.PLUGIN_ID + ".COLUMN_ID__VALUE"; //$NON-NLS-1$
public static final String COLUMN_ID__ADDRESS = DsfDebugUIPlugin.PLUGIN_ID + ".COLUMN_ID__ADDRESS"; //$NON-NLS-1$
public static final String COLUMN_ID__DESCRIPTION = DsfDebugUIPlugin.PLUGIN_ID + ".COLUMN_ID__DESCRIPTION"; //$NON-NLS-1$ public static final String COLUMN_ID__DESCRIPTION = DsfDebugUIPlugin.PLUGIN_ID + ".COLUMN_ID__DESCRIPTION"; //$NON-NLS-1$
public static final String COLUMN_ID__EXPRESSION = DsfDebugUIPlugin.PLUGIN_ID + ".COLUMN_ID__EXPRESSION"; //$NON-NLS-1$ public static final String COLUMN_ID__EXPRESSION = DsfDebugUIPlugin.PLUGIN_ID + ".COLUMN_ID__EXPRESSION"; //$NON-NLS-1$

View file

@ -32,7 +32,7 @@ public class ExpressionColumnPresentation implements IColumnPresentation {
// @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#getAvailableColumns() // @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#getAvailableColumns()
public String[] getAvailableColumns() { public String[] getAvailableColumns() {
return new String[] { IDebugVMConstants.COLUMN_ID__EXPRESSION, IDebugVMConstants.COLUMN_ID__NAME, IDebugVMConstants.COLUMN_ID__TYPE, IDebugVMConstants.COLUMN_ID__VALUE, IDebugVMConstants.COLUMN_ID__DESCRIPTION, }; return new String[] { IDebugVMConstants.COLUMN_ID__EXPRESSION, IDebugVMConstants.COLUMN_ID__NAME, IDebugVMConstants.COLUMN_ID__TYPE, IDebugVMConstants.COLUMN_ID__VALUE, IDebugVMConstants.COLUMN_ID__DESCRIPTION, IDebugVMConstants.COLUMN_ID__ADDRESS };
} }
// @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#getHeader(java.lang.String) // @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#getHeader(java.lang.String)
@ -47,6 +47,8 @@ public class ExpressionColumnPresentation implements IColumnPresentation {
return MessagesForExpressionVM.ExpressionColumnPresentation_value; return MessagesForExpressionVM.ExpressionColumnPresentation_value;
} else if (IDebugVMConstants.COLUMN_ID__DESCRIPTION.equals(id)) { } else if (IDebugVMConstants.COLUMN_ID__DESCRIPTION.equals(id)) {
return MessagesForExpressionVM.ExpressionColumnPresentation_description; return MessagesForExpressionVM.ExpressionColumnPresentation_description;
} else if (IDebugVMConstants.COLUMN_ID__ADDRESS.equals(id)) {
return MessagesForExpressionVM.ExpressionColumnPresentation_address;
} }
return null; return null;
} }

View file

@ -19,6 +19,7 @@ public class MessagesForExpressionVM extends NLS {
public static String ExpressionColumnPresentation_name; public static String ExpressionColumnPresentation_name;
public static String ExpressionColumnPresentation_type; public static String ExpressionColumnPresentation_type;
public static String ExpressionColumnPresentation_value; public static String ExpressionColumnPresentation_value;
public static String ExpressionColumnPresentation_address;
public static String ExpressionColumnPresentation_description; public static String ExpressionColumnPresentation_description;
public static String ExpressionManagerLayoutNode__invalidExpression_nameColumn_label; public static String ExpressionManagerLayoutNode__invalidExpression_nameColumn_label;

View file

@ -7,12 +7,14 @@
# #
# Contributors: # Contributors:
# Wind River Systems - initial API and implementation # Wind River Systems - initial API and implementation
# Wind River Systems - added Address
############################################################################### ###############################################################################
ExpressionColumnPresentation_expression=Expression ExpressionColumnPresentation_expression=Expression
ExpressionColumnPresentation_name=Name ExpressionColumnPresentation_name=Name
ExpressionColumnPresentation_type=Type ExpressionColumnPresentation_type=Type
ExpressionColumnPresentation_value=Value ExpressionColumnPresentation_value=Value
ExpressionColumnPresentation_address=Address
ExpressionColumnPresentation_description=Description ExpressionColumnPresentation_description=Description
ExpressionManagerLayoutNode__invalidExpression_nameColumn_label=Invalid expression ExpressionManagerLayoutNode__invalidExpression_nameColumn_label=Invalid expression
ExpressionManagerLayoutNode__invalidExpression_valueColumn_label=Invalid expression ExpressionManagerLayoutNode__invalidExpression_valueColumn_label=Invalid expression

View file

@ -21,6 +21,8 @@ public class MessagesForVariablesVM extends NLS {
public static String VariableColumnPresentation_type; public static String VariableColumnPresentation_type;
public static String VariableColumnPresentation_value; public static String VariableColumnPresentation_value;
public static String VariableColumnPresentation_address;
static { static {
// initialize resource bundle // initialize resource bundle

View file

@ -31,7 +31,7 @@ public class VariableColumnPresentation implements IColumnPresentation {
// @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#getAvailableColumns() // @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#getAvailableColumns()
public String[] getAvailableColumns() { public String[] getAvailableColumns() {
return new String[] { IDebugVMConstants.COLUMN_ID__NAME, IDebugVMConstants.COLUMN_ID__TYPE, IDebugVMConstants.COLUMN_ID__VALUE }; return new String[] { IDebugVMConstants.COLUMN_ID__NAME, IDebugVMConstants.COLUMN_ID__TYPE, IDebugVMConstants.COLUMN_ID__VALUE, IDebugVMConstants.COLUMN_ID__ADDRESS };
} }
// @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#getHeader(java.lang.String) // @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#getHeader(java.lang.String)
@ -42,6 +42,8 @@ public class VariableColumnPresentation implements IColumnPresentation {
return MessagesForVariablesVM.VariableColumnPresentation_type; return MessagesForVariablesVM.VariableColumnPresentation_type;
} else if (IDebugVMConstants.COLUMN_ID__VALUE.equals(id)) { } else if (IDebugVMConstants.COLUMN_ID__VALUE.equals(id)) {
return MessagesForVariablesVM.VariableColumnPresentation_value; return MessagesForVariablesVM.VariableColumnPresentation_value;
} else if (IDebugVMConstants.COLUMN_ID__ADDRESS.equals(id)) {
return MessagesForVariablesVM.VariableColumnPresentation_address;
} }
return null; return null;
} }

View file

@ -15,6 +15,9 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.RejectedExecutionException;
import org.eclipse.cdt.core.IAddress;
import org.eclipse.cdt.utils.Addr32;
import org.eclipse.cdt.utils.Addr64;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Status;
@ -36,6 +39,7 @@ import org.eclipse.dd.dsf.debug.service.IExpressions;
import org.eclipse.dd.dsf.debug.service.IFormattedValues; import org.eclipse.dd.dsf.debug.service.IFormattedValues;
import org.eclipse.dd.dsf.debug.service.IStack; import org.eclipse.dd.dsf.debug.service.IStack;
import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionChangedDMEvent; import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionChangedDMEvent;
import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionDMAddress;
import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionDMContext; import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionDMContext;
import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionDMData; import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionDMData;
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMContext; import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
@ -180,13 +184,44 @@ public class VariableVMNode extends AbstractExpressionVMNode
} }
} }
private void fillInExpressionErrorInfo( ILabelUpdate update, IExpressionDMContext dmc, IStatus status ) {
/*
* Instead of just failing this outright we are going to attempt to do more here.
* Failing it outright causes the view to display ... for all columns in the line
* and this is uninformative about what is happening. It will be very common that
* one or more variables at that given instance in time are not evaluatable. They
* may be out of scope and will come back into scope later.
*/
String[] localColumns = update.getColumnIds();
if (localColumns == null)
localColumns = new String[] { IDebugVMConstants.COLUMN_ID__NAME };
for (int idx = 0; idx < localColumns.length; idx++) {
if (IDebugVMConstants.COLUMN_ID__NAME.equals(localColumns[idx])) {
update.setLabel(dmc.getExpression(), idx);
} else if (IDebugVMConstants.COLUMN_ID__TYPE.equals(localColumns[idx])) {
update.setLabel("", idx);
} else if (IDebugVMConstants.COLUMN_ID__VALUE.equals(localColumns[idx])) {
update.setLabel("Error : " + status.getMessage(), idx);
} else if (IDebugVMConstants.COLUMN_ID__ADDRESS.equals(localColumns[idx])) {
update.setLabel("", idx);
} else if (IDebugVMConstants.COLUMN_ID__DESCRIPTION.equals(localColumns[idx])) {
update.setLabel("", idx);
} else if (IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(localColumns[idx])) {
update.setLabel(dmc.getExpression(), idx);
} else {
update.setLabel("", idx);
}
update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], idx);
}
}
protected void updateLabelInSessionThread(ILabelUpdate[] updates) { protected void updateLabelInSessionThread(ILabelUpdate[] updates) {
for (final ILabelUpdate update : updates) { for (final ILabelUpdate update : updates) {
final IExpressionDMContext dmc = findDmcInPath(update.getViewerInput(), update.getElementPath(), IExpressions.IExpressionDMContext.class); final IExpressionDMContext dmc = findDmcInPath(update.getViewerInput(), update.getElementPath(), IExpressions.IExpressionDMContext.class);
if ( dmc == null ) { if ( dmc == null ) {
// Workaround for a bug in platform, where the find operation may use wrong label provider. // Workaround for a bug in platform, where the find operation may use wrong label provider.
// See bug 246618. // See bug 246618.
@ -208,32 +243,8 @@ public class VariableVMNode extends AbstractExpressionVMNode
assert getStatus().isOK() || assert getStatus().isOK() ||
getStatus().getCode() != IDsfStatusConstants.INTERNAL_ERROR || getStatus().getCode() != IDsfStatusConstants.INTERNAL_ERROR ||
getStatus().getCode() != IDsfStatusConstants.NOT_SUPPORTED; getStatus().getCode() != IDsfStatusConstants.NOT_SUPPORTED;
/*
* Instead of just failing this outright we are going to attempt to do more here. fillInExpressionErrorInfo( update, dmc, getStatus() );
* Failing it outright causes the view to display ... for all columns in the line
* and this is uninformative about what is happening. It will be very common that
* one or more variables at that given instance in time are not evaluatable. They
* may be out of scope and will come back into scope later.
*/
String[] localColumns = update.getColumnIds();
if (localColumns == null)
localColumns = new String[] { IDebugVMConstants.COLUMN_ID__NAME };
for (int idx = 0; idx < localColumns.length; idx++) {
if (IDebugVMConstants.COLUMN_ID__NAME.equals(localColumns[idx])) {
update.setLabel(dmc.getExpression(), idx);
} else if (IDebugVMConstants.COLUMN_ID__TYPE.equals(localColumns[idx])) {
update.setLabel("", idx);
} else if (IDebugVMConstants.COLUMN_ID__VALUE.equals(localColumns[idx])) {
update.setLabel("Error : " + getStatus().getMessage(), idx);
} else if (IDebugVMConstants.COLUMN_ID__DESCRIPTION.equals(localColumns[idx])) {
update.setLabel("", idx);
} else if (IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(localColumns[idx])) {
update.setLabel(dmc.getExpression(), idx);
}
update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], idx);
}
update.done(); update.done();
return; return;
@ -249,6 +260,7 @@ public class VariableVMNode extends AbstractExpressionVMNode
localColumns = new String[] { IDebugVMConstants.COLUMN_ID__NAME }; localColumns = new String[] { IDebugVMConstants.COLUMN_ID__NAME };
boolean weAreExtractingFormattedData = false; boolean weAreExtractingFormattedData = false;
boolean weAreExtractingAddressData = false;
for (int idx = 0; idx < localColumns.length; idx++) { for (int idx = 0; idx < localColumns.length; idx++) {
if (IDebugVMConstants.COLUMN_ID__NAME.equals(localColumns[idx])) { if (IDebugVMConstants.COLUMN_ID__NAME.equals(localColumns[idx])) {
@ -257,6 +269,8 @@ public class VariableVMNode extends AbstractExpressionVMNode
update.setLabel(getData().getTypeName(), idx); update.setLabel(getData().getTypeName(), idx);
} else if (IDebugVMConstants.COLUMN_ID__VALUE.equals(localColumns[idx])) { } else if (IDebugVMConstants.COLUMN_ID__VALUE.equals(localColumns[idx])) {
weAreExtractingFormattedData = true; weAreExtractingFormattedData = true;
} else if (IDebugVMConstants.COLUMN_ID__ADDRESS.equals(localColumns[idx])) {
weAreExtractingAddressData = true;
} else if (IDebugVMConstants.COLUMN_ID__DESCRIPTION.equals(localColumns[idx])) { } else if (IDebugVMConstants.COLUMN_ID__DESCRIPTION.equals(localColumns[idx])) {
update.setLabel("", idx); update.setLabel("", idx);
} else if (IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(localColumns[idx])) { } else if (IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(localColumns[idx])) {
@ -271,20 +285,86 @@ public class VariableVMNode extends AbstractExpressionVMNode
update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], idx); update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], idx);
} }
if ( ! weAreExtractingFormattedData ) { if ( ! weAreExtractingFormattedData && ! weAreExtractingAddressData ) {
update.done(); update.done();
} else { } else {
boolean found = false; /*
for (int idx = 0; idx < localColumns.length; idx++) { * We are either updating the value or the address or possibly both.
if (IDebugVMConstants.COLUMN_ID__VALUE.equals(localColumns[idx])) { * We will create a overarching monitor to handle completing the update
found = true; * when either/both of the lower level updates are done.
updateFormattedExpressionValue(update, idx, dmc, getData()); */
break; final DsfExecutor dsfExecutor = getSession().getExecutor();
}
} final MultiRequestMonitor<RequestMonitor> mrm =
if (!found) { new MultiRequestMonitor<RequestMonitor>(dsfExecutor, null) {
update.done(); @Override
} public void handleCompleted() {
// Now that all the calls to getModelData() are complete, we create an
// IExpressionDMContext object for each local variable name, saving them all
// in an array.
if (!isSuccess()) {
handleFailedUpdate(update);
return;
}
update.done();
}
};
/*
* Deal with the value.
*/
if ( weAreExtractingFormattedData ) {
boolean found = false;
for (int idx = 0; idx < localColumns.length; idx++) {
if (IDebugVMConstants.COLUMN_ID__VALUE.equals(localColumns[idx])) {
found = true;
RequestMonitor rm =
new RequestMonitor(dsfExecutor, null) {
@Override
public void handleCompleted() {
mrm.requestMonitorDone(this);
}
};
mrm.add(rm);
updateFormattedExpressionValue(update, idx, dmc, getData(),rm);
break;
}
}
if (!found && ! weAreExtractingAddressData) {
update.done();
}
}
/*
* Deal with the address.
*/
if ( weAreExtractingAddressData ) {
boolean found = false;
for (int idx = 0; idx < localColumns.length; idx++) {
if (IDebugVMConstants.COLUMN_ID__ADDRESS.equals(localColumns[idx])) {
found = true;
RequestMonitor rm =
new RequestMonitor(dsfExecutor, null) {
@Override
public void handleCompleted() {
mrm.requestMonitorDone(this);
}
};
mrm.add(rm);
updateAddressData(update, idx, dmc, rm);
break;
}
}
if (!found && ! weAreExtractingFormattedData) {
update.done();
}
}
} }
} }
}, },
@ -297,8 +377,66 @@ public class VariableVMNode extends AbstractExpressionVMNode
* Private data access routine which performs the extra level of data access needed to * Private data access routine which performs the extra level of data access needed to
* get the formatted data value for a specific register. * get the formatted data value for a specific register.
*/ */
private void updateFormattedExpressionValue(final ILabelUpdate update, final int labelIndex, private void updateAddressData(final ILabelUpdate update,
final IExpressionDMContext dmc, final IExpressionDMData expressionDMData) final int labelIndex,
final IExpressionDMContext dmc,
final RequestMonitor monitor)
{
/*
* First select the format to be used. This involves checking so see that the preference
* page format is supported by the register service. If the format is not supported then
* we will pick the first available format.
*/
final IExpressions expressionService = getServicesTracker().getService(IExpressions.class);
// Get the variable information and update the corresponding memory locations
if (expressionService != null) {
expressionService.getExpressionAddressData(dmc,
new DataRequestMonitor<IExpressionDMAddress>(getExecutor(), monitor) {
@Override
protected void handleCompleted() {
if ( isSuccess() ) {
// Figure out which memory area was modified
IExpressionDMAddress expression = getData();
IAddress expAddress = expression.getAddress();
if (expAddress instanceof Addr64) {
update.setLabel( ((Addr64) expAddress).toHexAddressString(), labelIndex);
}
else if (expAddress instanceof Addr32) {
update.setLabel( ((Addr32) expAddress).toHexAddressString(), labelIndex);
}
else {
update.setLabel( "Unknown address format", labelIndex);
}
}
else {
/*
* We could not get the format. Currently GDB does not handle getting the address of
* a constant for example. We could put the error message in, but that would not be
* all that helpful top the user. The interface is a new one and perhaps failing to
* return a valid set of information is just saying it does not exist. Anyway, for
* now we will just put nothing in.
*/
update.setLabel( "", labelIndex);
}
update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], labelIndex);
monitor.done();
}
}
);
}
}
/**
* Private data access routine which performs the extra level of data access needed to
* get the formatted data value for a specific register.
*/
private void updateFormattedExpressionValue(final ILabelUpdate update,
final int labelIndex,
final IExpressionDMContext dmc,
final IExpressionDMData expressionDMData,
final RequestMonitor monitor)
{ {
final IExpressions expressionService = getServicesTracker().getService(IExpressions.class); final IExpressions expressionService = getServicesTracker().getService(IExpressions.class);
/* /*
@ -306,18 +444,17 @@ public class VariableVMNode extends AbstractExpressionVMNode
* page format is supported by the register service. If the format is not supported then * page format is supported by the register service. If the format is not supported then
* we will pick the first available format. * we will pick the first available format.
*/ */
final IPresentationContext context = update.getPresentationContext(); final IPresentationContext context = update.getPresentationContext();
final String preferencePageFormatId = fFormattedPrefStore.getCurrentNumericFormat(context) ; final String preferencePageFormatId = fFormattedPrefStore.getCurrentNumericFormat(context) ;
expressionService.getAvailableFormats( expressionService.getAvailableFormats(
dmc, dmc,
new ViewerDataRequestMonitor<String[]>(getSession().getExecutor(), update) { new DataRequestMonitor<String[]>(getSession().getExecutor(), monitor) {
@Override @Override
public void handleCompleted() { public void handleCompleted() {
if (!isSuccess()) { if (!isSuccess()) {
update.setLabel("Format information not available", labelIndex); monitor.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "Format information not available", null));
update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], labelIndex); monitor.done();
update.done();
return; return;
} }
@ -349,7 +486,8 @@ public class VariableVMNode extends AbstractExpressionVMNode
else { else {
// Expression service does not support any format. // Expression service does not support any format.
handleFailedUpdate(update); monitor.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "Service does not support any formats", null));
monitor.done();
return; return;
} }
} }
@ -363,13 +501,12 @@ public class VariableVMNode extends AbstractExpressionVMNode
VariableVMNode.this, update, VariableVMNode.this, update,
expressionService, expressionService,
valueDmc, valueDmc,
new ViewerDataRequestMonitor<FormattedValueDMData>(getSession().getExecutor(), update) { new DataRequestMonitor<FormattedValueDMData>(getSession().getExecutor(), monitor) {
@Override @Override
public void handleCompleted() { public void handleCompleted() {
if (!isSuccess()) { if (!isSuccess()) {
update.setLabel("Error : " + getStatus().getMessage(), labelIndex); monitor.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, getStatus().getMessage(), null));
update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], labelIndex); monitor.done();
update.done();
return; return;
} }
@ -401,7 +538,7 @@ public class VariableVMNode extends AbstractExpressionVMNode
DebugUIPlugin.getPreferenceColor(IInternalDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB(), labelIndex); DebugUIPlugin.getPreferenceColor(IInternalDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB(), labelIndex);
} }
update.done(); monitor.done();
} }
}, },
getExecutor() getExecutor()
@ -410,7 +547,6 @@ public class VariableVMNode extends AbstractExpressionVMNode
} }
); );
} }
public CellEditor getCellEditor(IPresentationContext context, String columnId, Object element, Composite parent) { public CellEditor getCellEditor(IPresentationContext context, String columnId, Object element, Composite parent) {
if (IDebugVMConstants.COLUMN_ID__VALUE.equals(columnId)) { if (IDebugVMConstants.COLUMN_ID__VALUE.equals(columnId)) {
return new TextCellEditor(parent); return new TextCellEditor(parent);

View file

@ -7,8 +7,10 @@
# #
# Contributors: # Contributors:
# Wind River Systems - initial API and implementation # Wind River Systems - initial API and implementation
# Wind River Systems - added Address
############################################################################### ###############################################################################
VariableColumnPresentation_name=Name VariableColumnPresentation_name=Name
VariableColumnPresentation_type=Type VariableColumnPresentation_type=Type
VariableColumnPresentation_value=Value VariableColumnPresentation_value=Value
VariableColumnPresentation_address=Address