Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/GdbVariableVMNode.java')
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/GdbVariableVMNode.java578
1 files changed, 281 insertions, 297 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/GdbVariableVMNode.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/GdbVariableVMNode.java
index a59c757b46c..1fe6d290a0f 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/GdbVariableVMNode.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/GdbVariableVMNode.java
@@ -97,53 +97,53 @@ public class GdbVariableVMNode extends VariableVMNode {
// fillUpdateWithVMCs. fillUpdateWithVMCs checks whether there are
// limit + 1 children, and if so, will create an IncompleteChildrenVMC
// for the last child, discarding the original expression context.
-
+
/**
* Specialization of VariableVMNode.VariableExpressionVMC that participates
* in the "Add Watchpoint" object contribution action.
*/
public class GdbVariableExpressionVMC extends VariableVMNode.VariableExpressionVMC implements ICWatchpointTarget {
-
+
/**
* Constructor (passthru)
*/
public GdbVariableExpressionVMC(IDMContext dmc) {
- super(dmc);
- }
-
+ super(dmc);
+ }
+
/* (non-Javadoc)
* @see org.eclipse.cdt.debug.internal.core.IWatchpointTarget#getSize()
*/
- @Override
+ @Override
public void getSize(final ICWatchpointTarget.GetSizeRequest request) {
- final IExpressionDMContext exprDmc = DMContexts.getAncestorOfType(getDMContext(), IExpressionDMContext.class);
+ final IExpressionDMContext exprDmc = DMContexts.getAncestorOfType(getDMContext(),
+ IExpressionDMContext.class);
if (exprDmc != null) {
- getSession().getExecutor().execute(new Runnable() {
- @Override
- public void run() {
- final IExpressions expressionService = getServicesTracker().getService(IExpressions.class);
- if (expressionService != null) {
- final DataRequestMonitor<IExpressionDMAddress> drm = new DataRequestMonitor<IExpressionDMAddress>(getSession().getExecutor(), null) {
- @Override
+ getSession().getExecutor().execute(new Runnable() {
+ @Override
+ public void run() {
+ final IExpressions expressionService = getServicesTracker().getService(IExpressions.class);
+ if (expressionService != null) {
+ final DataRequestMonitor<IExpressionDMAddress> drm = new DataRequestMonitor<IExpressionDMAddress>(
+ getSession().getExecutor(), null) {
+ @Override
public void handleCompleted() {
- if (isSuccess()) {
- request.setSize(getData().getSize());
- }
- request.setStatus(getStatus());
- request.done();
- }
- };
-
- expressionService.getExpressionAddressData(exprDmc, drm);
- }
- else {
- request.setStatus(internalError());
- request.done();
- }
- }
- });
- }
- else {
+ if (isSuccess()) {
+ request.setSize(getData().getSize());
+ }
+ request.setStatus(getStatus());
+ request.done();
+ }
+ };
+
+ expressionService.getExpressionAddressData(exprDmc, drm);
+ } else {
+ request.setStatus(internalError());
+ request.done();
+ }
+ }
+ });
+ } else {
request.setStatus(internalError());
request.done();
}
@@ -152,40 +152,40 @@ public class GdbVariableVMNode extends VariableVMNode {
/* (non-Javadoc)
* @see org.eclipse.cdt.debug.internal.core.IWatchpointTarget#canCreateWatchpoint(org.eclipse.cdt.debug.internal.core.IWatchpointTarget.CanCreateWatchpointRequest)
*/
- @Override
+ @Override
public void canSetWatchpoint(final ICWatchpointTarget.CanCreateWatchpointRequest request) {
// If the expression is an l-value, then we say it supports a
// watchpoint. The logic here is basically the same as what's in
// getSize(), as the same DSF service method tells us (a) if it's an
// lvalue, and (b) its size.
- final IExpressionDMContext exprDmc = DMContexts.getAncestorOfType(getDMContext(), IExpressionDMContext.class);
+ final IExpressionDMContext exprDmc = DMContexts.getAncestorOfType(getDMContext(),
+ IExpressionDMContext.class);
if (exprDmc != null) {
- getSession().getExecutor().execute(new Runnable() {
- @Override
- public void run() {
- final IExpressions expressionService = getServicesTracker().getService(IExpressions.class);
- if (expressionService != null) {
- final DataRequestMonitor<IExpressionDMAddress> drm = new DataRequestMonitor<IExpressionDMAddress>(getSession().getExecutor(), null) {
- @Override
+ getSession().getExecutor().execute(new Runnable() {
+ @Override
+ public void run() {
+ final IExpressions expressionService = getServicesTracker().getService(IExpressions.class);
+ if (expressionService != null) {
+ final DataRequestMonitor<IExpressionDMAddress> drm = new DataRequestMonitor<IExpressionDMAddress>(
+ getSession().getExecutor(), null) {
+ @Override
public void handleCompleted() {
- if (isSuccess()) {
- request.setCanCreate(getData().getSize() > 0);
- }
- request.setStatus(getStatus());
- request.done();
- }
- };
-
- expressionService.getExpressionAddressData(exprDmc, drm);
- }
- else {
- request.setStatus(internalError());
- request.done();
- }
- }
- });
- }
- else {
+ if (isSuccess()) {
+ request.setCanCreate(getData().getSize() > 0);
+ }
+ request.setStatus(getStatus());
+ request.done();
+ }
+ };
+
+ expressionService.getExpressionAddressData(exprDmc, drm);
+ } else {
+ request.setStatus(internalError());
+ request.done();
+ }
+ }
+ });
+ } else {
request.setStatus(internalError());
request.done();
}
@@ -199,19 +199,19 @@ public class GdbVariableVMNode extends VariableVMNode {
}
return super.canViewInMemory();
}
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
@Override
- public Object getAdapter(Class adapter) {
- if (adapter.isAssignableFrom(IWatchExpressionFactoryAdapter2.class)) {
- return fGdbVariableExpressionFactory;
- }
- return super.getAdapter(adapter);
- }
+ public Object getAdapter(Class adapter) {
+ if (adapter.isAssignableFrom(IWatchExpressionFactoryAdapter2.class)) {
+ return fGdbVariableExpressionFactory;
+ }
+ return super.getAdapter(adapter);
+ }
};
-
+
private static boolean isConvenienceVariable(String expr) {
- // GDB convenience variables are variables that start with a $ followed
+ // GDB convenience variables are variables that start with a $ followed
// by at least one digit.
// Note that registers also start with a $, so we need to make sure
// there is a digit immediately following the $.
@@ -222,12 +222,12 @@ public class GdbVariableVMNode extends VariableVMNode {
// Convenience variables are used for return values of methods calls.
// see bug 341731
if (expr.matches(".*" + "\\$\\d" + ".*")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- return true;
+ return true;
}
return false;
}
-
+
private static boolean isRegisterExpression(String expr) {
// Registers expressions start with a $ followed by a non-digit.
// We must check for the non-digit because we need to make sure
@@ -237,7 +237,7 @@ public class GdbVariableVMNode extends VariableVMNode {
// such as (int)($eax)
// So, we look for a $ followed by a non-digit, anywhere in the expression.
if (expr.matches(".*" + "\\$\\D" + ".*")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- return true;
+ return true;
}
return false;
@@ -246,31 +246,31 @@ public class GdbVariableVMNode extends VariableVMNode {
/**
* A factory to control the "Watch" action for GDB variables.
*/
- protected class GdbVariableExpressionFactory extends VariableExpressionFactory {
- @Override
- public boolean canCreateWatchExpression(Object element) {
- if (element instanceof VariableExpressionVMC) {
- String expression = ((VariableExpressionVMC)element).getExpression();
- if (isConvenienceVariable(expression)) {
- return false;
- }
- }
-
- return super.canCreateWatchExpression(element);
- }
- }
-
- final protected VariableExpressionFactory fGdbVariableExpressionFactory = new GdbVariableExpressionFactory();
+ protected class GdbVariableExpressionFactory extends VariableExpressionFactory {
+ @Override
+ public boolean canCreateWatchExpression(Object element) {
+ if (element instanceof VariableExpressionVMC) {
+ String expression = ((VariableExpressionVMC) element).getExpression();
+ if (isConvenienceVariable(expression)) {
+ return false;
+ }
+ }
+
+ return super.canCreateWatchExpression(element);
+ }
+ }
+
+ final protected VariableExpressionFactory fGdbVariableExpressionFactory = new GdbVariableExpressionFactory();
/**
* The special context representing more children to be available.
- *
+ *
* @since 3.0
*/
public class IncompleteChildrenVMC extends AbstractVMContext {
private IExpressionDMContext parentDmc;
-
+
public IncompleteChildrenVMC(IExpressionDMContext exprDmc, int childCountLimit) {
super(GdbVariableVMNode.this);
this.parentDmc = exprDmc;
@@ -278,8 +278,7 @@ public class GdbVariableVMNode extends VariableVMNode {
@Override
public boolean equals(Object obj) {
- return obj instanceof IncompleteChildrenVMC &&
- ((IncompleteChildrenVMC)obj).parentDmc.equals(parentDmc);
+ return obj instanceof IncompleteChildrenVMC && ((IncompleteChildrenVMC) obj).parentDmc.equals(parentDmc);
}
@Override
@@ -289,20 +288,21 @@ public class GdbVariableVMNode extends VariableVMNode {
public IExpressionDMContext getParentDMContext() {
return parentDmc;
- }
+ }
}
-
+
/**
* Maps expressions to their current limit on the maximum number of children.
*/
private Map<IExpressionDMContext, Integer> childCountLimits = new HashMap<IExpressionDMContext, Integer>();
/**
- * Utility method to create an IStatus object for an internal error
+ * Utility method to create an IStatus object for an internal error
*/
private static Status internalError() {
return new Status(Status.ERROR, GdbUIPlugin.getUniqueIdentifier(), Messages.Internal_Error);
}
+
/**
* Constructor (passthru)
*/
@@ -317,14 +317,14 @@ public class GdbVariableVMNode extends VariableVMNode {
* "Add Watchpoint" context menu appears for variables and expressions in
* GDB-DSF sessions but not necessarily other DSF-based sessions [bugzilla
* 248606]
- *
+ *
* @see org.eclipse.cdt.dsf.debug.ui.viewmodel.variable.VariableVMNode#createVMContext(org.eclipse.cdt.dsf.datamodel.IDMContext)
*/
- @Override
- protected IDMVMContext createVMContext(IDMContext dmc) {
- return new GdbVariableExpressionVMC(dmc);
- }
-
+ @Override
+ protected IDMVMContext createVMContext(IDMContext dmc) {
+ return new GdbVariableExpressionVMC(dmc);
+ }
+
@Override
protected void updateHasElementsInSessionThread(final IHasChildrenUpdate update) {
if (update.getElement() instanceof IncompleteChildrenVMC) {
@@ -332,88 +332,88 @@ public class GdbVariableVMNode extends VariableVMNode {
update.done();
return;
}
-
+
super.updateHasElementsInSessionThread(update);
}
-
+
@Override
protected void updateElementCountInSessionThread(final IChildrenCountUpdate update) {
- // Get the data model context object for the current node in the hierarchy.
-
- final IExpressionDMContext expressionDMC = findDmcInPath(update.getViewerInput(), update.getElementPath(), IExpressionDMContext.class);
-
- if ( expressionDMC != null ) {
- final IExpressions expressionService = getServicesTracker().getService(IExpressions.class);
-
- if (expressionService == null) {
- handleFailedUpdate(update);
- return;
- }
-
- if (expressionService instanceof IMIExpressions) {
- final IMIExpressions miExpressions = (IMIExpressions) expressionService;
+ // Get the data model context object for the current node in the hierarchy.
+
+ final IExpressionDMContext expressionDMC = findDmcInPath(update.getViewerInput(), update.getElementPath(),
+ IExpressionDMContext.class);
+
+ if (expressionDMC != null) {
+ final IExpressions expressionService = getServicesTracker().getService(IExpressions.class);
+
+ if (expressionService == null) {
+ handleFailedUpdate(update);
+ return;
+ }
+
+ if (expressionService instanceof IMIExpressions) {
+ final IMIExpressions miExpressions = (IMIExpressions) expressionService;
miExpressions.safeToAskForAllSubExpressions(expressionDMC,
new ViewerDataRequestMonitor<Boolean>(getSession().getExecutor(), update) {
- @Override
- protected void handleCompleted() {
- if (! isSuccess()) {
- handleFailedUpdate(update);
- return;
- }
+ @Override
+ protected void handleCompleted() {
+ if (!isSuccess()) {
+ handleFailedUpdate(update);
+ return;
+ }
+
+ boolean limitRequired = !getData().booleanValue();
+ if (limitRequired) {
+
+ final int childCountLimit = getOrInitChildCountLimit(expressionDMC);
+
+ miExpressions.getSubExpressionCount(expressionDMC, childCountLimit + 1,
+ new ViewerDataRequestMonitor<Integer>(getExecutor(), update) {
+ @Override
+ public void handleCompleted() {
+ if (!isSuccess()) {
+ handleFailedUpdate(update);
+ return;
+ }
+
+ int childCount = getData();
+ if (childCountLimit < childCount) {
+ childCount = childCountLimit + 1;
+ }
+
+ update.setChildCount(childCount);
+ update.done();
+ }
+ });
+ } else {
+ GdbVariableVMNode.super.updateElementCountInSessionThread(update);
+ }
+ }
+ });
+
+ return;
+ }
+ }
- boolean limitRequired = ! getData().booleanValue();
- if (limitRequired) {
-
- final int childCountLimit = getOrInitChildCountLimit(expressionDMC);
-
- miExpressions.getSubExpressionCount(
- expressionDMC, childCountLimit + 1,
- new ViewerDataRequestMonitor<Integer>(getExecutor(), update) {
- @Override
- public void handleCompleted() {
- if (!isSuccess()) {
- handleFailedUpdate(update);
- return;
- }
-
- int childCount = getData();
- if (childCountLimit < childCount) {
- childCount = childCountLimit + 1;
- }
-
- update.setChildCount(childCount);
- update.done();
- }
- });
- } else {
- GdbVariableVMNode.super.updateElementCountInSessionThread(update);
- }
- }
- });
-
- return;
- }
- }
-
- super.updateElementCountInSessionThread(update);
+ super.updateElementCountInSessionThread(update);
}
@Override
- protected void fillUpdateWithVMCs(IChildrenUpdate update,
- IDMContext[] dmcs, int firstIndex) {
+ protected void fillUpdateWithVMCs(IChildrenUpdate update, IDMContext[] dmcs, int firstIndex) {
super.fillUpdateWithVMCs(update, dmcs, firstIndex);
-
- IExpressionDMContext expressionDMC = findDmcInPath(update.getViewerInput(), update.getElementPath(), IExpressionDMContext.class);
-
- if (expressionDMC != null) {
- int childCountLimit = getChildCountLimit(expressionDMC);
- int childCount = firstIndex + update.getLength();
- if (childCountLimit < childCount) {
- update.setChild(new IncompleteChildrenVMC(expressionDMC, childCountLimit), childCountLimit);
- }
- }
+
+ IExpressionDMContext expressionDMC = findDmcInPath(update.getViewerInput(), update.getElementPath(),
+ IExpressionDMContext.class);
+
+ if (expressionDMC != null) {
+ int childCountLimit = getChildCountLimit(expressionDMC);
+ int childCount = firstIndex + update.getLength();
+ if (childCountLimit < childCount) {
+ update.setChild(new IncompleteChildrenVMC(expressionDMC, childCountLimit), childCountLimit);
+ }
+ }
}
@Override
@@ -422,14 +422,11 @@ public class GdbVariableVMNode extends VariableVMNode {
for (IPropertiesUpdate update : updates) {
if (update.getElement() instanceof IncompleteChildrenVMC) {
- if (update.getProperties().contains(
- AbstractExpressionVMNode.PROP_ELEMENT_EXPRESSION)) {
- update.setProperty(
- AbstractExpressionVMNode.PROP_ELEMENT_EXPRESSION,
- Messages.More_Children);
+ if (update.getProperties().contains(AbstractExpressionVMNode.PROP_ELEMENT_EXPRESSION)) {
+ update.setProperty(AbstractExpressionVMNode.PROP_ELEMENT_EXPRESSION, Messages.More_Children);
}
-
+
if (update.getProperties().contains(PROP_NAME)) {
update.setProperty(PROP_NAME, Messages.More_Children);
}
@@ -438,26 +435,25 @@ public class GdbVariableVMNode extends VariableVMNode {
realExpressions.add(update);
}
}
-
+
super.update(realExpressions.toArray(new IPropertiesUpdate[realExpressions.size()]));
}
private int getInitialChildCountLimit() {
- Object initialLimitProperty = getVMProvider().getPresentationContext().getProperty(
- IGdbDebugPreferenceConstants.PREF_INITIAL_CHILD_COUNT_LIMIT_FOR_COLLECTIONS);
-
- return (initialLimitProperty instanceof Integer) ? (Integer) initialLimitProperty
- : 100;
+ Object initialLimitProperty = getVMProvider().getPresentationContext()
+ .getProperty(IGdbDebugPreferenceConstants.PREF_INITIAL_CHILD_COUNT_LIMIT_FOR_COLLECTIONS);
+
+ return (initialLimitProperty instanceof Integer) ? (Integer) initialLimitProperty : 100;
}
-
+
/**
* The given expression context requires a child count limit. If a limit
* is already available from preceding calls, obtain this limit. Otherwise
* calculate the initial value, store it, and return it.
- *
+ *
* @param expressionDMC
* @return The child count limit to apply for the given expression.
- *
+ *
* @since 3.0
*/
protected int getOrInitChildCountLimit(IExpressionDMContext expressionDMC) {
@@ -467,77 +463,75 @@ public class GdbVariableVMNode extends VariableVMNode {
int initialLimit = getInitialChildCountLimit();
childCountLimits.put(expressionDMC, initialLimit);
-
+
return initialLimit;
}
-
+
/**
* @param expressionDMC
* @return The currently stored child count limit for the given expression,
* or {@link Integer#MAX_VALUE} if no child count limit is currently
* stored.
- *
+ *
* @since 3.0
*/
protected int getChildCountLimit(IExpressionDMContext expressionDMC) {
if (childCountLimits.containsKey(expressionDMC)) {
return childCountLimits.get(expressionDMC);
}
- return Integer.MAX_VALUE;
+ return Integer.MAX_VALUE;
}
-
- private void resetChildCountLimits(IExecutionDMContext execCtx) {
- int initialLimit = getInitialChildCountLimit();
- for (IExpressionDMContext limitCtx : childCountLimits.keySet()) {
- if (DMContexts.isAncestorOf(limitCtx, execCtx)) {
- childCountLimits.put(limitCtx, initialLimit);
- }
+
+ private void resetChildCountLimits(IExecutionDMContext execCtx) {
+ int initialLimit = getInitialChildCountLimit();
+ for (IExpressionDMContext limitCtx : childCountLimits.keySet()) {
+ if (DMContexts.isAncestorOf(limitCtx, execCtx)) {
+ childCountLimits.put(limitCtx, initialLimit);
+ }
}
- }
-
- private void resetAllChildCountLimits() {
- int initialLimit = getInitialChildCountLimit();
- for (IExpressionDMContext limitCtx : childCountLimits.keySet()) {
- childCountLimits.put(limitCtx, initialLimit);
+ }
+
+ private void resetAllChildCountLimits() {
+ int initialLimit = getInitialChildCountLimit();
+ for (IExpressionDMContext limitCtx : childCountLimits.keySet()) {
+ childCountLimits.put(limitCtx, initialLimit);
}
- }
-
+ }
+
/**
* Increment the child count limit by the default increment.
* This implementation doubles the current limit.
- *
+ *
* @since 3.0
*/
public void incrementChildCountLimit(IExpressionDMContext expressionDMC) {
- assert(childCountLimits.containsKey(expressionDMC));
-
+ assert (childCountLimits.containsKey(expressionDMC));
+
int childCountLimit = getChildCountLimit(expressionDMC);
if (childCountLimit < Integer.MAX_VALUE / 2) {
childCountLimits.put(expressionDMC, childCountLimit * 2);
}
}
-
+
@Override
public int getDeltaFlags(Object e) {
int flags = super.getDeltaFlags(e);
-
+
if (e instanceof FetchMoreChildrenEvent) {
flags |= IModelDelta.CONTENT;
} else if (e instanceof ISuspendedDMEvent) {
// The child count limit must be reset.
flags |= IModelDelta.CONTENT;
- } else if (e instanceof PropertyChangeEvent) {
- String property = ((PropertyChangeEvent)e).getProperty();
- if (IGdbDebugPreferenceConstants.PREF_INITIAL_CHILD_COUNT_LIMIT_FOR_COLLECTIONS.equals(property))
- {
- flags |= IModelDelta.CONTENT;
- }
+ } else if (e instanceof PropertyChangeEvent) {
+ String property = ((PropertyChangeEvent) e).getProperty();
+ if (IGdbDebugPreferenceConstants.PREF_INITIAL_CHILD_COUNT_LIMIT_FOR_COLLECTIONS.equals(property)) {
+ flags |= IModelDelta.CONTENT;
+ }
}
-
+
return flags;
}
-
-
+
@Override
public int getDeltaFlagsForExpression(IExpression expression, Object event) {
int flags = super.getDeltaFlagsForExpression(expression, event);
@@ -546,109 +540,99 @@ public class GdbVariableVMNode extends VariableVMNode {
flags |= IModelDelta.CONTENT;
} else if (event instanceof PropertyChangeEvent) {
String property = ((PropertyChangeEvent) event).getProperty();
- if (IGdbDebugPreferenceConstants.PREF_INITIAL_CHILD_COUNT_LIMIT_FOR_COLLECTIONS
- .equals(property)) {
+ if (IGdbDebugPreferenceConstants.PREF_INITIAL_CHILD_COUNT_LIMIT_FOR_COLLECTIONS.equals(property)) {
flags |= IModelDelta.CONTENT;
}
}
return flags;
}
-
+
@Override
- public void buildDelta(Object e, VMDelta parentDelta, int nodeOffset,
- RequestMonitor rm) {
-
- if (e instanceof FetchMoreChildrenEvent) {
- buildDeltaForFetchMoreChildrenEvent((FetchMoreChildrenEvent) e, parentDelta, rm);
- return;
+ public void buildDelta(Object e, VMDelta parentDelta, int nodeOffset, RequestMonitor rm) {
+
+ if (e instanceof FetchMoreChildrenEvent) {
+ buildDeltaForFetchMoreChildrenEvent((FetchMoreChildrenEvent) e, parentDelta, rm);
+ return;
} else if (e instanceof ISuspendedDMEvent) {
resetChildCountLimits(((ISuspendedDMEvent) e).getDMContext());
- } else if (e instanceof PropertyChangeEvent) {
- String property = ((PropertyChangeEvent)e).getProperty();
- if (IGdbDebugPreferenceConstants.PREF_INITIAL_CHILD_COUNT_LIMIT_FOR_COLLECTIONS.equals(property))
- {
- resetAllChildCountLimits();
- buildDeltaForChildCountLimitPreferenceChangedEvent(parentDelta, rm);
- return;
- }
- }
-
- super.buildDelta(e, parentDelta, nodeOffset, rm);
+ } else if (e instanceof PropertyChangeEvent) {
+ String property = ((PropertyChangeEvent) e).getProperty();
+ if (IGdbDebugPreferenceConstants.PREF_INITIAL_CHILD_COUNT_LIMIT_FOR_COLLECTIONS.equals(property)) {
+ resetAllChildCountLimits();
+ buildDeltaForChildCountLimitPreferenceChangedEvent(parentDelta, rm);
+ return;
+ }
+ }
+
+ super.buildDelta(e, parentDelta, nodeOffset, rm);
}
-
+
@Override
- public void buildDeltaForExpressionElement(Object element, int elementIdx,
- Object event, VMDelta parentDelta, RequestMonitor rm) {
-
- if (event instanceof FetchMoreChildrenEvent) {
- FetchMoreChildrenEvent fetchMoreEvent = (FetchMoreChildrenEvent) event;
- GdbVariableExpressionVMC topLevelExpressionVMC = (GdbVariableExpressionVMC) element;
- if (topLevelExpressionVMC.equals(fetchMoreEvent.getPath().getFirstSegment())) {
- buildDeltaForFetchMoreChildrenEvent(fetchMoreEvent, parentDelta, rm);
- return;
- }
+ public void buildDeltaForExpressionElement(Object element, int elementIdx, Object event, VMDelta parentDelta,
+ RequestMonitor rm) {
+
+ if (event instanceof FetchMoreChildrenEvent) {
+ FetchMoreChildrenEvent fetchMoreEvent = (FetchMoreChildrenEvent) event;
+ GdbVariableExpressionVMC topLevelExpressionVMC = (GdbVariableExpressionVMC) element;
+ if (topLevelExpressionVMC.equals(fetchMoreEvent.getPath().getFirstSegment())) {
+ buildDeltaForFetchMoreChildrenEvent(fetchMoreEvent, parentDelta, rm);
+ return;
+ }
} else if (event instanceof ISuspendedDMEvent) {
resetChildCountLimits(((ISuspendedDMEvent) event).getDMContext());
} else if (event instanceof IContainerSuspendedDMEvent) {
resetChildCountLimits(((IContainerSuspendedDMEvent) event).getDMContext());
- } else if (event instanceof PropertyChangeEvent) {
- String property = ((PropertyChangeEvent)event).getProperty();
- if (IGdbDebugPreferenceConstants.PREF_INITIAL_CHILD_COUNT_LIMIT_FOR_COLLECTIONS.equals(property))
- {
- resetAllChildCountLimits();
- buildDeltaForChildCountLimitPreferenceChangedEvent(parentDelta, rm);
- return;
- }
- }
-
- super.buildDeltaForExpressionElement(element, elementIdx, event, parentDelta,
- rm);
+ } else if (event instanceof PropertyChangeEvent) {
+ String property = ((PropertyChangeEvent) event).getProperty();
+ if (IGdbDebugPreferenceConstants.PREF_INITIAL_CHILD_COUNT_LIMIT_FOR_COLLECTIONS.equals(property)) {
+ resetAllChildCountLimits();
+ buildDeltaForChildCountLimitPreferenceChangedEvent(parentDelta, rm);
+ return;
+ }
+ }
+
+ super.buildDeltaForExpressionElement(element, elementIdx, event, parentDelta, rm);
}
-
- private void buildDeltaForFetchMoreChildrenEvent(
- FetchMoreChildrenEvent fetchMoreChidrenEvent,
- VMDelta parentDelta, final RequestMonitor rm) {
+
+ private void buildDeltaForFetchMoreChildrenEvent(FetchMoreChildrenEvent fetchMoreChidrenEvent, VMDelta parentDelta,
+ final RequestMonitor rm) {
TreePath path = fetchMoreChidrenEvent.getPath();
-
+
// Add all the parents of the expression. Those didn't change, however.
for (int i = 0; i < path.getSegmentCount() - 2; ++i) {
parentDelta = parentDelta.addNode(path.getSegment(i), IModelDelta.NO_CHANGE);
}
-
- // Add the node for the expression. This one changed, of course.
- final VMDelta expressionDelta =
- parentDelta.addNode(path.getSegment(path.getSegmentCount() - 2), IModelDelta.CONTENT);
+
+ // Add the node for the expression. This one changed, of course.
+ final VMDelta expressionDelta = parentDelta.addNode(path.getSegment(path.getSegmentCount() - 2),
+ IModelDelta.CONTENT);
// Make sure the element formerly know as <...more_children...> is selected
// afterwards.
-
- final int offset = getChildCountLimit(fetchMoreChidrenEvent.getDMContext()) / 2;
- // The one trailing element is to see whether there are more children.
- final int maxLength = offset + 1;
- getVMProvider().updateNode(
- this,
- new VMChildrenUpdate(
- expressionDelta, getVMProvider().getPresentationContext(), offset, maxLength,
- new DataRequestMonitor<List<Object>>(getExecutor(), rm) {
- @Override
- public void handleCompleted() {
-
- // FIXME if the new child has children they do not appear because of this code.
-// final List<Object> data= getData();
-// if (data != null && data.size() != 0) {
-// expressionDelta.addNode(data.get(0), offset, IModelDelta.SELECT);
-// }
- rm.done();
- }
- })
- );
- }
-
- private void buildDeltaForChildCountLimitPreferenceChangedEvent(
- final VMDelta parentDelta, final RequestMonitor rm) {
- parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
- rm.done();
- }
+
+ final int offset = getChildCountLimit(fetchMoreChidrenEvent.getDMContext()) / 2;
+ // The one trailing element is to see whether there are more children.
+ final int maxLength = offset + 1;
+ getVMProvider().updateNode(this, new VMChildrenUpdate(expressionDelta, getVMProvider().getPresentationContext(),
+ offset, maxLength, new DataRequestMonitor<List<Object>>(getExecutor(), rm) {
+ @Override
+ public void handleCompleted() {
+
+ // FIXME if the new child has children they do not appear because of this code.
+ // final List<Object> data= getData();
+ // if (data != null && data.size() != 0) {
+ // expressionDelta.addNode(data.get(0), offset, IModelDelta.SELECT);
+ // }
+ rm.done();
+ }
+ }));
+ }
+
+ private void buildDeltaForChildCountLimitPreferenceChangedEvent(final VMDelta parentDelta,
+ final RequestMonitor rm) {
+ parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
+ rm.done();
+ }
}

Back to the top