Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java')
-rw-r--r--dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java432
1 files changed, 219 insertions, 213 deletions
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java
index c437e0815c3..dfef8f40583 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java
@@ -42,280 +42,286 @@ import org.eclipse.jface.viewers.TreePath;
/**
* A VM node for displaying a single expression in the expression hover.
- *
+ *
* @since 2.1
*/
public class SingleExpressionVMNode extends AbstractVMNode implements IElementLabelProvider {
private static class RootDMVMContext extends AbstractVMContext implements IDMVMContext {
private final IDMContext fDmc;
+
public RootDMVMContext(IVMNode node, IDMContext dmc) {
super(node);
fDmc = dmc;
}
- @Override
+
+ @Override
public IDMContext getDMContext() {
return fDmc;
}
+
@SuppressWarnings("unchecked")
@Override
public <T> T getAdapter(Class<T> adapter) {
- T superAdapter = super.getAdapter(adapter);
- if (superAdapter != null) {
- return superAdapter;
- } else {
- // Delegate to the Data Model to find the context.
- if (adapter.isInstance(fDmc)) {
- return (T)fDmc;
- } else {
- return fDmc.getAdapter(adapter);
- }
- }
+ T superAdapter = super.getAdapter(adapter);
+ if (superAdapter != null) {
+ return superAdapter;
+ } else {
+ // Delegate to the Data Model to find the context.
+ if (adapter.isInstance(fDmc)) {
+ return (T) fDmc;
+ } else {
+ return fDmc.getAdapter(adapter);
+ }
+ }
}
@Override
public boolean equals(Object other) {
- if (this == other) {
- return true;
- }
- if (other instanceof RootDMVMContext) {
- RootDMVMContext otherVmc = (RootDMVMContext)other;
- return getVMNode().equals(otherVmc.getVMNode()) && fDmc.equals(otherVmc.fDmc);
- }
- return false;
+ if (this == other) {
+ return true;
+ }
+ if (other instanceof RootDMVMContext) {
+ RootDMVMContext otherVmc = (RootDMVMContext) other;
+ return getVMNode().equals(otherVmc.getVMNode()) && fDmc.equals(otherVmc.fDmc);
+ }
+ return false;
}
@Override
public int hashCode() {
- return getVMNode().hashCode() + fDmc.hashCode();
+ return getVMNode().hashCode() + fDmc.hashCode();
}
- @Override
- public String toString() {
- return fDmc.toString();
- }
+ @Override
+ public String toString() {
+ return fDmc.toString();
+ }
}
private static class SimpleExpression implements IExpression {
private String fExpressionText;
+
SimpleExpression(String text) {
fExpressionText = text;
}
- @Override
+
+ @Override
public void dispose() {
}
- @Override
+
+ @Override
public IDebugTarget getDebugTarget() {
return null;
}
- @Override
+
+ @Override
public String getExpressionText() {
return fExpressionText;
}
- @Override
+
+ @Override
public IValue getValue() {
return null;
}
- @Override
+
+ @Override
public ILaunch getLaunch() {
return null;
}
- @Override
+
+ @Override
public String getModelIdentifier() {
return null;
}
- @Override
+
+ @Override
public <T> T getAdapter(Class<T> adapter) {
return null;
}
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof SimpleExpression) {
- return fExpressionText.equals(((SimpleExpression) obj).getExpressionText());
- }
- return false;
- }
- @Override
- public int hashCode() {
- return fExpressionText.hashCode();
- }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof SimpleExpression) {
+ return fExpressionText.equals(((SimpleExpression) obj).getExpressionText());
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return fExpressionText.hashCode();
+ }
}
- public SingleExpressionVMNode(ExpressionVMProvider provider) {
- super(provider);
- }
+ public SingleExpressionVMNode(ExpressionVMProvider provider) {
+ super(provider);
+ }
+
+ @Override
+ public String toString() {
+ return "SingleExpressionVMNode"; //$NON-NLS-1$
+ }
+
+ private ExpressionVMProvider getExpressionVMProvider() {
+ return (ExpressionVMProvider) getVMProvider();
+ }
+
+ private IExpressionDMContext getUpdateExpressionDMC(IViewerUpdate update) {
+ if (update.getElement() instanceof IDMVMContext) {
+ IDMContext dmc = ((IDMVMContext) update.getElement()).getDMContext();
+ if (dmc instanceof IExpressionDMContext) {
+ return (IExpressionDMContext) dmc;
+ }
+ }
+ return null;
+ }
@Override
- public String toString() {
- return "SingleExpressionVMNode"; //$NON-NLS-1$
- }
-
- private ExpressionVMProvider getExpressionVMProvider() {
- return (ExpressionVMProvider)getVMProvider();
- }
-
- private IExpressionDMContext getUpdateExpressionDMC(IViewerUpdate update) {
- if (update.getElement() instanceof IDMVMContext) {
- IDMContext dmc = ((IDMVMContext)update.getElement()).getDMContext();
- if (dmc instanceof IExpressionDMContext) {
- return (IExpressionDMContext)dmc;
- }
- }
- return null;
- }
-
-
- @Override
public void update(IHasChildrenUpdate[] updates) {
- for (int i = 0; i < updates.length; i++) {
- updates[i].setHasChilren(getUpdateExpressionDMC(updates[i]) != null);
- updates[i].done();
- }
- }
-
- @Override
+ for (int i = 0; i < updates.length; i++) {
+ updates[i].setHasChilren(getUpdateExpressionDMC(updates[i]) != null);
+ updates[i].done();
+ }
+ }
+
+ @Override
public void update(IChildrenCountUpdate[] updates) {
- for (IChildrenCountUpdate update : updates) {
- if (!checkUpdate(update)) continue;
-
- // We assume that the getExpressions() will just read local state data,
- // so we don't bother using a job to perform this operation.
- update.setChildCount(getUpdateExpressionDMC(update) != null ? 1 : 0);
- update.done();
- }
- }
-
- @Override
+ for (IChildrenCountUpdate update : updates) {
+ if (!checkUpdate(update))
+ continue;
+
+ // We assume that the getExpressions() will just read local state data,
+ // so we don't bother using a job to perform this operation.
+ update.setChildCount(getUpdateExpressionDMC(update) != null ? 1 : 0);
+ update.done();
+ }
+ }
+
+ @Override
public void update(final IChildrenUpdate[] updates) {
- for (IChildrenUpdate update : updates) {
- IExpressionDMContext dmc = getUpdateExpressionDMC(update);
- if (dmc != null) {
- doUpdateChildren(update, new SimpleExpression(dmc.getExpression()));
- }
- else {
- handleFailedUpdate(update);
- }
- }
- }
-
- public void doUpdateChildren(final IChildrenUpdate update, final IExpression expression) {
- // getElementForExpression() accepts a IElementsUpdate as an argument.
- // Construct an instance of VMElementsUpdate which will call a
- // the request monitor when it is finished. The request monitor
- // will in turn set the element in the update argument in this method.
- ((ExpressionVMProvider)getVMProvider()).update(
- new VMExpressionUpdate(
- update, expression,
- new ViewerDataRequestMonitor<Object>(getVMProvider().getExecutor(), update) {
- @Override
- protected void handleSuccess() {
- update.setChild(getData(), 0);
- update.done();
- }
-
- @Override
- protected void handleError() {
- update.setChild(new InvalidExpressionVMContext(SingleExpressionVMNode.this, expression), 0);
- update.done();
- }
- })
- );
- }
-
- @Override
- public void update(ILabelUpdate[] updates) {
- // The label update handler only handles labels for the invalid expression VMCs.
- // The expression layout nodes are responsible for supplying label providers
- // for their VMCs.
- for (ILabelUpdate update : updates) {
- update.done();
- }
- }
-
- @Override
- public int getDeltaFlags(Object event) {
- int retVal = 0;
-
- // Add a flag if the list of expressions in the global expression manager has changed.
- if (event instanceof ExpressionsChangedEvent) {
- retVal |= IModelDelta.ADDED | IModelDelta.REMOVED | IModelDelta.INSERTED | IModelDelta.CONTENT ;
- }
-
- // The expression in the hover is not known here, so assume that all
- // expression nodes need to provide delta flags for event. Iterate
- // through them here and collect the flags.
- for (IExpressionVMNode node : getExpressionVMProvider().getExpressionNodes()) {
- retVal |= getDeltaFlagsForNode(node, event);
- }
-
- return retVal;
- }
-
- private int getDeltaFlagsForNode(IVMNode node, Object event) {
- int retVal = node.getDeltaFlags(event);
- for (IVMNode child : getVMProvider().getChildVMNodes(node)) {
- if (!node.equals(child)) {
- retVal |= getDeltaFlagsForNode(child, event);
- }
- }
- return retVal;
- }
-
- @Override
- public void buildDelta(final Object event, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) {
- if (event instanceof ExpressionsChangedEvent) {
- buildDeltaForExpressionsChangedEvent((ExpressionsChangedEvent)event, parentDelta, nodeOffset, requestMonitor);
- } else {
- Object parent = parentDelta.getElement();
- if (parent instanceof IDMVMContext) {
- IDMContext dmc = ((IDMVMContext)parent).getDMContext();
- if (dmc instanceof IExpressionDMContext) {
- IExpression expression = new SimpleExpression( ((IExpressionDMContext)dmc).getExpression() );
- int flags = getExpressionVMProvider().getDeltaFlagsForExpression(expression, event);
- // If the given expression has no delta flags, skip it.
- if (flags != IModelDelta.NO_CHANGE) {
- getExpressionVMProvider().buildDeltaForExpression(
- expression, nodeOffset, event, parentDelta, getTreePathFromDelta(parentDelta),
- requestMonitor);
- return;
- }
- }
- }
- requestMonitor.done();
- }
- }
-
- private void buildDeltaForExpressionsChangedEvent(ExpressionsChangedEvent event, VMDelta parentDelta,
- int nodeOffset, RequestMonitor requestMonitor)
- {
- CountingRequestMonitor multiRm = new CountingRequestMonitor(getExecutor(), requestMonitor);
- for (int i = 0; i < event.getExpressions().length; i++) {
- int expIndex = event.getIndex() != -1
- ? nodeOffset + event.getIndex() + i
- : -1;
- getExpressionVMProvider().buildDeltaForExpression(
- event.getExpressions()[i], expIndex, event, parentDelta, getTreePathFromDelta(parentDelta),
- new RequestMonitor(getExecutor(), multiRm));
- }
- multiRm.setDoneCount(event.getExpressions().length);
- }
-
- private TreePath getTreePathFromDelta(IModelDelta delta) {
- List<Object> elementList = new LinkedList<Object>();
- IModelDelta listDelta = delta;
- elementList.add(0, listDelta.getElement());
- while (listDelta.getParentDelta() != null) {
- elementList.add(0, listDelta.getElement());
- listDelta = listDelta.getParentDelta();
- }
- return new TreePath(elementList.toArray());
- }
+ for (IChildrenUpdate update : updates) {
+ IExpressionDMContext dmc = getUpdateExpressionDMC(update);
+ if (dmc != null) {
+ doUpdateChildren(update, new SimpleExpression(dmc.getExpression()));
+ } else {
+ handleFailedUpdate(update);
+ }
+ }
+ }
+
+ public void doUpdateChildren(final IChildrenUpdate update, final IExpression expression) {
+ // getElementForExpression() accepts a IElementsUpdate as an argument.
+ // Construct an instance of VMElementsUpdate which will call a
+ // the request monitor when it is finished. The request monitor
+ // will in turn set the element in the update argument in this method.
+ ((ExpressionVMProvider) getVMProvider()).update(new VMExpressionUpdate(update, expression,
+ new ViewerDataRequestMonitor<Object>(getVMProvider().getExecutor(), update) {
+ @Override
+ protected void handleSuccess() {
+ update.setChild(getData(), 0);
+ update.done();
+ }
+
+ @Override
+ protected void handleError() {
+ update.setChild(new InvalidExpressionVMContext(SingleExpressionVMNode.this, expression), 0);
+ update.done();
+ }
+ }));
+ }
+
+ @Override
+ public void update(ILabelUpdate[] updates) {
+ // The label update handler only handles labels for the invalid expression VMCs.
+ // The expression layout nodes are responsible for supplying label providers
+ // for their VMCs.
+ for (ILabelUpdate update : updates) {
+ update.done();
+ }
+ }
+
+ @Override
+ public int getDeltaFlags(Object event) {
+ int retVal = 0;
+
+ // Add a flag if the list of expressions in the global expression manager has changed.
+ if (event instanceof ExpressionsChangedEvent) {
+ retVal |= IModelDelta.ADDED | IModelDelta.REMOVED | IModelDelta.INSERTED | IModelDelta.CONTENT;
+ }
+
+ // The expression in the hover is not known here, so assume that all
+ // expression nodes need to provide delta flags for event. Iterate
+ // through them here and collect the flags.
+ for (IExpressionVMNode node : getExpressionVMProvider().getExpressionNodes()) {
+ retVal |= getDeltaFlagsForNode(node, event);
+ }
+
+ return retVal;
+ }
+
+ private int getDeltaFlagsForNode(IVMNode node, Object event) {
+ int retVal = node.getDeltaFlags(event);
+ for (IVMNode child : getVMProvider().getChildVMNodes(node)) {
+ if (!node.equals(child)) {
+ retVal |= getDeltaFlagsForNode(child, event);
+ }
+ }
+ return retVal;
+ }
+
+ @Override
+ public void buildDelta(final Object event, final VMDelta parentDelta, final int nodeOffset,
+ final RequestMonitor requestMonitor) {
+ if (event instanceof ExpressionsChangedEvent) {
+ buildDeltaForExpressionsChangedEvent((ExpressionsChangedEvent) event, parentDelta, nodeOffset,
+ requestMonitor);
+ } else {
+ Object parent = parentDelta.getElement();
+ if (parent instanceof IDMVMContext) {
+ IDMContext dmc = ((IDMVMContext) parent).getDMContext();
+ if (dmc instanceof IExpressionDMContext) {
+ IExpression expression = new SimpleExpression(((IExpressionDMContext) dmc).getExpression());
+ int flags = getExpressionVMProvider().getDeltaFlagsForExpression(expression, event);
+ // If the given expression has no delta flags, skip it.
+ if (flags != IModelDelta.NO_CHANGE) {
+ getExpressionVMProvider().buildDeltaForExpression(expression, nodeOffset, event, parentDelta,
+ getTreePathFromDelta(parentDelta), requestMonitor);
+ return;
+ }
+ }
+ }
+ requestMonitor.done();
+ }
+ }
+
+ private void buildDeltaForExpressionsChangedEvent(ExpressionsChangedEvent event, VMDelta parentDelta,
+ int nodeOffset, RequestMonitor requestMonitor) {
+ CountingRequestMonitor multiRm = new CountingRequestMonitor(getExecutor(), requestMonitor);
+ for (int i = 0; i < event.getExpressions().length; i++) {
+ int expIndex = event.getIndex() != -1 ? nodeOffset + event.getIndex() + i : -1;
+ getExpressionVMProvider().buildDeltaForExpression(event.getExpressions()[i], expIndex, event, parentDelta,
+ getTreePathFromDelta(parentDelta), new RequestMonitor(getExecutor(), multiRm));
+ }
+ multiRm.setDoneCount(event.getExpressions().length);
+ }
+
+ private TreePath getTreePathFromDelta(IModelDelta delta) {
+ List<Object> elementList = new LinkedList<Object>();
+ IModelDelta listDelta = delta;
+ elementList.add(0, listDelta.getElement());
+ while (listDelta.getParentDelta() != null) {
+ elementList.add(0, listDelta.getElement());
+ listDelta = listDelta.getParentDelta();
+ }
+ return new TreePath(elementList.toArray());
+ }
public IDMVMContext createVMContext(IDMContext dmc) {
- return new RootDMVMContext(getVMProvider().getRootVMNode(), dmc);
- }
+ return new RootDMVMContext(getVMProvider().getRootVMNode(), dmc);
+ }
}

Back to the top