diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionManagerVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionManagerVMNode.java index e39d2c5b485..a25f962abdb 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionManagerVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionManagerVMNode.java @@ -22,6 +22,7 @@ import org.eclipse.dd.dsf.ui.concurrent.ViewerCountingRequestMonitor; import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMContext; import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMNode; import org.eclipse.dd.dsf.ui.viewmodel.IVMNode; +import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.IExpressionManager; import org.eclipse.debug.core.model.IExpression; @@ -34,7 +35,6 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdat 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; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.resource.JFaceResources; @@ -296,7 +296,7 @@ public class ExpressionManagerVMNode extends AbstractVMNode return retVal; } - public void buildDelta(final Object event, final ModelDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) { + public void buildDelta(final Object event, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) { // Add a flag if the list of expressions has changed. if (event instanceof ExpressionsChangedEvent) { parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT); diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java index c3d4ffac01e..6cdd02889fd 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java @@ -24,10 +24,11 @@ import org.eclipse.dd.dsf.debug.ui.viewmodel.variable.SyncVariableDataAccess; import org.eclipse.dd.dsf.debug.ui.viewmodel.variable.VariableVMNode; import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMAdapter; +import org.eclipse.dd.dsf.ui.viewmodel.DefaultVMContentProviderStrategy; import org.eclipse.dd.dsf.ui.viewmodel.IRootVMNode; import org.eclipse.dd.dsf.ui.viewmodel.IVMModelProxy; import org.eclipse.dd.dsf.ui.viewmodel.IVMNode; -import org.eclipse.dd.dsf.ui.viewmodel.DefaultVMContentProviderStrategy; +import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProvider; import org.eclipse.dd.dsf.ui.viewmodel.dm.RootDMVMNode; import org.eclipse.dd.dsf.ui.viewmodel.update.AutomaticUpdatePolicy; @@ -143,7 +144,7 @@ public class ExpressionVMProvider extends AbstractDMVMProvider * methods. */ public void buildDeltaForExpression(final IExpression expression, final int expressionElementIdx, final Object event, - final ModelDelta parentDelta, final TreePath path, final RequestMonitor rm) + final VMDelta parentDelta, final TreePath path, final RequestMonitor rm) { // Workaround: find the first active proxy and use it. if (!getActiveModelProxies().isEmpty()) { diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProviderModelProxyStrategy.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProviderModelProxyStrategy.java index f17aabc25a2..6cc7480e085 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProviderModelProxyStrategy.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProviderModelProxyStrategy.java @@ -15,11 +15,11 @@ import java.util.Map; import org.eclipse.dd.dsf.concurrent.CountingRequestMonitor; import org.eclipse.dd.dsf.concurrent.DataRequestMonitor; import org.eclipse.dd.dsf.concurrent.RequestMonitor; -import org.eclipse.dd.dsf.ui.viewmodel.IVMNode; import org.eclipse.dd.dsf.ui.viewmodel.DefaultVMModelProxyStrategy; +import org.eclipse.dd.dsf.ui.viewmodel.IVMNode; +import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.debug.core.model.IExpression; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; import org.eclipse.jface.viewers.TreePath; /** @@ -59,7 +59,7 @@ public class ExpressionVMProviderModelProxyStrategy extends DefaultVMModelProxyS } public void buildDeltaForExpression(IExpression expression, int expressionElementIdx, Object event, - ModelDelta parentDelta, TreePath path, RequestMonitor rm) + VMDelta parentDelta, TreePath path, RequestMonitor rm) { final IExpressionVMNode matchingNode = getExpressionVMProvider().findNodeToParseExpression(null, expression); @@ -72,7 +72,7 @@ public class ExpressionVMProviderModelProxyStrategy extends DefaultVMModelProxyS } private void buildNodeDeltaForExpression(final IExpressionVMNode node, final IExpression expression, - final int expressionElementIdx, final Object event, final ModelDelta parentDelta, final TreePath path, + final int expressionElementIdx, final Object event, final VMDelta parentDelta, final TreePath path, final RequestMonitor rm) { node.buildDeltaForExpression( @@ -108,7 +108,7 @@ public class ExpressionVMProviderModelProxyStrategy extends DefaultVMModelProxyS } private void buildDeltaForExpressionElement(final IExpressionVMNode node, Object expressionElement, - final int expressionElementIdx, final Object event, final ModelDelta parentDelta, final TreePath path, + final int expressionElementIdx, final Object event, final VMDelta parentDelta, final TreePath path, final RequestMonitor rm) { CountingRequestMonitor multiRm = new CountingRequestMonitor(getVMProvider().getExecutor(), rm); diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/IExpressionVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/IExpressionVMNode.java index 56ef08b816a..ffe51869417 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/IExpressionVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/IExpressionVMNode.java @@ -12,8 +12,8 @@ package org.eclipse.dd.dsf.debug.ui.viewmodel.expression; import org.eclipse.dd.dsf.concurrent.RequestMonitor; import org.eclipse.dd.dsf.ui.viewmodel.IVMNode; +import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.debug.core.model.IExpression; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; import org.eclipse.jface.viewers.TreePath; /** @@ -49,12 +49,12 @@ public interface IExpressionVMNode extends IVMNode { * Adds delta flags to the given parent delta based on the expression object * given. */ - public void buildDeltaForExpression(IExpression expression, int elementIdx, Object event, ModelDelta parentDelta, + 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. */ - public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, ModelDelta parentDelta, final RequestMonitor rm); + public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, VMDelta parentDelta, final RequestMonitor rm); } diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/LaunchRootVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/LaunchRootVMNode.java index bedac741b08..1c0af5b33b5 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/LaunchRootVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/LaunchRootVMNode.java @@ -21,6 +21,7 @@ import org.eclipse.dd.dsf.service.IDsfService; import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMProvider; import org.eclipse.dd.dsf.ui.viewmodel.IRootVMNode; import org.eclipse.dd.dsf.ui.viewmodel.RootVMNode; +import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; @@ -28,7 +29,6 @@ import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; /** * Layout node for the standard ILaunch object. This node can only be used at @@ -87,7 +87,7 @@ public class LaunchRootVMNode extends RootVMNode } @Override - public void createRootDelta(Object rootObject, Object event, final DataRequestMonitor rm) { + public void createRootDelta(Object rootObject, Object event, final DataRequestMonitor rm) { if (!(rootObject instanceof ILaunch)) { rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfService.INVALID_STATE, "Invalid root element configured with launch root node.", null)); //$NON-NLS-1$ return; @@ -101,8 +101,8 @@ public class LaunchRootVMNode extends RootVMNode */ ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager(); List launchList = Arrays.asList(manager.getLaunches()); - final ModelDelta viewRootDelta = new ModelDelta(manager, 0, IModelDelta.NO_CHANGE, launchList.size()); - final ModelDelta rootDelta = viewRootDelta.addNode(rootLaunch, launchList.indexOf(rootLaunch), IModelDelta.NO_CHANGE); + final VMDelta viewRootDelta = new VMDelta(manager, 0, IModelDelta.NO_CHANGE, launchList.size()); + final VMDelta rootDelta = viewRootDelta.addNode(rootLaunch, launchList.indexOf(rootLaunch), IModelDelta.NO_CHANGE); // Generate delta for launch node. if (event instanceof LaunchesEvent) { diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StackFramesVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StackFramesVMNode.java index 3a913d371cb..e13ea7cfa8d 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StackFramesVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StackFramesVMNode.java @@ -31,6 +31,7 @@ import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.dsf.service.IDsfService; import org.eclipse.dd.dsf.ui.viewmodel.IVMContext; import org.eclipse.dd.dsf.ui.viewmodel.VMChildrenUpdate; +import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMNode; import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProvider; import org.eclipse.dd.dsf.ui.viewmodel.dm.IDMVMContext; @@ -40,7 +41,6 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdat 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.IViewerUpdate; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugUIConstants; @@ -287,7 +287,7 @@ public class StackFramesVMNode extends AbstractDMVMNode return IModelDelta.NO_CHANGE; } - public void buildDelta(final Object e, final ModelDelta parent, final int nodeOffset, final RequestMonitor rm) { + public void buildDelta(final Object e, final VMDelta parent, final int nodeOffset, final RequestMonitor rm) { if (e instanceof IContainerSuspendedDMEvent) { IExecutionDMContext threadDmc = null; if (parent.getElement() instanceof IDMVMContext) { @@ -306,7 +306,7 @@ public class StackFramesVMNode extends AbstractDMVMNode } } - private void buildDeltaForSuspendedEvent(final ISuspendedDMEvent e, final IExecutionDMContext executionCtx, final IExecutionDMContext triggeringCtx, final ModelDelta parentDelta, final int nodeOffset, final RequestMonitor rm) { + private void buildDeltaForSuspendedEvent(final ISuspendedDMEvent e, final IExecutionDMContext executionCtx, final IExecutionDMContext triggeringCtx, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor rm) { IRunControl runControlService = getServicesTracker().getService(IRunControl.class); IStack stackService = getServicesTracker().getService(IStack.class); if (stackService == null || runControlService == null) { @@ -353,7 +353,7 @@ public class StackFramesVMNode extends AbstractDMVMNode } } - private void buildDeltaForResumedEvent(final IResumedDMEvent e, final ModelDelta parentDelta, final int nodeOffset, final RequestMonitor rm) { + private void buildDeltaForResumedEvent(final IResumedDMEvent e, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor rm) { IStack stackService = getServicesTracker().getService(IStack.class); if (stackService == null) { // Required services have not initialized yet. Ignore the event. @@ -371,7 +371,7 @@ public class StackFramesVMNode extends AbstractDMVMNode rm.done(); } - private void buildDeltaForSteppingTimedOutEvent(final IStepQueueManager.ISteppingTimedOutEvent e, final ModelDelta parentDelta, final int nodeOffset, final RequestMonitor rm) { + private void buildDeltaForSteppingTimedOutEvent(final IStepQueueManager.ISteppingTimedOutEvent e, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor rm) { // Repaint the stack frame images to have the running symbol. parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT); rm.done(); diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StandardProcessVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StandardProcessVMNode.java index 751dfc99553..e1e0a7d18cb 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StandardProcessVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StandardProcessVMNode.java @@ -16,6 +16,7 @@ import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMNode; import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMProvider; import org.eclipse.dd.dsf.ui.viewmodel.IVMContext; import org.eclipse.dd.dsf.ui.viewmodel.IVMNode; +import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.ILaunch; @@ -184,7 +185,7 @@ public class StandardProcessVMNode extends AbstractVMNode { return myFlags; } - public void buildDelta(Object e, ModelDelta parent, int nodeOffset, RequestMonitor requestMonitor) { + public void buildDelta(Object e, VMDelta parent, int nodeOffset, RequestMonitor requestMonitor) { if (e instanceof DebugEvent && ((DebugEvent)e).getSource() instanceof IProcess) { DebugEvent de = (DebugEvent)e; if (de.getKind() == DebugEvent.CHANGE) { diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/modules/ModulesVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/modules/ModulesVMNode.java index 78155c4191d..d660b5edc20 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/modules/ModulesVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/modules/ModulesVMNode.java @@ -25,13 +25,13 @@ import org.eclipse.dd.dsf.debug.ui.DsfDebugUIPlugin; import org.eclipse.dd.dsf.debug.ui.IDsfDebugUIConstants; import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.dsf.service.IDsfService; +import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMNode; import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; 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.ModelDelta; @SuppressWarnings("restriction") public class ModulesVMNode extends AbstractDMVMNode @@ -142,7 +142,7 @@ public class ModulesVMNode extends AbstractDMVMNode return IModelDelta.NO_CHANGE; } - public void buildDelta(Object e, ModelDelta parentDelta, int nodeOffset, RequestMonitor rm) { + public void buildDelta(Object e, VMDelta parentDelta, int nodeOffset, RequestMonitor rm) { if (e instanceof IRunControl.ISuspendedDMEvent) { // Create a delta that indicates all groups have changed parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT); diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterBitFieldVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterBitFieldVMNode.java index 5513c4642ba..c49e683dfe7 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterBitFieldVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterBitFieldVMNode.java @@ -41,6 +41,7 @@ import org.eclipse.dd.dsf.debug.ui.viewmodel.register.RegisterBitFieldCellModifi import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.dsf.service.IDsfService; import org.eclipse.dd.dsf.ui.viewmodel.IVMContext; +import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProvider; import org.eclipse.dd.dsf.ui.viewmodel.dm.IDMVMContext; import org.eclipse.debug.core.DebugException; @@ -55,7 +56,6 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProv 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; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; import org.eclipse.debug.ui.actions.IWatchExpressionFactoryAdapterExtension; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.CellEditor; @@ -424,7 +424,7 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode return IModelDelta.NO_CHANGE; } - public void buildDelta(Object e, ModelDelta parentDelta, int nodeOffset, RequestMonitor rm) { + 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); @@ -602,7 +602,7 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode return IModelDelta.NO_CHANGE; } - public void buildDeltaForExpression(final IExpression expression, final int elementIdx, final Object event, final ModelDelta parentDelta, final TreePath path, final RequestMonitor rm) + public void buildDeltaForExpression(final IExpression expression, final int elementIdx, final Object event, final VMDelta parentDelta, final TreePath path, final RequestMonitor rm) { if (event instanceof ISuspendedDMEvent) { // Mark the parent delta indicating that elements were added and/or removed. @@ -613,7 +613,7 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode rm.done(); } - public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, ModelDelta parentDelta, final RequestMonitor rm) + public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, VMDelta parentDelta, final RequestMonitor rm) { if (event instanceof IBitFieldChangedDMEvent) { parentDelta.addNode(element, IModelDelta.STATE); diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterGroupVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterGroupVMNode.java index ae10054f4c6..aa70784c236 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterGroupVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterGroupVMNode.java @@ -32,6 +32,7 @@ import org.eclipse.dd.dsf.debug.ui.viewmodel.expression.WatchExpressionCellModif import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.dsf.service.IDsfService; import org.eclipse.dd.dsf.ui.viewmodel.IVMContext; +import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProvider; import org.eclipse.dd.dsf.ui.viewmodel.dm.CompositeDMVMContext; import org.eclipse.dd.dsf.ui.viewmodel.dm.IDMVMContext; @@ -48,7 +49,6 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProv 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; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.actions.IWatchExpressionFactoryAdapterExtension; import org.eclipse.jface.viewers.CellEditor; @@ -273,7 +273,7 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode return IModelDelta.NO_CHANGE; } - public void buildDelta(Object e, ModelDelta parentDelta, int nodeOffset, RequestMonitor rm) { + public void buildDelta(Object e, VMDelta parentDelta, int nodeOffset, RequestMonitor rm) { if (e instanceof IRunControl.ISuspendedDMEvent) { // Create a delta that indicates all groups have changed parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT); @@ -324,7 +324,7 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode return IModelDelta.NO_CHANGE; } - public void buildDeltaForExpression(IExpression expression, int elementIdx, Object event, ModelDelta parentDelta, + public void buildDeltaForExpression(IExpression expression, int elementIdx, Object event, VMDelta parentDelta, TreePath path, RequestMonitor rm) { if (event instanceof IRunControl.ISuspendedDMEvent) { @@ -334,7 +334,7 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode rm.done(); } - public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, ModelDelta parentDelta, final RequestMonitor rm) + public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, VMDelta parentDelta, final RequestMonitor rm) { if (event instanceof IRegisters.IGroupsChangedDMEvent) { parentDelta.addNode(element, IModelDelta.CONTENT); diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterVMNode.java index f82b2d83e49..159c44a2c1f 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterVMNode.java @@ -37,6 +37,7 @@ import org.eclipse.dd.dsf.debug.ui.viewmodel.numberformat.IFormattedValueVMConte import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.dsf.service.IDsfService; import org.eclipse.dd.dsf.ui.viewmodel.IVMContext; +import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProvider; import org.eclipse.dd.dsf.ui.viewmodel.dm.CompositeDMVMContext; import org.eclipse.dd.dsf.ui.viewmodel.dm.IDMVMContext; @@ -55,7 +56,6 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProv 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; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.actions.IWatchExpressionFactoryAdapterExtension; import org.eclipse.jface.util.PropertyChangeEvent; @@ -436,7 +436,7 @@ public class RegisterVMNode extends AbstractExpressionVMNode return IModelDelta.NO_CHANGE; } - public void buildDelta(Object e, ModelDelta parentDelta, int nodeOffset, RequestMonitor rm) { + 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); @@ -543,7 +543,7 @@ public class RegisterVMNode extends AbstractExpressionVMNode return IModelDelta.NO_CHANGE; } - public void buildDeltaForExpression(IExpression expression, int elementIdx, Object event, ModelDelta parentDelta, + public void buildDeltaForExpression(IExpression expression, int elementIdx, Object event, VMDelta parentDelta, TreePath path, RequestMonitor rm) { if (event instanceof IRunControl.ISuspendedDMEvent) { @@ -553,7 +553,7 @@ public class RegisterVMNode extends AbstractExpressionVMNode rm.done(); } - public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, ModelDelta parentDelta, final RequestMonitor rm) + public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, VMDelta parentDelta, final RequestMonitor rm) { if (event instanceof IRegisters.IRegisterChangedDMEvent) { parentDelta.addNode(element, IModelDelta.STATE); diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableVMNode.java index fd876fc32f2..87baf190bd2 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableVMNode.java @@ -44,6 +44,7 @@ import org.eclipse.dd.dsf.debug.ui.viewmodel.numberformat.IFormattedValueVMConte import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.dsf.service.IDsfService; import org.eclipse.dd.dsf.ui.viewmodel.IVMContext; +import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProvider; import org.eclipse.dd.dsf.ui.viewmodel.dm.CompositeDMVMContext; import org.eclipse.dd.dsf.ui.viewmodel.dm.IDMVMContext; @@ -62,7 +63,6 @@ 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; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; import org.eclipse.debug.ui.actions.IWatchExpressionFactoryAdapterExtension; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.CellEditor; @@ -100,7 +100,7 @@ public class VariableVMNode extends AbstractExpressionVMNode return IModelDelta.NO_CHANGE; } - public void buildDelta(final Object event, final ModelDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) { + public void buildDelta(final Object event, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) { if (event instanceof IRunControl.ISuspendedDMEvent) { parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT); @@ -527,13 +527,13 @@ public class VariableVMNode extends AbstractExpressionVMNode return IModelDelta.NO_CHANGE; } - public void buildDeltaForExpression(IExpression expression, int elementIdx, Object event, ModelDelta parentDelta, + 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, ModelDelta parentDelta, + public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, VMDelta parentDelta, RequestMonitor rm) { if (event instanceof IRunControl.ISuspendedDMEvent) { diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/DefaultVMModelProxyStrategy.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/DefaultVMModelProxyStrategy.java index 6acd5eb1884..4a3739f5439 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/DefaultVMModelProxyStrategy.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/DefaultVMModelProxyStrategy.java @@ -248,7 +248,7 @@ public class DefaultVMModelProxyStrategy implements IVMModelProxy { // Always create the rootDelta, no matter what delta flags the child nodes have. rootNode.createRootDelta( getRootElement(), event, - new DataRequestMonitor(getVMProvider().getExecutor(), rm) { + new DataRequestMonitor(getVMProvider().getExecutor(), rm) { @Override protected void handleOK() { // Find the root delta for the whole view to use when firing the delta. @@ -281,7 +281,7 @@ public class DefaultVMModelProxyStrategy implements IVMModelProxy { }); } - protected void buildChildDeltas(final IVMNode node, final Object event, final ModelDelta parentDelta, + protected void buildChildDeltas(final IVMNode node, final Object event, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor rm) { final IVMContext vmc = node.getContextFromEvent(event); @@ -297,7 +297,7 @@ public class DefaultVMModelProxyStrategy implements IVMModelProxy { } protected void buildChildDeltasForEventContext(final IVMContext vmc, final IVMNode node, final Object event, - final ModelDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) + final VMDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) { final Map childNodeDeltas = getChildNodesWithDeltaFlags(node, parentDelta, event); if (childNodeDeltas.size() == 0) { @@ -354,7 +354,7 @@ public class DefaultVMModelProxyStrategy implements IVMModelProxy { // Optimization: Try to find a delta with a matching element, if found use it. // Otherwise create a new delta for the event element. int elementIndex = nodeOffset + i; - ModelDelta delta = parentDelta.getChildDelta(vmc); + VMDelta delta = (VMDelta)parentDelta.getChildDelta(vmc); if (delta == null || delta.getIndex() != elementIndex) { delta = parentDelta.addNode(vmc, elementIndex, IModelDelta.NO_CHANGE); } @@ -366,7 +366,7 @@ public class DefaultVMModelProxyStrategy implements IVMModelProxy { } else { // Optimization: Try to find a delta with a matching element, if found use it. // Otherwise create a new delta for the event element. - ModelDelta delta = parentDelta.getChildDelta(vmc); + VMDelta delta = (VMDelta)parentDelta.getChildDelta(vmc); if (delta == null) { delta = parentDelta.addNode(vmc, IModelDelta.NO_CHANGE); } @@ -382,7 +382,7 @@ public class DefaultVMModelProxyStrategy implements IVMModelProxy { * AbstractVMNode should override this method. * @see IVMNode#buildDelta(Object, ModelDelta, int, RequestMonitor) */ - protected void buildChildDeltasForAllContexts(final IVMNode node, final Object event, final ModelDelta parentDelta, + protected void buildChildDeltasForAllContexts(final IVMNode node, final Object event, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) { // Find the child nodes that have deltas for the given event. @@ -443,7 +443,7 @@ public class DefaultVMModelProxyStrategy implements IVMModelProxy { // and then call all the child nodes to build their delta. for (int i = 0; i < getData().size(); i++) { int elementIndex = nodeOffset >= 0 ? nodeOffset + i : -1; - ModelDelta delta = + VMDelta delta = parentDelta.addNode(getData().get(i), elementIndex, IModelDelta.NO_CHANGE); callChildNodesToBuildDelta( node, childNodesWithDeltaFlags, delta, event, @@ -471,7 +471,7 @@ public class DefaultVMModelProxyStrategy implements IVMModelProxy { * @param event The event object that the delta is being built for. * @param requestMonitor The result token to invoke when the delta is completed. */ - protected void callChildNodesToBuildDelta(final IVMNode node, final Map childNodes, final ModelDelta delta, final Object event, final RequestMonitor requestMonitor) { + protected void callChildNodesToBuildDelta(final IVMNode node, final Map childNodes, final VMDelta delta, final Object event, final RequestMonitor requestMonitor) { assert childNodes.size() != 0; // Check if any of the child nodes are will generate IModelDelta.SELECT or diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IRootVMNode.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IRootVMNode.java index ff32002244b..7af91afcdde 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IRootVMNode.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IRootVMNode.java @@ -11,7 +11,6 @@ package org.eclipse.dd.dsf.ui.viewmodel; import org.eclipse.dd.dsf.concurrent.DataRequestMonitor; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; /** * Special type of the view model node, which can be used as a root node @@ -42,5 +41,5 @@ public interface IRootVMNode extends IVMNode{ * @param event Event to process. * @param rm Result notification, contains the root of the delta. */ - public void createRootDelta(Object rootObject, Object event, DataRequestMonitor rm); + public void createRootDelta(Object rootObject, Object event, DataRequestMonitor rm); } diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMNode.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMNode.java index 04d8f727229..90036d72736 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMNode.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMNode.java @@ -19,7 +19,6 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; /** * View model nodes are configured with a view model provider to collectively @@ -90,7 +89,7 @@ public interface IVMNode extends IElementContentProvider * @param requestMonitor Return token, which notifies the caller that the calculation is * complete. */ - public void buildDelta(Object event, ModelDelta parent, int nodeOffset, RequestMonitor requestMonitor); + public void buildDelta(Object event, VMDelta parent, int nodeOffset, RequestMonitor requestMonitor); /** * Returns the view model element for the given data model event. This method diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/RootVMNode.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/RootVMNode.java index 5bdda2c409c..ae2895f8b39 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/RootVMNode.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/RootVMNode.java @@ -16,7 +16,6 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpd import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; /** * Default implementation of a root view model node. This class may be sub-classed @@ -53,8 +52,8 @@ public class RootVMNode extends AbstractVMNode implements IRootVMNode { * Default implementation creates a delta assuming that the root layout node * is the input object into the view. */ - public void createRootDelta(Object rootObject, Object event, final DataRequestMonitor rm) { - rm.setData(new ModelDelta(rootObject, 0, IModelDelta.NO_CHANGE)); + public void createRootDelta(Object rootObject, Object event, final DataRequestMonitor rm) { + rm.setData(new VMDelta(rootObject, 0, IModelDelta.NO_CHANGE)); rm.done(); } @@ -63,7 +62,7 @@ public class RootVMNode extends AbstractVMNode implements IRootVMNode { return IModelDelta.NO_CHANGE; } - public void buildDelta(Object event, ModelDelta parent, int nodeOffset, RequestMonitor requestMonitor) { + public void buildDelta(Object event, VMDelta parent, int nodeOffset, RequestMonitor requestMonitor) { requestMonitor.done(); } } diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMDelta.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMDelta.java new file mode 100644 index 00000000000..800d163a303 --- /dev/null +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMDelta.java @@ -0,0 +1,330 @@ +/******************************************************************************* + * Copyright (c) 2005, 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Wind River Systems - adapted to use in DSF + *******************************************************************************/ +package org.eclipse.dd.dsf.ui.viewmodel; + +import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDeltaVisitor; +import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; + +/** + * This delta class mostly just duplicates the ModelDelta implemention, but + * it allows clients to modify the flags after the original object is + * constructed. + * + * @see IModelDelta#getNodes() + */ +@SuppressWarnings("restriction") +public class VMDelta extends ModelDelta { + + private VMDelta fParent; + private Object fElement; + private int fFlags; + private VMDelta[] fNodes = EMPTY_NODES; + private Object fReplacement; + private int fIndex; + private static final VMDelta[] EMPTY_NODES = new VMDelta[0]; + private int fChildCount = -1; + + /** + * Constructs a new delta for the given element. + * + * @param vmcElement model element + * @param flags change flags + */ + public VMDelta(Object element, int flags) { + super(element, flags); + fElement = element; + fFlags = flags; + } + + /** + * Constructs a new delta for the given element to be replaced + * with the specified replacement element. + * + * @param vmcElement model element + * @param replacement replacement element + * @param flags change flags + */ + public VMDelta(Object element, Object replacement, int flags) { + super(element, replacement, flags); + fElement = element; + fReplacement = replacement; + fFlags = flags; + } + + /** + * Constructs a new delta for the given element to be inserted at + * the specified index. + * + * @param vmcElement model element + * @param index insertion position + * @param flags change flags + */ + public VMDelta(Object element, int index, int flags) { + super(element, index, flags); + fElement = element; + fIndex = index; + fFlags = flags; + } + + /** + * Constructs a new delta for the given element at the specified index + * relative to its parent with the given number of children. + * + * @param element model element + * @param index insertion position + * @param flags change flags + * @param childCount number of children this node has + */ + public VMDelta(Object element, int index, int flags, int childCount) { + super(element, index, flags, childCount); + fElement = element; + fIndex = index; + fFlags = flags; + fChildCount = childCount; + } + + /** + * Returns the non-VMC element if one is set, otherwise returns the VMC + * element of this delta node. + * @see org.eclipse.debug.internal.ui.viewers.IModelDelta#getElement() + */ + @Override + public Object getElement() { + return fElement; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.viewers.IModelDelta#getFlags() + */ + @Override + public int getFlags() { + return fFlags; + } + + public void addFlags(int flags) { + fFlags |= flags; + } + + public void setChildCount(int count) { + fChildCount = count; + } + + /** + * Adds a child node to this delta with the given element and change flags, + * and returns the child delta. + * + * @param element child element to add + * @param flags change flags for child + * @return newly created child delta + */ + @Override + public VMDelta addNode(Object element, int flags) { + VMDelta node = new VMDelta(element, flags); + node.setParent(this); + addDelta(node); + return node; + } + + /** + * Adds a child node to this delta to replace the given element with the + * specified replacement element and change flags, and returns the + * newly created child delta. + * + * @param element child element to add to this delta + * @param replacement replacement element for the child element + * @param flags change flags + * @return newly created child delta + */ + @Override + public VMDelta addNode(Object element, Object replacement, int flags) { + VMDelta node = new VMDelta(element, replacement, flags); + node.setParent(this); + addDelta(node); + return node; + } + + /** + * Adds a child delta to this delta to insert the specified element at + * the given index, and returns the newly created child delta. + * + * @param element child element in insert + * @param index index of insertion + * @param flags change flags + * @return newly created child delta + */ + @Override + public VMDelta addNode(Object element, int index, int flags) { + VMDelta node = new VMDelta(element, index, flags); + node.setParent(this); + addDelta(node); + return node; + } + + /** + * Adds a child delta to this delta at the specified index with the + * given number of children, and returns the newly created child delta. + * + * @param element child element in insert + * @param index index of the element relative to parent + * @param flags change flags + * @param numChildren the number of children the element has + * @return newly created child delta + */ + @Override + public VMDelta addNode(Object element, int index, int flags, int numChildren) { + VMDelta node = new VMDelta(element, index, flags, numChildren); + node.setParent(this); + addDelta(node); + return node; + } + + /** + * Sets the parent delta of this delta + * + * @param node parent delta + */ + void setParent(VMDelta node) { + fParent = node; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.viewers.IModelDelta#getParent() + */ + @Override + public VMDelta getParentDelta() { + return fParent; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.viewers.IModelDelta#getReplacementElement() + */ + @Override + public Object getReplacementElement() { + return fReplacement; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.viewers.IModelDelta#getIndex() + */ + @Override + public int getIndex() { + return fIndex; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.viewers.IModelDelta#getNodes() + */ + @Override + public VMDelta[] getChildDeltas() { + return fNodes; + } + + private void addDelta(VMDelta delta) { + if (fNodes.length == 0) { + fNodes = new VMDelta[]{delta}; + } else { + VMDelta[] nodes = new VMDelta[fNodes.length + 1]; + System.arraycopy(fNodes, 0, nodes, 0, fNodes.length); + nodes[fNodes.length] = delta; + fNodes = nodes; + } + } + + @Override + public String toString() { + StringBuffer buf = new StringBuffer(); + buf.append("Model Delta Start\n"); //$NON-NLS-1$ + appendDetail(buf, this); + buf.append("Model Delta End\n"); //$NON-NLS-1$ + return buf.toString(); + } + + private void appendDetail(StringBuffer buf, VMDelta delta) { + buf.append("\tElement: "); //$NON-NLS-1$ + buf.append(delta.getElement()); + buf.append('\n'); + buf.append("\t\tFlags: "); //$NON-NLS-1$ + int flags = delta.getFlags(); + if (flags == 0) { + buf.append("NO_CHANGE"); //$NON-NLS-1$ + } else { + if ((flags & IModelDelta.ADDED) > 0) { + buf.append("ADDED | "); //$NON-NLS-1$ + } + if ((flags & IModelDelta.CONTENT) > 0) { + buf.append("CONTENT | "); //$NON-NLS-1$ + } + if ((flags & IModelDelta.EXPAND) > 0) { + buf.append("EXPAND | "); //$NON-NLS-1$ + } + if ((flags & IModelDelta.INSERTED) > 0) { + buf.append("INSERTED | "); //$NON-NLS-1$ + } + if ((flags & IModelDelta.REMOVED) > 0) { + buf.append("REMOVED | "); //$NON-NLS-1$ + } + if ((flags & IModelDelta.REPLACED) > 0) { + buf.append("REPLACED | "); //$NON-NLS-1$ + } + if ((flags & IModelDelta.SELECT) > 0) { + buf.append("SELECT | "); //$NON-NLS-1$ + } + if ((flags & IModelDelta.STATE) > 0) { + buf.append("STATE | "); //$NON-NLS-1$ + } + if ((flags & IModelDelta.INSTALL) > 0) { + buf.append("INSTALL | "); //$NON-NLS-1$ + } + if ((flags & IModelDelta.UNINSTALL) > 0) { + buf.append("UNINSTALL | "); //$NON-NLS-1$ + } + } + buf.append('\n'); + buf.append("\t\tIndex: "); //$NON-NLS-1$ + buf.append(delta.fIndex); + buf.append(" Child Count: "); //$NON-NLS-1$ + buf.append(delta.fChildCount); + buf.append('\n'); + IModelDelta[] nodes = delta.getChildDeltas(); + for (int i = 0; i < nodes.length; i++) { + appendDetail(buf, (VMDelta)nodes[i]); + } + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta#getChildCount() + */ + @Override + public int getChildCount() { + return fChildCount; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta#accept(org.eclipse.debug.internal.ui.viewers.provisional.IModelDeltaVisitor) + */ + @Override + public void accept(IModelDeltaVisitor visitor) { + doAccept(visitor, 0); + } + + @Override + protected void doAccept(IModelDeltaVisitor visitor, int depth) { + if (visitor.visit(this, depth)) { + ModelDelta[] childDeltas = getChildDeltas(); + for (int i = 0; i < childDeltas.length; i++) { + ((VMDelta)childDeltas[i]).doAccept(visitor, depth+1); + } + } + } + +}