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:
parent
eba5a5fe78
commit
938067e4ce
6 changed files with 230 additions and 246 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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[])
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue