diff options
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.java | 578 |
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(); + } } |