From 2d78ef8f37b795099539a00efdae4c9f8fd720d8 Mon Sep 17 00:00:00 2001 From: Pawel Piech Date: Mon, 13 Oct 2008 19:30:50 +0000 Subject: [PATCH] [250414] - [update policy] Stale data displayed when variables, registers or expressions view was hidden --- .../update/AbstractCachingVMProvider.java | 52 ++++++++++--------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/update/AbstractCachingVMProvider.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/update/AbstractCachingVMProvider.java index 6af86fa545c..5d985f66379 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/update/AbstractCachingVMProvider.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/update/AbstractCachingVMProvider.java @@ -148,6 +148,16 @@ public class AbstractCachingVMProvider extends AbstractVMProvider implements ICa fPrevious.fNext = fNext; fNext.fPrevious = fPrevious; } + + void reinsert(Entry nextEntry) { + fPrevious.fNext = fNext; + fNext.fPrevious = fPrevious; + + fNext = nextEntry; + fPrevious = nextEntry.fPrevious; + fPrevious.fNext = this; + fNext.fPrevious = this; + } } /** @@ -728,18 +738,18 @@ public class AbstractCachingVMProvider extends AbstractVMProvider implements ICa if (proxyStrategy instanceof IVMModelProxyExtension) { IVMModelProxyExtension proxyStrategyExtension = (IVMModelProxyExtension)proxyStrategy; + + CountingRequestMonitor multiRm = new CountingRequestMonitor(getExecutor(), rm); + super.handleEvent(proxyStrategy, event, multiRm); + int rmCount = 1; + if(fDelayEventHandleForViewUpdate) { if(this.getActiveUpdateScope().getID().equals(AllUpdateScope.ALL_UPDATE_SCOPE_ID)) { - CountingRequestMonitor countingRm = new CountingRequestMonitor(getExecutor(), rm); - countingRm.setDoneCount(2); - new MultiLevelUpdateHandler(getExecutor(), proxyStrategyExtension, getPresentationContext(), this, countingRm). + new MultiLevelUpdateHandler(getExecutor(), proxyStrategyExtension, getPresentationContext(), this, multiRm). startUpdate(); - AbstractCachingVMProvider.super.handleEvent(proxyStrategy, event, countingRm); - } else { + rmCount++; + } else if (!proxyStrategy.isDisposed()) { // block updating only the viewport - CountingRequestMonitor countingRm = new CountingRequestMonitor(getExecutor(), rm); - countingRm.setDoneCount(2); - TreeViewer viewer = (TreeViewer) proxyStrategyExtension.getViewer(); Tree tree = viewer.getTree(); int count = tree.getSize().y / tree.getItemHeight(); @@ -748,26 +758,20 @@ public class AbstractCachingVMProvider extends AbstractVMProvider implements ICa int index = computeTreeIndex(topItem); MultiLevelUpdateHandler handler = new MultiLevelUpdateHandler( - getExecutor(), proxyStrategyExtension, getPresentationContext(), this, countingRm); + getExecutor(), proxyStrategyExtension, getPresentationContext(), this, multiRm); handler.setRange(index, index + count); handler.startUpdate(); - AbstractCachingVMProvider.super.handleEvent(proxyStrategy, event, countingRm); + rmCount++; } } else { - if(this.getActiveUpdateScope().getID().equals(AllUpdateScope.ALL_UPDATE_SCOPE_ID)) - { - final CountingRequestMonitor multiRm = new CountingRequestMonitor(getExecutor(), rm); - multiRm.setDoneCount(2); - + if(this.getActiveUpdateScope().getID().equals(AllUpdateScope.ALL_UPDATE_SCOPE_ID)) { MultiLevelUpdateHandler handler = new MultiLevelUpdateHandler( getExecutor(), proxyStrategyExtension, getPresentationContext(), this, multiRm); handler.startUpdate(); - - super.handleEvent(proxyStrategy, event, multiRm); - } else { - super.handleEvent(proxyStrategy, event, rm); - } + rmCount++; + } } + multiRm.setDoneCount(rmCount); } else { super.handleEvent(proxyStrategy, event, rm); } @@ -859,7 +863,7 @@ public class AbstractCachingVMProvider extends AbstractVMProvider implements ICa } /** - * Convenience class that searches for teh root element for the given + * Convenience class that searches for the root element for the given * update and creates an element cache entry key. */ private ElementDataKey makeEntryKey(IVMNode node, IViewerUpdate update) { @@ -896,8 +900,7 @@ public class AbstractCachingVMProvider extends AbstractVMProvider implements ICa addEntry(key, entry); } else { // Entry exists, move it to the end of the list. - entry.remove(); - entry.insert(fCacheListHead); + entry.reinsert(fCacheListHead); } // Update the root element marker: @@ -914,8 +917,7 @@ public class AbstractCachingVMProvider extends AbstractVMProvider implements ICa rootMarkerEntry = new RootElementMarkerEntry(rootMarker); addEntry(rootMarker, rootMarkerEntry); } else if (rootMarkerEntry.fNext != fCacheListHead) { - rootMarkerEntry.remove(); - rootMarkerEntry.insert(fCacheListHead); + rootMarkerEntry.reinsert(fCacheListHead); } return entry;