From 37696eb55845b8012193e264834dfff2d22a1f91 Mon Sep 17 00:00:00 2001
From: Simon Barner <barner@fortiss.org>
Date: Thu, 11 Dec 2014 09:19:31 +0000
Subject: [PATCH] - Prevent nested calls of selectionChanged() which could
 trigger a refresh of the table before all column label providers / editing
 support has been initialized refs 1841

---
 org.fortiss.tooling.base.ui/trunk/plugin.xml     |  9 +++++++++
 .../annotation/view/AnnotationViewPartBase.java  | 16 +++++++++++-----
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/org.fortiss.tooling.base.ui/trunk/plugin.xml b/org.fortiss.tooling.base.ui/trunk/plugin.xml
index 479642b34..3b5fc75f4 100644
--- a/org.fortiss.tooling.base.ui/trunk/plugin.xml
+++ b/org.fortiss.tooling.base.ui/trunk/plugin.xml
@@ -21,4 +21,13 @@
       </view>
    </extension>
 
+   <!--extension point="org.fortiss.tooling.kernel.migrationProvider">
+      <migrationProvider
+            migrationProvider="org.fortiss.tooling.base.ui.annotation.AnnotationInstantiationMigrationProvider">
+         <objectClass
+               objectClass="org.fortiss.tooling.kernel.extension.data.ITopLevelElement">
+         </objectClass>
+      </migrationProvider>
+   </extension-->
+   
 </plugin>
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 c57eee9bc..0464241c8 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
@@ -74,6 +74,9 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect
 	private Map<EObject, Collection<AnnotationEntry>> lastAnnotationEntriesMap =
 			new HashMap<EObject, Collection<AnnotationEntry>>();
 
+	/** Flag to prevent nested calls of {@link #selectionChanged(IWorkbenchPart, ISelection)}. */
+	private boolean processingSectionChanged = false;
+
 	/**
 	 * {@link Adapter} to watch for the addition, removal or value change of model elements
 	 * to/from/in elements visible in this {@link AnnotationViewPartBase} (to trigger according
@@ -137,6 +140,11 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect
 	/** {@inheritDoc} */
 	@Override
 	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+		if(processingSectionChanged) {
+			return;
+		}
+		processingSectionChanged = true;
+
 		currentlySelectedObject = null;
 		currentlySelectedObject = SelectionUtils.checkAndPickFirst(selection, IModelElement.class);
 
@@ -149,14 +157,12 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect
 		}
 
 		// Optimization: Do nothing if the same object as been selected again
-		if(currentlySelectedObject == lastSelectedObject) {
-			return;
-		}
-
-		if(currentlySelectedObject != null) {
+		if(currentlySelectedObject != lastSelectedObject && currentlySelectedObject != null) {
 			update(currentlySelectedObject);
 			lastSelectedObject = currentlySelectedObject;
 		}
+
+		processingSectionChanged = false;
 	}
 
 	/** Determines root element of the given model element. */
-- 
GitLab