From b838894fc867ba47e174acde0c62913b501cf71d Mon Sep 17 00:00:00 2001 From: Randy Rohrbach Date: Fri, 6 Jul 2007 20:36:30 +0000 Subject: [PATCH] Bugzilla entry 195703 AbstractVMlayoutNode.java Perform a update.done() even if the update has been cancelled. AbstractVMProvider.java Perform a update.done() even if the update has been cancelled. VMelementsCountUpdate.java Change assert to allow for the cancelling of the update VMHasElementsUpdate.java Change assert to allow for the cancelling of the update. VMViewerUpdate.java Create a negative status when an update is cancelled. Otherwise the getData() will be called and used when there is no valid data. Randy Rohrbach 781-364-2226 --- .../dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java | 5 ++++- .../dd/dsf/ui/viewmodel/AbstractVMProvider.java | 11 +++++++---- .../dd/dsf/ui/viewmodel/VMElementsCountUpdate.java | 2 +- .../dd/dsf/ui/viewmodel/VMHasElementsUpdate.java | 2 +- .../eclipse/dd/dsf/ui/viewmodel/VMViewerUpdate.java | 5 +++++ 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java index 7c5ddf8a59f..37024d81c3a 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java @@ -330,7 +330,10 @@ abstract public class AbstractVMLayoutNode implements IVMLayoutNode { * that the layout node depends on, are not available. */ protected boolean checkUpdate(IViewerUpdate update) { - if (update.isCanceled()) return false; + if (update.isCanceled()) { + update.done(); + return false; + } if (fDisposed) { handleFailedUpdate(update); return false; diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java index 2313a542c90..63e16d44853 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java @@ -159,7 +159,7 @@ abstract public class AbstractVMProvider implements IVMProvider if (layoutNode == null) { // Stale update, most likely as a result of the layout nodes being // changed. Just ignore it. - if (!update.isCanceled()) update.done(); + update.done(); continue; } if (!nodeUpdatesMap.containsKey(layoutNode)) { @@ -240,7 +240,10 @@ abstract public class AbstractVMProvider implements IVMProvider public void update(final IChildrenCountUpdate[] updates) { for (final IChildrenCountUpdate update : updates) { - if (update.isCanceled()) continue; + if (update.isCanceled()) { + update.done(); + continue; + } getChildrenCountsForNode( update, @@ -346,7 +349,7 @@ abstract public class AbstractVMProvider implements IVMProvider final IVMLayoutNode layoutNode = getLayoutNodeForElement(update.getElement()); if (layoutNode == null) { // Stale update. Just ignore. - if (!update.isCanceled()) update.done(); + update.done(); return; } @@ -356,7 +359,7 @@ abstract public class AbstractVMProvider implements IVMProvider new MultiRequestMonitor(getExecutor(), null) { @Override protected void handleCompleted() { - if (!update.isCanceled()) update.done(); + update.done(); } }; diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMElementsCountUpdate.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMElementsCountUpdate.java index 8c599f90e10..2ae96edb483 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMElementsCountUpdate.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMElementsCountUpdate.java @@ -34,7 +34,7 @@ public class VMElementsCountUpdate extends VMViewerUpdate implements IChildrenCo @Override public void done() { - assert fCountRequestMonitor.getData() != null || !fCountRequestMonitor.getStatus().isOK(); + assert isCanceled() || fCountRequestMonitor.getData() != null || !fCountRequestMonitor.getStatus().isOK(); super.done(); } diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMHasElementsUpdate.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMHasElementsUpdate.java index 2153473ff11..b466b8d5717 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMHasElementsUpdate.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMHasElementsUpdate.java @@ -34,7 +34,7 @@ public class VMHasElementsUpdate extends VMViewerUpdate implements IHasChildrenU @Override public void done() { - assert fHasElemsRequestMonitor.getData() != null || !fHasElemsRequestMonitor.getStatus().isOK(); + assert isCanceled() || fHasElemsRequestMonitor.getData() != null || !fHasElemsRequestMonitor.getStatus().isOK(); super.done(); } } diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMViewerUpdate.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMViewerUpdate.java index 6512fb3ec4d..2da11734ebc 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMViewerUpdate.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMViewerUpdate.java @@ -13,7 +13,9 @@ package org.eclipse.dd.dsf.ui.viewmodel; import java.util.concurrent.RejectedExecutionException; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import org.eclipse.dd.dsf.concurrent.RequestMonitor; +import org.eclipse.dd.dsf.ui.DsfUIPlugin; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; @@ -46,6 +48,9 @@ public class VMViewerUpdate implements IViewerUpdate { public void done() { try { + if ( isCanceled() ) { + fRequestMonitor.setStatus(new Status( IStatus.CANCEL, DsfUIPlugin.PLUGIN_ID," Update was cancelled") ); //$NON-NLS-1$ + } fRequestMonitor.done(); } catch (RejectedExecutionException e) { // Ignore }