From 4ec19b23c4cbf02f3fd9c2890688ca474c349c5a Mon Sep 17 00:00:00 2001
From: Simon Barner <barner@fortiss.org>
Date: Wed, 8 Jun 2016 14:20:51 +0000
Subject: [PATCH] - Enforce full update of annotation views on
 setUpdateEnabled(true)

---
 .../view/AnnotationViewPartBase.java          | 23 ++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java
index fe3fa787b..7f47c2e8a 100644
--- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java
+++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java
@@ -60,7 +60,7 @@ import org.fortiss.tooling.kernel.service.IPersistencyService;
  * @author barner
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating YELLOW Hash: E5338A681AFA613876C560BD968F34A9
+ * @ConQAT.Rating YELLOW Hash: B5EED9862BC0107F49D3E471B16282D7
  */
 public abstract class AnnotationViewPartBase extends ViewPart implements ISelectionListener,
 		IAnnotationViewPart {
@@ -71,6 +71,9 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect
 	/** Last selected object. */
 	private IModelElement lastSelectedObject;
 
+	/** Last root element determined during the last successful {@link #update(IModelElement)}. */
+	private IProjectRootElement lastRootElement;
+
 	/**
 	 * Root element for which the {@link #changeListener} has been installed to (recursively)
 	 * watch for model changes (to trigger an update of this {@link AnnotationViewPartBase}).
@@ -229,11 +232,19 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect
 	 * {@link #update(Collection)}, and update model change listeners.
 	 */
 	protected void update(IModelElement modelElement) {
-		EObject rootElement = getParentElement(modelElement, IProjectRootElement.class, true);
+		IProjectRootElement rootElement =
+				getParentElement(modelElement, IProjectRootElement.class, true);
 		if(rootElement == null) {
 			return;
 		}
 
+		lastRootElement = rootElement;
+
+		update(rootElement);
+	}
+
+	/** Perform update for given {@link IProjectRootElement}. */
+	private void update(IProjectRootElement rootElement) {
 		// Check cache if annotation entries for the given root element have already been determined
 		Collection<AnnotationEntry> annotationEntries = lastAnnotationEntriesMap.get(rootElement);
 
@@ -315,6 +326,12 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect
 		activeInstances.remove(this);
 	}
 
+	/** Enforces a full update of the view based on {@link #lastRootElement}. */
+	private void forceFullUpdate() {
+		lastAnnotationEntriesMap.clear();
+		update(lastRootElement);
+	}
+
 	/** Sets {@link #isUpdateEnabled}. If the update is re-enabled, the view is refreshed. */
 	public static synchronized void setUpdateEnabled(boolean isUpdateEnabled) {
 		AnnotationViewPartBase.isUpdateEnabled = isUpdateEnabled;
@@ -323,7 +340,7 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect
 				@Override
 				public void run() {
 					for(AnnotationViewPartBase avp : activeInstances) {
-						avp.update();
+						avp.forceFullUpdate();
 					}
 				}
 			});
-- 
GitLab