Fix async NPE with GraphToDiagramSynchronizer 80/2780/2
authorjsimomaa <jani.simomaa@gmail.com>
Sun, 17 Mar 2019 19:41:44 +0000 (21:41 +0200)
committerJani Simomaa <jani.simomaa@semantum.fi>
Sun, 17 Mar 2019 20:18:53 +0000 (20:18 +0000)
gitlab #275

Change-Id: I4e4baa18a9d2a14250498c1d1d3cf1d209dc94f3

bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/GraphToDiagramSynchronizer.java

index e2c1521ee45b21c6e63dc166535d645b60e0354e..aa35c63342c28e8d952a7989f2cc5edd26f83f21 100644 (file)
@@ -11,9 +11,6 @@
  *******************************************************************************/
 package org.simantics.diagram.adapter;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.THashSet;
-
 import java.awt.geom.AffineTransform;
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayDeque;
@@ -158,6 +155,11 @@ import org.simantics.utils.strings.EString;
 import org.simantics.utils.threads.ThreadUtils;
 import org.simantics.utils.threads.logger.ITask;
 import org.simantics.utils.threads.logger.ThreadLogger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import gnu.trove.map.hash.TObjectIntHashMap;
+import gnu.trove.set.hash.THashSet;
 
 /**
  * This class loads a diagram contained in the graph database into the runtime
@@ -250,6 +252,8 @@ import org.simantics.utils.threads.logger.ThreadLogger;
  */
 public class GraphToDiagramSynchronizer extends AbstractDisposable implements IDiagramLoader, IModifiableSynchronizationContext {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(GraphToDiagramSynchronizer.class);
+
     /**
      * Controls whether the class adds hint listeners to each diagram element
      * that try to perform basic sanity checks on changes happening in element
@@ -1111,7 +1115,7 @@ public class GraphToDiagramSynchronizer extends AbstractDisposable implements ID
             }
         } catch (InterruptedException e) {
             // Shouldn't happen.
-            e.printStackTrace();
+            LOGGER.error("Dispose interrupted!", e);
         } finally {
             detachSessionListener();
 
@@ -1343,7 +1347,11 @@ public class GraphToDiagramSynchronizer extends AbstractDisposable implements ID
                     g.getSession().asyncRequest(new AsyncReadRequest() {
                         @Override
                         public void run(AsyncReadGraph graph) {
-                            profileObserver.listen(graph, GraphToDiagramSynchronizer.this);
+                          ProfileObserver po = profileObserver;
+                            if (po != null)
+                                po.listen(graph, GraphToDiagramSynchronizer.this);
+                            else
+                                LOGGER.info("profileObserver has been disposed already!");
                         }
                     });
 
@@ -3456,7 +3464,7 @@ public class GraphToDiagramSynchronizer extends AbstractDisposable implements ID
                 Resource resource = ElementUtils.adapt(ec, Resource.class);
                 if (resource == null) {
                     pass = false;
-                    new Exception("Attempted to add an element to the diagram that is not adaptable to Resource: " + e + ", class: " + ec).printStackTrace();
+                    LOGGER.error("", new Exception("Attempted to add an element to the diagram that is not adaptable to Resource: " + e + ", class: " + ec));
                 }
 
                 // Sanity check connection hints