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

[244435] - [expressions][registers] A register modified in expressions new may not show new value.

This commit is contained in:
Pawel Piech 2008-08-18 16:57:32 +00:00
parent eba5a5fe78
commit 938067e4ce
6 changed files with 230 additions and 246 deletions

View file

@ -45,15 +45,19 @@ public interface IExpressionVMNode extends IVMNode {
public int getDeltaFlagsForExpression(IExpression expression, Object event);
/**
* Adds delta flags to the given parent delta based on the expression object
* given.
* Adds delta flags to the given parent delta based on the expression
* object given. The nodes add flags to the expression view's root
* delta using this method, regardless of whether the node is directly
* below the expression manager or not.
*
*/
public void buildDeltaForExpression(IExpression expression, int elementIdx, Object event, VMDelta parentDelta,
TreePath path, RequestMonitor rm);
/**
* Adds delta to the given parent delta based on the given element which was created base on
* an expression parsed by this node.
* Adds delta to the given parent delta based on the given element that
* was created base on an expression parsed by this node. The VM nodes can
* add a new delta node to the parentDela by implementing this method.
*/
public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, VMDelta parentDelta, final RequestMonitor rm);
}

View file

@ -29,15 +29,15 @@ import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.numberformat.I
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.register.RegisterBitFieldCellModifier.BitFieldEditorStyle;
import org.eclipse.dd.dsf.debug.internal.ui.DsfDebugUIPlugin;
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
import org.eclipse.dd.dsf.debug.service.IMemory;
import org.eclipse.dd.dsf.debug.service.IRegisters;
import org.eclipse.dd.dsf.debug.service.IRunControl;
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMData;
import org.eclipse.dd.dsf.debug.service.IMemory.IMemoryChangedEvent;
import org.eclipse.dd.dsf.debug.service.IRegisters.IBitFieldChangedDMEvent;
import org.eclipse.dd.dsf.debug.service.IRegisters.IBitFieldDMContext;
import org.eclipse.dd.dsf.debug.service.IRegisters.IBitFieldDMData;
import org.eclipse.dd.dsf.debug.service.IRegisters.IMnemonic;
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterChangedDMEvent;
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMContext;
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMData;
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMData;
@ -154,7 +154,7 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
private final IFormattedValuePreferenceStore fFormattedPrefStore;
public RegisterBitFieldVMNode(IFormattedValuePreferenceStore prefStore, AbstractDMVMProvider provider, DsfSession session, SyncRegisterDataAccess access) {
super(provider, session, IRegisters.IBitFieldDMContext.class);
super(provider, session, IBitFieldDMContext.class);
fSyncRegisterDataAccess = access;
fFormattedPrefStore = prefStore;
}
@ -324,7 +324,7 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
continue;
}
final IBitFieldDMContext dmc = findDmcInPath(update.getViewerInput(), update.getElementPath(), IRegisters.IBitFieldDMContext.class);
final IBitFieldDMContext dmc = findDmcInPath(update.getViewerInput(), update.getElementPath(), IBitFieldDMContext.class);
getDMVMProvider().getModelData(
this,
@ -507,24 +507,19 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
* @see org.eclipse.dd.dsf.ui.viewmodel.IVMNode#getDeltaFlags(java.lang.Object)
*/
public int getDeltaFlags(Object e) {
if (e instanceof IRunControl.ISuspendedDMEvent) {
if ( e instanceof ISuspendedDMEvent ||
e instanceof IMemoryChangedEvent ||
e instanceof IRegisterChangedDMEvent ||
(e instanceof PropertyChangeEvent &&
((PropertyChangeEvent)e).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE) )
{
return IModelDelta.CONTENT;
}
if (e instanceof IRegisters.IBitFieldChangedDMEvent) {
}
if (e instanceof IBitFieldChangedDMEvent) {
return IModelDelta.STATE;
}
if (e instanceof IMemory.IMemoryChangedEvent) {
return IModelDelta.CONTENT;
}
if (e instanceof PropertyChangeEvent &&
((PropertyChangeEvent)e).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE)
{
return IModelDelta.CONTENT;
}
return IModelDelta.NO_CHANGE;
}
@ -533,28 +528,22 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
* @see org.eclipse.dd.dsf.ui.viewmodel.IVMNode#buildDelta(java.lang.Object, org.eclipse.dd.dsf.ui.viewmodel.VMDelta, int, org.eclipse.dd.dsf.concurrent.RequestMonitor)
*/
public void buildDelta(Object e, VMDelta parentDelta, int nodeOffset, RequestMonitor rm) {
if (e instanceof IRunControl.ISuspendedDMEvent) {
// Create a delta that the whole register group has changed.
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
if (e instanceof IRegisters.IBitFieldChangedDMEvent) {
/*
* Create a delta indicating the bit field has changed.
*/
parentDelta.addNode( createVMContext(((IRegisters.IBitFieldChangedDMEvent)e).getDMContext()), IModelDelta.STATE );
}
if (e instanceof IMemory.IMemoryChangedEvent) {
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
if (e instanceof PropertyChangeEvent &&
((PropertyChangeEvent)e).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE)
// The following events can affect any bit field's values,
// refresh the contents of the parent element (i.e. all the registers).
if ( e instanceof ISuspendedDMEvent ||
e instanceof IMemoryChangedEvent ||
e instanceof IRegisterChangedDMEvent ||
(e instanceof PropertyChangeEvent &&
((PropertyChangeEvent)e).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE) )
{
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
}
if (e instanceof IBitFieldChangedDMEvent) {
// Create a delta indicating that the value of bit field has changed.
parentDelta.addNode( createVMContext(((IBitFieldChangedDMEvent)e).getDMContext()), IModelDelta.STATE );
}
rm.done();
}
@ -761,7 +750,7 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
* @see org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.expression.IExpressionVMNode#getDeltaFlagsForExpression(org.eclipse.debug.core.model.IExpression, java.lang.Object)
*/
public int getDeltaFlagsForExpression(IExpression expression, Object event) {
if (event instanceof IRunControl.ISuspendedDMEvent) {
if (event instanceof ISuspendedDMEvent) {
return IModelDelta.CONTENT;
}
@ -770,7 +759,7 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
return IModelDelta.CONTENT;
}
if (event instanceof IMemory.IMemoryChangedEvent) {
if (event instanceof IMemoryChangedEvent) {
return IModelDelta.CONTENT;
}
@ -783,16 +772,11 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
*/
public void buildDeltaForExpression(final IExpression expression, final int elementIdx, final Object event, final VMDelta parentDelta, final TreePath path, final RequestMonitor rm)
{
// Always refresh the contents of the view upon suspended event.
if (event instanceof ISuspendedDMEvent) {
// Mark the parent delta indicating that elements were added and/or removed.
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
else if (event instanceof IRegisters.IRegisterChangedDMEvent) {
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
else if (event instanceof IMemory.IMemoryChangedEvent) {
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
}
rm.done();
}
@ -802,19 +786,15 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
*/
public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, VMDelta parentDelta, final RequestMonitor rm)
{
if (event instanceof IMemory.IMemoryChangedEvent) {
parentDelta.addNode(element, IModelDelta.STATE);
}
if (event instanceof IBitFieldChangedDMEvent) {
// The following events can affect register values, refresh the state
// of the expression.
if ( event instanceof IRegisterChangedDMEvent ||
event instanceof IMemoryChangedEvent ||
(event instanceof PropertyChangeEvent &&
((PropertyChangeEvent)event).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE) )
{
parentDelta.addNode(element, IModelDelta.STATE);
}
if (event instanceof PropertyChangeEvent &&
((PropertyChangeEvent)event).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE)
{
parentDelta.addNode(element, IModelDelta.CONTENT);
}
rm.done();
}

View file

@ -27,10 +27,11 @@ import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.expression.Abs
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.expression.WatchExpressionCellModifier;
import org.eclipse.dd.dsf.debug.internal.ui.DsfDebugUIPlugin;
import org.eclipse.dd.dsf.debug.service.IRegisters;
import org.eclipse.dd.dsf.debug.service.IRunControl;
import org.eclipse.dd.dsf.debug.service.IRegisters.IGroupChangedDMEvent;
import org.eclipse.dd.dsf.debug.service.IRegisters.IGroupsChangedDMEvent;
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMContext;
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMData;
import org.eclipse.dd.dsf.debug.service.IRunControl.ISuspendedDMEvent;
import org.eclipse.dd.dsf.service.DsfSession;
import org.eclipse.dd.dsf.ui.concurrent.ViewerDataRequestMonitor;
import org.eclipse.dd.dsf.ui.viewmodel.IVMContext;
@ -130,7 +131,7 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
private WatchExpressionCellModifier fWatchExpressionCellModifier = new WatchExpressionCellModifier();
public RegisterGroupVMNode(AbstractDMVMProvider provider, DsfSession session, SyncRegisterDataAccess syncDataAccess) {
super(provider, session, IRegisters.IRegisterGroupDMContext.class);
super(provider, session, IRegisterGroupDMContext.class);
fSyncRegisterDataAccess = syncDataAccess;
}
@ -303,13 +304,13 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
* @see org.eclipse.dd.dsf.ui.viewmodel.IVMNode#getDeltaFlags(java.lang.Object)
*/
public int getDeltaFlags(Object e) {
if (e instanceof IRunControl.ISuspendedDMEvent) {
if (e instanceof ISuspendedDMEvent) {
return IModelDelta.CONTENT;
}
else if (e instanceof IRegisters.IGroupsChangedDMEvent) {
else if (e instanceof IGroupsChangedDMEvent) {
return IModelDelta.CONTENT;
}
else if (e instanceof IRegisters.IGroupChangedDMEvent) {
else if (e instanceof IGroupChangedDMEvent) {
return IModelDelta.STATE;
}
return IModelDelta.NO_CHANGE;
@ -320,15 +321,18 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
* @see org.eclipse.dd.dsf.ui.viewmodel.IVMNode#buildDelta(java.lang.Object, org.eclipse.dd.dsf.ui.viewmodel.VMDelta, int, org.eclipse.dd.dsf.concurrent.RequestMonitor)
*/
public void buildDelta(Object e, VMDelta parentDelta, int nodeOffset, RequestMonitor rm) {
if (e instanceof IRunControl.ISuspendedDMEvent) {
// Although the register groups themselves are not affected by the
// suspended event, typically all the registers are. Add a CONTENT changed
// flag to the parent to repaint all the groups and their registers.
if (e instanceof ISuspendedDMEvent) {
// Create a delta that indicates all groups have changed
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
else if (e instanceof IRegisters.IGroupsChangedDMEvent) {
else if (e instanceof IGroupsChangedDMEvent) {
// Create a delta that indicates all groups have changed
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
else if (e instanceof IRegisters.IGroupChangedDMEvent) {
else if (e instanceof IGroupChangedDMEvent) {
// Create a delta that indicates that specific group changed
parentDelta.addNode( createVMContext(((IGroupChangedDMEvent)e).getDMContext()), IModelDelta.STATE );
}
@ -365,10 +369,17 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
* @see org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.expression.IExpressionVMNode#getDeltaFlagsForExpression(org.eclipse.debug.core.model.IExpression, java.lang.Object)
*/
public int getDeltaFlagsForExpression(IExpression expression, Object event) {
if (event instanceof IRunControl.ISuspendedDMEvent) {
if (event instanceof ISuspendedDMEvent ||
event instanceof IGroupsChangedDMEvent)
{
return IModelDelta.CONTENT;
}
if (event instanceof IGroupChangedDMEvent) {
return IModelDelta.STATE;
}
return IModelDelta.NO_CHANGE;
}
@ -379,10 +390,19 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
public void buildDeltaForExpression(IExpression expression, int elementIdx, Object event, VMDelta parentDelta,
TreePath path, RequestMonitor rm)
{
if (event instanceof IRunControl.ISuspendedDMEvent) {
if (event instanceof ISuspendedDMEvent) {
// Mark the parent delta indicating that elements were added and/or removed.
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
// If the group definitions have changed, refresh the whole expressions
// view contents since previously invalid expressions may now evaluate
// to valid groups
if (event instanceof IGroupsChangedDMEvent) {
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
rm.done();
}
@ -392,10 +412,7 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
*/
public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, VMDelta parentDelta, final RequestMonitor rm)
{
if (event instanceof IRegisters.IGroupsChangedDMEvent) {
parentDelta.addNode(element, IModelDelta.CONTENT);
}
if (event instanceof IRegisters.IGroupChangedDMEvent) {
if (event instanceof IGroupChangedDMEvent) {
parentDelta.addNode(element, IModelDelta.STATE);
}
rm.done();

View file

@ -28,15 +28,16 @@ import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.numberformat.I
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.numberformat.IFormattedValueVMContext;
import org.eclipse.dd.dsf.debug.internal.ui.DsfDebugUIPlugin;
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
import org.eclipse.dd.dsf.debug.service.IMemory;
import org.eclipse.dd.dsf.debug.service.IRegisters;
import org.eclipse.dd.dsf.debug.service.IRunControl;
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMData;
import org.eclipse.dd.dsf.debug.service.IMemory.IMemoryChangedEvent;
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterChangedDMEvent;
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMContext;
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMData;
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMData;
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegistersChangedDMEvent;
import org.eclipse.dd.dsf.debug.service.IRunControl.ISuspendedDMEvent;
import org.eclipse.dd.dsf.service.DsfSession;
import org.eclipse.dd.dsf.ui.concurrent.ViewerDataRequestMonitor;
import org.eclipse.dd.dsf.ui.viewmodel.IVMContext;
@ -53,6 +54,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
@ -146,7 +148,7 @@ public class RegisterVMNode extends AbstractExpressionVMNode
private final IFormattedValuePreferenceStore fFormattedPrefStore;
public RegisterVMNode(IFormattedValuePreferenceStore prefStore, AbstractDMVMProvider provider, DsfSession session, SyncRegisterDataAccess syncDataAccess) {
super(provider, session, IRegisters.IRegisterDMContext.class);
super(provider, session, IRegisterDMContext.class);
fSyncRegisterDataAccess = syncDataAccess;
fFormattedPrefStore = prefStore;
}
@ -306,7 +308,7 @@ public class RegisterVMNode extends AbstractExpressionVMNode
protected void updateLabelInSessionThread(ILabelUpdate[] updates) {
for (final ILabelUpdate update : updates) {
final IRegisterDMContext dmc = findDmcInPath(update.getViewerInput(), update.getElementPath(), IRegisters.IRegisterDMContext.class);
final IRegisterDMContext dmc = findDmcInPath(update.getViewerInput(), update.getElementPath(), IRegisterDMContext.class);
if ( dmc == null ) {
handleFailedUpdate(update);
continue;
@ -455,6 +457,16 @@ public class RegisterVMNode extends AbstractExpressionVMNode
}
}
@Override
public void update(IHasChildrenUpdate[] updates) {
// As an optimization, always indicate that register groups have
// children.
for (IHasChildrenUpdate update : updates) {
update.setHasChilren(true);
update.done();
}
}
/*
* (non-Javadoc)
* @see org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMNode#updateElementsInSessionThread(org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate)
@ -498,32 +510,19 @@ public class RegisterVMNode extends AbstractExpressionVMNode
* @see org.eclipse.dd.dsf.ui.viewmodel.IVMNode#getDeltaFlags(java.lang.Object)
*/
public int getDeltaFlags(Object e) {
if (e instanceof IRunControl.ISuspendedDMEvent) {
return IModelDelta.CONTENT;
}
if (e instanceof IRegisters.IRegistersChangedDMEvent) {
return IModelDelta.CONTENT;
}
if (e instanceof IMemory.IMemoryChangedEvent) {
return IModelDelta.CONTENT;
}
if (e instanceof IRegisters.IRegisterChangedDMEvent) {
/*
* Logically one would think that STATE should be specified here. But we specify CONTENT
* as well so that if there are sub-registers ( BIT FIELDS ) they will be forced to update
* and show new values when the total register changes.
*/
return IModelDelta.CONTENT;
}
if (e instanceof PropertyChangeEvent &&
((PropertyChangeEvent)e).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE)
if ( e instanceof ISuspendedDMEvent ||
e instanceof IMemoryChangedEvent ||
e instanceof IRegistersChangedDMEvent ||
(e instanceof PropertyChangeEvent &&
((PropertyChangeEvent)e).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE) )
{
return IModelDelta.CONTENT;
return IModelDelta.CONTENT;
}
if (e instanceof IRegisterChangedDMEvent) {
return IModelDelta.STATE;
}
return IModelDelta.NO_CHANGE;
}
@ -532,30 +531,22 @@ public class RegisterVMNode extends AbstractExpressionVMNode
* @see org.eclipse.dd.dsf.ui.viewmodel.IVMNode#buildDelta(java.lang.Object, org.eclipse.dd.dsf.ui.viewmodel.VMDelta, int, org.eclipse.dd.dsf.concurrent.RequestMonitor)
*/
public void buildDelta(Object e, VMDelta parentDelta, int nodeOffset, RequestMonitor rm) {
if (e instanceof IRunControl.ISuspendedDMEvent) {
// The following events can affect any register's values,
// refresh the contents of the parent element (i.e. all the registers).
if ( e instanceof ISuspendedDMEvent ||
e instanceof IMemoryChangedEvent ||
e instanceof IRegistersChangedDMEvent ||
(e instanceof PropertyChangeEvent &&
((PropertyChangeEvent)e).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE) )
{
// Create a delta that the whole register group has changed.
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
if (e instanceof IRegisters.IRegistersChangedDMEvent) {
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);;
if (e instanceof IRegisterChangedDMEvent) {
parentDelta.addNode( createVMContext(((IRegisterChangedDMEvent)e).getDMContext()), IModelDelta.STATE );
}
if (e instanceof IMemory.IMemoryChangedEvent) {
// Mark the parent delta indicating that elements were added and/or removed.
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
if (e instanceof IRegisters.IRegisterChangedDMEvent) {
parentDelta.addNode( createVMContext(((IRegisterChangedDMEvent)e).getDMContext()), IModelDelta.CONTENT | IModelDelta.STATE );
}
if (e instanceof PropertyChangeEvent &&
((PropertyChangeEvent)e).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE)
{
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
rm.done();
}
@ -563,7 +554,6 @@ public class RegisterVMNode extends AbstractExpressionVMNode
* Expected format: GRP( GroupName ).REG( RegisterName )
* or: $RegisterName
*/
public boolean canParseExpression(IExpression expression) {
return parseExpressionForRegisterName(expression.getExpressionText()) != null;
}
@ -670,19 +660,20 @@ public class RegisterVMNode extends AbstractExpressionVMNode
* @see org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.expression.IExpressionVMNode#getDeltaFlagsForExpression(org.eclipse.debug.core.model.IExpression, java.lang.Object)
*/
public int getDeltaFlagsForExpression(IExpression expression, Object event) {
if (event instanceof IRunControl.ISuspendedDMEvent) {
return IModelDelta.CONTENT;
}
if (event instanceof PropertyChangeEvent &&
((PropertyChangeEvent)event).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE)
if ( event instanceof IRegisterChangedDMEvent ||
event instanceof IMemoryChangedEvent ||
(event instanceof PropertyChangeEvent &&
((PropertyChangeEvent)event).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE) )
{
return IModelDelta.CONTENT;
}
if (event instanceof IMemory.IMemoryChangedEvent) {
return IModelDelta.CONTENT;
return IModelDelta.STATE;
}
if (event instanceof IRegistersChangedDMEvent ||
event instanceof ISuspendedDMEvent)
{
return IModelDelta.CONTENT;
}
return IModelDelta.NO_CHANGE;
}
@ -693,15 +684,19 @@ public class RegisterVMNode extends AbstractExpressionVMNode
public void buildDeltaForExpression(IExpression expression, int elementIdx, Object event, VMDelta parentDelta,
TreePath path, RequestMonitor rm)
{
if (event instanceof IRunControl.ISuspendedDMEvent) {
// Mark the parent delta indicating that elements were added and/or removed.
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
if (event instanceof IMemory.IMemoryChangedEvent) {
// If the register definition has changed, refresh all the
// expressions in the expression manager. This is because some
// expressions that were previously invalid, may now represent new
// registers.
if (event instanceof IRegistersChangedDMEvent) {
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
// Always refresh the contents of the view upon suspended event.
if (event instanceof ISuspendedDMEvent) {
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
rm.done();
}
@ -711,23 +706,15 @@ public class RegisterVMNode extends AbstractExpressionVMNode
*/
public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, VMDelta parentDelta, final RequestMonitor rm)
{
if (event instanceof IRegisters.IRegisterChangedDMEvent) {
parentDelta.addNode(element, IModelDelta.STATE);
}
if (event instanceof IRegisters.IRegistersChangedDMEvent) {
parentDelta.addNode(element, IModelDelta.STATE);
}
if (event instanceof IMemory.IMemoryChangedEvent) {
parentDelta.addNode(element, IModelDelta.CONTENT);
}
if (event instanceof PropertyChangeEvent &&
((PropertyChangeEvent)event).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE)
// The following events can affect register values, refresh the state
// of the expression.
if ( event instanceof IRegisterChangedDMEvent ||
event instanceof IMemoryChangedEvent ||
(event instanceof PropertyChangeEvent &&
((PropertyChangeEvent)event).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE) )
{
parentDelta.addNode(element, IModelDelta.CONTENT);
}
parentDelta.addNode(element, IModelDelta.STATE);
}
rm.done();
}

View file

@ -34,13 +34,14 @@ import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.numberformat.I
import org.eclipse.dd.dsf.debug.internal.ui.DsfDebugUIPlugin;
import org.eclipse.dd.dsf.debug.service.IExpressions;
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
import org.eclipse.dd.dsf.debug.service.IMemory;
import org.eclipse.dd.dsf.debug.service.IRunControl;
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.IExpressionDMContext;
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.FormattedValueDMData;
import org.eclipse.dd.dsf.debug.service.IMemory.IMemoryChangedEvent;
import org.eclipse.dd.dsf.debug.service.IRunControl.ISuspendedDMEvent;
import org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext;
import org.eclipse.dd.dsf.debug.service.IStack.IVariableDMContext;
import org.eclipse.dd.dsf.debug.service.IStack.IVariableDMData;
@ -78,49 +79,6 @@ public class VariableVMNode extends AbstractExpressionVMNode
implements IElementEditor, IElementLabelProvider, IElementMementoProvider
{
//private final static int MAX_STRING_VALUE_LENGTH = 40;
public int getDeltaFlags(Object e) {
/*
* @see buildDelta()
*/
// When an expression changes or memory, we must do a full refresh
// see Bug 213061 and Bug 214550
if (e instanceof IRunControl.ISuspendedDMEvent ||
e instanceof IExpressions.IExpressionChangedDMEvent ||
e instanceof IMemory.IMemoryChangedEvent) {
return IModelDelta.CONTENT;
}
if (e instanceof PropertyChangeEvent &&
((PropertyChangeEvent)e).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE)
{
return IModelDelta.CONTENT;
}
return IModelDelta.NO_CHANGE;
}
public void buildDelta(final Object event, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) {
// When an expression changes or memory, we must do a full refresh
// see Bug 213061 and Bug 214550
if (event instanceof IRunControl.ISuspendedDMEvent ||
event instanceof IExpressions.IExpressionChangedDMEvent ||
event instanceof IMemory.IMemoryChangedEvent) {
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
if (event instanceof PropertyChangeEvent &&
((PropertyChangeEvent)event).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE)
{
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
requestMonitor.done();
}
private final IFormattedValuePreferenceStore fFormattedPrefStore;
private final SyncVariableDataAccess fSyncVariableDataAccess;
@ -519,49 +477,6 @@ public class VariableVMNode extends AbstractExpressionVMNode
}
}
public int getDeltaFlagsForExpression(IExpression expression, Object event) {
// When an expression changes or memory, we must do a full refresh
// see Bug 213061 and Bug 214550
if (event instanceof IRunControl.ISuspendedDMEvent ||
event instanceof IExpressions.IExpressionChangedDMEvent ||
event instanceof IMemory.IMemoryChangedEvent) {
return IModelDelta.CONTENT;
}
if (event instanceof PropertyChangeEvent &&
((PropertyChangeEvent)event).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE)
{
return IModelDelta.CONTENT;
}
return IModelDelta.NO_CHANGE;
}
public void buildDeltaForExpression(IExpression expression, int elementIdx, Object event, VMDelta parentDelta,
TreePath path, RequestMonitor rm)
{
rm.done();
}
public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, VMDelta parentDelta,
RequestMonitor rm)
{
// When an expression changes or memory, we must do a full refresh
// see Bug 213061 and Bug 214550
if (event instanceof IRunControl.ISuspendedDMEvent ||
event instanceof IExpressions.IExpressionChangedDMEvent ||
event instanceof IMemory.IMemoryChangedEvent) {
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
if (event instanceof PropertyChangeEvent &&
((PropertyChangeEvent)event).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE)
{
parentDelta.addNode(element, IModelDelta.CONTENT);
}
rm.done();
}
@Override
protected void updateElementsInSessionThread(final IChildrenUpdate update) {
// Get the data model context object for the current node in the hierarchy.
@ -730,6 +645,85 @@ public class VariableVMNode extends AbstractExpressionVMNode
stackFrameService.getLocals(frameDmc, rm);
}
//private final static int MAX_STRING_VALUE_LENGTH = 40;
public int getDeltaFlags(Object e) {
if ( e instanceof ISuspendedDMEvent ||
e instanceof IMemoryChangedEvent ||
e instanceof IExpressionChangedDMEvent ||
(e instanceof PropertyChangeEvent &&
((PropertyChangeEvent)e).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE) )
{
// Create a delta that the whole register group has changed.
return IModelDelta.CONTENT;
}
return IModelDelta.NO_CHANGE;
}
public void buildDelta(final Object e, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) {
// The following events can affect any expression's values,
// refresh the contents of the parent element (i.e. all the expressions).
if ( e instanceof ISuspendedDMEvent ||
e instanceof IMemoryChangedEvent ||
e instanceof IExpressionChangedDMEvent ||
(e instanceof PropertyChangeEvent &&
((PropertyChangeEvent)e).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE) )
{
// Create a delta that the whole register group has changed.
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
requestMonitor.done();
}
public int getDeltaFlagsForExpression(IExpression expression, Object event) {
if ( event instanceof IExpressionChangedDMEvent ||
event instanceof IMemoryChangedEvent ||
(event instanceof PropertyChangeEvent &&
((PropertyChangeEvent)event).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE) )
{
return IModelDelta.STATE;
}
if (event instanceof ISuspendedDMEvent)
{
return IModelDelta.CONTENT;
}
return IModelDelta.NO_CHANGE;
}
public void buildDeltaForExpression(IExpression expression, int elementIdx, Object event, VMDelta parentDelta,
TreePath path, RequestMonitor rm)
{
// Always refresh the contents of the view upon suspended event.
if (event instanceof ISuspendedDMEvent) {
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
rm.done();
}
public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, VMDelta parentDelta,
RequestMonitor rm)
{
// The following events can affect expression values, refresh the state
// of the expression.
if ( event instanceof IExpressionChangedDMEvent ||
event instanceof IMemoryChangedEvent ||
(event instanceof PropertyChangeEvent &&
((PropertyChangeEvent)event).getProperty() == IDebugVMConstants.CURRENT_FORMAT_STORAGE) )
{
parentDelta.addNode(element, IModelDelta.STATE);
}
rm.done();
}
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#compareElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest[])

View file

@ -97,7 +97,7 @@ public interface IFormattedValues extends IDMService {
@Override
public String toString() {
return super.toString() + ".format(" + getFormatID() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
return baseToString() + ".format(" + getFormatID() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
}
@ -112,5 +112,7 @@ public interface IFormattedValues extends IDMService {
public String getFormattedValue() {
return fValue;
}
}
}