Bug 558268 - Improve CoreException error logging
diff --git a/org.eclipse.handly.examples.adapter.ui/src/org/eclipse/handly/internal/examples/adapter/ui/Activator.java b/org.eclipse.handly.examples.adapter.ui/src/org/eclipse/handly/internal/examples/adapter/ui/Activator.java
index b2b0e4d..ea1bfa9 100644
--- a/org.eclipse.handly.examples.adapter.ui/src/org/eclipse/handly/internal/examples/adapter/ui/Activator.java
+++ b/org.eclipse.handly.examples.adapter.ui/src/org/eclipse/handly/internal/examples/adapter/ui/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015, 2018 1C-Soft LLC.
+ * Copyright (c) 2015, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -13,6 +13,7 @@
 package org.eclipse.handly.internal.examples.adapter.ui;
 
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.handly.examples.adapter.JavaModelAdapter;
 import org.eclipse.handly.internal.examples.adapter.ui.search.JavaSearchResultUpdater;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
@@ -63,8 +64,18 @@
         return plugin;
     }
 
-    public static void log(IStatus status)
+    public static void logError(String msg, Throwable e)
     {
-        plugin.getLog().log(status);
+        plugin.getLog().log(createErrorStatus(msg, e));
+    }
+
+    public static void logError(Throwable e)
+    {
+        logError(e.getMessage(), e);
+    }
+
+    public static IStatus createErrorStatus(String msg, Throwable e)
+    {
+        return new Status(IStatus.ERROR, PLUGIN_ID, 0, msg, e);
     }
 }
diff --git a/org.eclipse.handly.examples.adapter.ui/src/org/eclipse/handly/internal/examples/adapter/ui/callhierarchy/JavaCallerHierarchyNode.java b/org.eclipse.handly.examples.adapter.ui/src/org/eclipse/handly/internal/examples/adapter/ui/callhierarchy/JavaCallerHierarchyNode.java
index a251bdf..a776a8d 100644
--- a/org.eclipse.handly.examples.adapter.ui/src/org/eclipse/handly/internal/examples/adapter/ui/callhierarchy/JavaCallerHierarchyNode.java
+++ b/org.eclipse.handly.examples.adapter.ui/src/org/eclipse/handly/internal/examples/adapter/ui/callhierarchy/JavaCallerHierarchyNode.java
@@ -155,7 +155,7 @@
         }
         catch (CoreException e)
         {
-            Activator.log(e.getStatus());
+            Activator.logError(e);
         }
         return callerNodes.values().toArray(EMPTY_ARRAY);
     }
diff --git a/org.eclipse.handly.examples.adapter.ui/src/org/eclipse/handly/internal/examples/adapter/ui/callhierarchy/OpenCallHierarchyAction.java b/org.eclipse.handly.examples.adapter.ui/src/org/eclipse/handly/internal/examples/adapter/ui/callhierarchy/OpenCallHierarchyAction.java
index 2d170fa..c1c486a 100644
--- a/org.eclipse.handly.examples.adapter.ui/src/org/eclipse/handly/internal/examples/adapter/ui/callhierarchy/OpenCallHierarchyAction.java
+++ b/org.eclipse.handly.examples.adapter.ui/src/org/eclipse/handly/internal/examples/adapter/ui/callhierarchy/OpenCallHierarchyAction.java
@@ -56,7 +56,7 @@
         }
         catch (PartInitException e)
         {
-            Activator.log(e.getStatus());
+            Activator.logError(e);
         }
     }
 
diff --git a/org.eclipse.handly.examples.adapter/src/org/eclipse/handly/internal/examples/adapter/Activator.java b/org.eclipse.handly.examples.adapter/src/org/eclipse/handly/internal/examples/adapter/Activator.java
index 04426f6..caaa92a 100644
--- a/org.eclipse.handly.examples.adapter/src/org/eclipse/handly/internal/examples/adapter/Activator.java
+++ b/org.eclipse.handly.examples.adapter/src/org/eclipse/handly/internal/examples/adapter/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015 1C-Soft LLC.
+ * Copyright (c) 2015, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -33,9 +33,14 @@
         return plugin;
     }
 
-    public static void log(IStatus status)
+    public static void logError(String msg, Throwable e)
     {
-        plugin.getLog().log(status);
+        plugin.getLog().log(createErrorStatus(msg, e));
+    }
+
+    public static void logError(Throwable e)
+    {
+        logError(e.getMessage(), e);
     }
 
     public static IStatus createErrorStatus(String msg, Throwable e)
diff --git a/org.eclipse.handly.examples.adapter/src/org/eclipse/handly/internal/examples/adapter/JavaSourceElement.java b/org.eclipse.handly.examples.adapter/src/org/eclipse/handly/internal/examples/adapter/JavaSourceElement.java
index 637f1ad..a49f615 100644
--- a/org.eclipse.handly.examples.adapter/src/org/eclipse/handly/internal/examples/adapter/JavaSourceElement.java
+++ b/org.eclipse.handly.examples.adapter/src/org/eclipse/handly/internal/examples/adapter/JavaSourceElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015, 2017 1C-Soft LLC.
+ * Copyright (c) 2015, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -65,7 +65,7 @@
         catch (JavaModelException e)
         {
             if (!e.isDoesNotExist())
-                Activator.log(e.getStatus());
+                Activator.logError(e);
             return null;
         }
         if (position < sourceRange.getOffset()
@@ -96,7 +96,7 @@
         catch (JavaModelException e)
         {
             if (!e.isDoesNotExist())
-                Activator.log(e.getStatus());
+                Activator.logError(e);
             return null;
         }
         IElement element = create(result);
diff --git a/org.eclipse.handly.examples.adapter/src/org/eclipse/handly/internal/examples/adapter/JavaSourceFile.java b/org.eclipse.handly.examples.adapter/src/org/eclipse/handly/internal/examples/adapter/JavaSourceFile.java
index 1eaaebc..6e41116 100644
--- a/org.eclipse.handly.examples.adapter/src/org/eclipse/handly/internal/examples/adapter/JavaSourceFile.java
+++ b/org.eclipse.handly.examples.adapter/src/org/eclipse/handly/internal/examples/adapter/JavaSourceFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015, 2017 1C-Soft LLC.
+ * Copyright (c) 2015, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -76,7 +76,7 @@
         }
         catch (JavaModelException e)
         {
-            Activator.log(e.getStatus());
+            Activator.logError(e);
             return false;
         }
     }
diff --git a/org.eclipse.handly.examples.basic.ui/src/org/eclipse/handly/internal/examples/basic/ui/Activator.java b/org.eclipse.handly.examples.basic.ui/src/org/eclipse/handly/internal/examples/basic/ui/Activator.java
index c3c178d..b7ed536 100644
--- a/org.eclipse.handly.examples.basic.ui/src/org/eclipse/handly/internal/examples/basic/ui/Activator.java
+++ b/org.eclipse.handly.examples.basic.ui/src/org/eclipse/handly/internal/examples/basic/ui/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014, 2018 1C-Soft LLC and others.
+ * Copyright (c) 2014, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -35,9 +35,14 @@
     public static final String IMG_OBJ_DEF = PLUGIN_ID + T_OBJ16 + "def.png"; //$NON-NLS-1$
     public static final String IMG_OBJ_VAR = PLUGIN_ID + T_OBJ16 + "var.png"; //$NON-NLS-1$
 
-    public static void log(IStatus status)
+    public static void logError(String msg, Throwable e)
     {
-        getInstance().getLog().log(status);
+        getInstance().getLog().log(createErrorStatus(msg, e));
+    }
+
+    public static void logError(Throwable e)
+    {
+        logError(e.getMessage(), e);
     }
 
     public static IStatus createErrorStatus(String msg, Throwable e)
diff --git a/org.eclipse.handly.examples.basic.ui/src/org/eclipse/handly/internal/examples/basic/ui/editor/FooEditor.java b/org.eclipse.handly.examples.basic.ui/src/org/eclipse/handly/internal/examples/basic/ui/editor/FooEditor.java
index 48967df..c2fc8bd 100644
--- a/org.eclipse.handly.examples.basic.ui/src/org/eclipse/handly/internal/examples/basic/ui/editor/FooEditor.java
+++ b/org.eclipse.handly.examples.basic.ui/src/org/eclipse/handly/internal/examples/basic/ui/editor/FooEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 1C-Soft LLC.
+ * Copyright (c) 2016, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -62,7 +62,7 @@
         }
         catch (PartInitException e)
         {
-            Activator.log(e.getStatus());
+            Activator.logError(e);
         }
     }
 
diff --git a/org.eclipse.handly.examples.basic.ui/src/org/eclipse/handly/internal/examples/basic/ui/model/FooModelManager.java b/org.eclipse.handly.examples.basic.ui/src/org/eclipse/handly/internal/examples/basic/ui/model/FooModelManager.java
index bb33a31..e67bf46 100644
--- a/org.eclipse.handly.examples.basic.ui/src/org/eclipse/handly/internal/examples/basic/ui/model/FooModelManager.java
+++ b/org.eclipse.handly.examples.basic.ui/src/org/eclipse/handly/internal/examples/basic/ui/model/FooModelManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014, 2017 1C-Soft LLC and others.
+ * Copyright (c) 2014, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -95,7 +95,7 @@
         }
         catch (CoreException e)
         {
-            Activator.log(e.getStatus());
+            Activator.logError(e);
         }
         IElementDelta delta = deltaProcessor.getDelta();
         if (!ElementDeltas.isEmpty(delta))
diff --git a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/examples/jmodel/ui/JavaModelLabelProvider.java b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/examples/jmodel/ui/JavaModelLabelProvider.java
index 3c22854..56deb69 100644
--- a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/examples/jmodel/ui/JavaModelLabelProvider.java
+++ b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/examples/jmodel/ui/JavaModelLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015 Codasip Ltd.
+ * Copyright (c) 2015, 2019 Codasip Ltd and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -48,7 +48,7 @@
             }
             catch (CoreException e)
             {
-                Activator.log(e.getStatus());
+                Activator.logError(e);
             }
         }
         return new StyledString(getText(element));
@@ -68,7 +68,7 @@
             }
             catch (CoreException e)
             {
-                Activator.log(e.getStatus());
+                Activator.logError(e);
             }
         }
         else if (element instanceof IAdaptable)
@@ -93,7 +93,7 @@
         }
         catch (CoreException e)
         {
-            Activator.log(e.getStatus());
+            Activator.logError(e);
         }
         return super.getImage(element);
     }
diff --git a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/Activator.java b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/Activator.java
index a90c973..ce705d1 100644
--- a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/Activator.java
+++ b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015, 2017 1C-Soft LLC and others.
+ * Copyright (c) 2015, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -113,9 +113,14 @@
         return getDefault().compilationUnitDocumentProvider;
     }
 
-    public static void log(IStatus status)
+    public static void logError(String msg, Throwable e)
     {
-        getDefault().getLog().log(status);
+        plugin.getLog().log(createErrorStatus(msg, e));
+    }
+
+    public static void logError(Throwable e)
+    {
+        logError(e.getMessage(), e);
     }
 
     public static IStatus createErrorStatus(String msg, Throwable e)
diff --git a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/JavaElementComparator.java b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/JavaElementComparator.java
index 2c41735..be07c69 100644
--- a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/JavaElementComparator.java
+++ b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/JavaElementComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -153,7 +153,7 @@
         }
         catch (CoreException e)
         {
-            Activator.log(e.getStatus());
+            Activator.logError(e);
         }
         return OTHERS;
     }
@@ -178,7 +178,7 @@
                 }
                 catch (CoreException e)
                 {
-                    Activator.log(e.getStatus());
+                    Activator.logError(e);
                 }
             }
         }
diff --git a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/JavaElementImageProvider.java b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/JavaElementImageProvider.java
index 70770c9..a147d4d 100644
--- a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/JavaElementImageProvider.java
+++ b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/JavaElementImageProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2016 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -272,7 +272,7 @@
         catch (CoreException e)
         {
             // do nothing. Can't compute runnable adornment or get flags
-            Activator.log(e.getStatus());
+            Activator.logError(e);
         }
         return flags;
     }
@@ -337,7 +337,7 @@
         catch (CoreException e)
         {
             // log and assume no children
-            Activator.log(e.getStatus());
+            Activator.logError(e);
         }
         if (!containsJavaElements && containsNonJavaElements)
             return Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID,
diff --git a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/EmptyInnerPackageFilter.java b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/EmptyInnerPackageFilter.java
index a84f31b..d75a971 100644
--- a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/EmptyInnerPackageFilter.java
+++ b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/EmptyInnerPackageFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -41,7 +41,7 @@
             }
             catch (CoreException e)
             {
-                Activator.log(e.getStatus());
+                Activator.logError(e);
             }
         }
         return true;
diff --git a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/EmptyPackageFilter.java b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/EmptyPackageFilter.java
index a9ddab8..c3a0ca3 100644
--- a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/EmptyPackageFilter.java
+++ b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/EmptyPackageFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -40,7 +40,7 @@
             }
             catch (CoreException e)
             {
-                Activator.log(e.getStatus());
+                Activator.logError(e);
             }
         }
         return true;
diff --git a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/NonPublicMemberFilter.java b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/NonPublicMemberFilter.java
index 30ad83f..76f9261 100644
--- a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/NonPublicMemberFilter.java
+++ b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/NonPublicMemberFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015 1C-Soft LLC.
+ * Copyright (c) 2015, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -43,7 +43,7 @@
             }
             catch (CoreException e)
             {
-                Activator.log(e.getStatus());
+                Activator.logError(e);
             }
         }
         return true;
diff --git a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/OutputFolderFilter.java b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/OutputFolderFilter.java
index 7f8fbc3..7ca7e57 100644
--- a/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/OutputFolderFilter.java
+++ b/org.eclipse.handly.examples.jmodel.ui/src/org/eclipse/handly/internal/examples/jmodel/ui/filters/OutputFolderFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015 Codasip Ltd.
+ * Copyright (c) 2015, 2019 Codasip Ltd and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -17,8 +17,8 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.handly.examples.jmodel.IJavaProject;
 import org.eclipse.handly.examples.jmodel.JavaModelCore;
-import org.eclipse.handly.internal.examples.jmodel.Activator;
 import org.eclipse.handly.internal.examples.jmodel.JavaProject;
+import org.eclipse.handly.internal.examples.jmodel.ui.Activator;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerFilter;
 
@@ -51,7 +51,7 @@
             }
             catch (CoreException e)
             {
-                Activator.log(e.getStatus());
+                Activator.logError(e);
             }
         }
         return true;
diff --git a/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/Activator.java b/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/Activator.java
index 819114b..dae47c6 100644
--- a/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/Activator.java
+++ b/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015, 2017 1C-Soft LLC.
+ * Copyright (c) 2015, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -33,9 +33,14 @@
         return plugin;
     }
 
-    public static void log(IStatus status)
+    public static void logError(String msg, Throwable e)
     {
-        plugin.getLog().log(status);
+        plugin.getLog().log(createErrorStatus(msg, e));
+    }
+
+    public static void logError(Throwable e)
+    {
+        logError(e.getMessage(), e);
     }
 
     public static IStatus createErrorStatus(String msg, Throwable e)
diff --git a/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/DeltaProcessor.java b/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/DeltaProcessor.java
index df45cbc..15727d6 100644
--- a/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/DeltaProcessor.java
+++ b/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/DeltaProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015, 2017 1C-Soft LLC.
+ * Copyright (c) 2015, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -460,7 +460,7 @@
         }
         catch (CoreException e)
         {
-            Activator.log(e.getStatus());
+            Activator.logError(e);
             parentBody.addChild(root);
             return;
         }
diff --git a/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/JavaModelManager.java b/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/JavaModelManager.java
index 51bb85e..c8ec6ab 100644
--- a/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/JavaModelManager.java
+++ b/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/JavaModelManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015, 2017 1C-Soft LLC.
+ * Copyright (c) 2015, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -110,7 +110,7 @@
         }
         catch (CoreException e)
         {
-            Activator.log(e.getStatus());
+            Activator.logError(e);
         }
         finally
         {
diff --git a/org.eclipse.handly.examples.lsp/src/org/eclipse/handly/internal/examples/lsp/Activator.java b/org.eclipse.handly.examples.lsp/src/org/eclipse/handly/internal/examples/lsp/Activator.java
index 5b5ceb7..cc133a6 100644
--- a/org.eclipse.handly.examples.lsp/src/org/eclipse/handly/internal/examples/lsp/Activator.java
+++ b/org.eclipse.handly.examples.lsp/src/org/eclipse/handly/internal/examples/lsp/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2018 1C-Soft LLC.
+ * Copyright (c) 2018, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -32,9 +32,14 @@
         return plugin;
     }
 
-    public static void log(IStatus status)
+    public static void logError(String msg, Throwable e)
     {
-        plugin.getLog().log(status);
+        plugin.getLog().log(createErrorStatus(msg, e));
+    }
+
+    public static void logError(Throwable e)
+    {
+        logError(e.getMessage(), e);
     }
 
     public static IStatus createErrorStatus(String msg, Throwable e)
diff --git a/org.eclipse.handly.examples.lsp/src/org/eclipse/handly/internal/examples/lsp/ModelManager.java b/org.eclipse.handly.examples.lsp/src/org/eclipse/handly/internal/examples/lsp/ModelManager.java
index d64b025..dbf22aa 100644
--- a/org.eclipse.handly.examples.lsp/src/org/eclipse/handly/internal/examples/lsp/ModelManager.java
+++ b/org.eclipse.handly.examples.lsp/src/org/eclipse/handly/internal/examples/lsp/ModelManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2018 1C-Soft LLC.
+ * Copyright (c) 2018, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -115,7 +115,7 @@
         }
         catch (CoreException e)
         {
-            Activator.log(e.getStatus());
+            Activator.logError(e);
         }
         IElementDelta[] deltas = deltaProcessor.getDeltas();
         if (deltas.length > 0)
diff --git a/org.eclipse.handly.examples.lsp/src/org/eclipse/handly/internal/examples/lsp/ServerManager.java b/org.eclipse.handly.examples.lsp/src/org/eclipse/handly/internal/examples/lsp/ServerManager.java
index b5f3f62..94964c0 100644
--- a/org.eclipse.handly.examples.lsp/src/org/eclipse/handly/internal/examples/lsp/ServerManager.java
+++ b/org.eclipse.handly.examples.lsp/src/org/eclipse/handly/internal/examples/lsp/ServerManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2018 1C-Soft LLC.
+ * Copyright (c) 2018, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -293,7 +293,7 @@
         }
         catch (CoreException e)
         {
-            Activator.log(e.getStatus());
+            Activator.logError(e);
             throw new IllegalStateException(e);
         }
         try
@@ -311,7 +311,7 @@
         }
         catch (CoreException e)
         {
-            Activator.log(e.getStatus());
+            Activator.logError(e);
             throw new IllegalStateException(e);
         }
         LanguageServer[] serverSlot = new LanguageServer[1];
diff --git a/org.eclipse.handly.ui/src/org/eclipse/handly/internal/ui/Activator.java b/org.eclipse.handly.ui/src/org/eclipse/handly/internal/ui/Activator.java
index eb0e6d2..1e16400 100644
--- a/org.eclipse.handly.ui/src/org/eclipse/handly/internal/ui/Activator.java
+++ b/org.eclipse.handly.ui/src/org/eclipse/handly/internal/ui/Activator.java
@@ -77,9 +77,14 @@
         return plugin;
     }
 
-    public static void log(IStatus status)
+    public static void logError(String msg, Throwable e)
     {
-        plugin.getLog().log(status);
+        plugin.getLog().log(createErrorStatus(msg, e));
+    }
+
+    public static void logError(Throwable e)
+    {
+        logError(e.getMessage(), e);
     }
 
     public static IStatus createErrorStatus(String msg, Throwable e)
diff --git a/org.eclipse.handly.ui/src/org/eclipse/handly/ui/EditorUtility.java b/org.eclipse.handly.ui/src/org/eclipse/handly/ui/EditorUtility.java
index 0dc87eb..bdd8652 100644
--- a/org.eclipse.handly.ui/src/org/eclipse/handly/ui/EditorUtility.java
+++ b/org.eclipse.handly.ui/src/org/eclipse/handly/ui/EditorUtility.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2018 1C-Soft LLC.
+ * Copyright (c) 2016, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -349,7 +349,7 @@
             catch (CoreException e)
             {
                 if (Elements.exists(element))
-                    Activator.log(e.getStatus());
+                    Activator.logError(e);
             }
         }
         return null;
diff --git a/org.eclipse.handly.ui/src/org/eclipse/handly/ui/action/OpenAction.java b/org.eclipse.handly.ui/src/org/eclipse/handly/ui/action/OpenAction.java
index 2953eb7..74a6078 100644
--- a/org.eclipse.handly.ui/src/org/eclipse/handly/ui/action/OpenAction.java
+++ b/org.eclipse.handly.ui/src/org/eclipse/handly/ui/action/OpenAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014, 2018 1C-Soft LLC and others.
+ * Copyright (c) 2014, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -149,7 +149,7 @@
             public void accept(IStatus s)
             {
                 status.merge(s);
-                Activator.log(s);
+                Activator.getDefault().getLog().log(s);
             }
 
             @Override
diff --git a/org.eclipse.handly.ui/src/org/eclipse/handly/ui/preference/FlushingPreferenceStore.java b/org.eclipse.handly.ui/src/org/eclipse/handly/ui/preference/FlushingPreferenceStore.java
index bc19c03..24b9f0b 100644
--- a/org.eclipse.handly.ui/src/org/eclipse/handly/ui/preference/FlushingPreferenceStore.java
+++ b/org.eclipse.handly.ui/src/org/eclipse/handly/ui/preference/FlushingPreferenceStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014 1C LLC.
+ * Copyright (c) 2014, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -261,7 +261,7 @@
             }
             catch (IOException e)
             {
-                Activator.log(Activator.createErrorStatus(e.getMessage(), e));
+                Activator.logError(e);
             }
         }
     }
diff --git a/org.eclipse.handly.ui/src/org/eclipse/handly/ui/search/AbstractHandlySearchResult.java b/org.eclipse.handly.ui/src/org/eclipse/handly/ui/search/AbstractHandlySearchResult.java
index 7d42fda..7628042 100644
--- a/org.eclipse.handly.ui/src/org/eclipse/handly/ui/search/AbstractHandlySearchResult.java
+++ b/org.eclipse.handly.ui/src/org/eclipse/handly/ui/search/AbstractHandlySearchResult.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2018 1C-Soft LLC.
+ * Copyright (c) 2018, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -293,7 +293,7 @@
             if (!Elements.exists(element))
                 ; // ignore
             else
-                Activator.log(e.getStatus());
+                Activator.logError(e);
         }
     }
 
diff --git a/org.eclipse.handly.ui/src/org/eclipse/handly/ui/viewer/ElementTreeContentProvider.java b/org.eclipse.handly.ui/src/org/eclipse/handly/ui/viewer/ElementTreeContentProvider.java
index 7e230fd..7282087 100644
--- a/org.eclipse.handly.ui/src/org/eclipse/handly/ui/viewer/ElementTreeContentProvider.java
+++ b/org.eclipse.handly.ui/src/org/eclipse/handly/ui/viewer/ElementTreeContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014, 2018 1C-Soft LLC and others.
+ * Copyright (c) 2014, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -58,7 +58,7 @@
             }
             catch (CoreException e)
             {
-                Activator.log(e.getStatus());
+                Activator.logError(e);
             }
         }
         return NO_CHILDREN;
diff --git a/org.eclipse.handly.ui/src/org/eclipse/handly/ui/viewer/ProblemMarkerLabelDecorator.java b/org.eclipse.handly.ui/src/org/eclipse/handly/ui/viewer/ProblemMarkerLabelDecorator.java
index 799645e..d3b23e5 100644
--- a/org.eclipse.handly.ui/src/org/eclipse/handly/ui/viewer/ProblemMarkerLabelDecorator.java
+++ b/org.eclipse.handly.ui/src/org/eclipse/handly/ui/viewer/ProblemMarkerLabelDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014, 2018 1C-Soft LLC and others.
+ * Copyright (c) 2014, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -62,7 +62,7 @@
             if (e.getStatus().getCode() == IResourceStatus.MARKER_NOT_FOUND)
                 ; // this is ok
             else
-                Activator.log(e.getStatus());
+                Activator.logError(e);
             return null;
         }
     }
diff --git a/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/internal/xtext/ui/Activator.java b/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/internal/xtext/ui/Activator.java
index 01431ea..19ab95b 100644
--- a/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/internal/xtext/ui/Activator.java
+++ b/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/internal/xtext/ui/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014 1C LLC.
+ * Copyright (c) 2014, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -37,9 +37,14 @@
         return plugin;
     }
 
-    public static void log(IStatus status)
+    public static void logError(String msg, Throwable e)
     {
-        plugin.getLog().log(status);
+        plugin.getLog().log(createErrorStatus(msg, e));
+    }
+
+    public static void logError(Throwable e)
+    {
+        logError(e.getMessage(), e);
     }
 
     public static IStatus createErrorStatus(String msg, Throwable e)
diff --git a/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextDocument.java b/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextDocument.java
index a90dd34..5fd5201 100644
--- a/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextDocument.java
+++ b/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextDocument.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014, 2018 1C-Soft LLC and others.
+ * Copyright (c) 2014, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -481,8 +481,7 @@
                 catch (Exception e)
                 {
                     // partial parsing failed - performing full reparse
-                    Activator.log(Activator.createErrorStatus(e.getMessage(),
-                        e));
+                    Activator.logError(e);
                     try
                     {
                         resource.reparse(snapshot.getContents());
@@ -491,8 +490,7 @@
                     catch (Exception e2)
                     {
                         // full parsing also failed - restore state
-                        Activator.log(Activator.createErrorStatus(
-                            e2.getMessage(), e2));
+                        Activator.logError(e2);
                         resource.reparse(reconciledSnapshot.getContents());
                         throw e2;
                     }
@@ -576,8 +574,7 @@
                 catch (Exception e)
                 {
                     // modification failed - restore state
-                    Activator.log(Activator.createErrorStatus(e.getMessage(),
-                        e));
+                    Activator.logError(e);
                     resource.reparse(reconciledSnapshot.getContents());
                     throw e;
                 }
diff --git a/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextEditorCallback.java b/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextEditorCallback.java
index c3994d0..d60f2a9 100644
--- a/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextEditorCallback.java
+++ b/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextEditorCallback.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014, 2018 1C-Soft LLC and others.
+ * Copyright (c) 2014, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -433,7 +433,7 @@
             if (!editor.getEditorInput().exists())
                 ; // this is considered normal
             else
-                Activator.log(e.getStatus());
+                Activator.logError(e);
         }
         if (workingCopy != null)
         {
@@ -450,7 +450,7 @@
             }
             catch (CoreException e)
             {
-                Activator.log(e.getStatus());
+                Activator.logError(e);
             }
         }
         workingCopyEditors.put(editor.getEditorInput(),
@@ -571,7 +571,7 @@
                     }
                     catch (CoreException e)
                     {
-                        Activator.log(e.getStatus());
+                        Activator.logError(e);
                         resetEditorHighlightRange(args);
                         return e.getStatus();
                     }
@@ -605,7 +605,7 @@
                 }
                 catch (CoreException e)
                 {
-                    Activator.log(e.getStatus());
+                    Activator.logError(e);
                     resetEditorHighlightRange(args);
                     return e.getStatus();
                 }
diff --git a/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextReconciler.java b/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextReconciler.java
index cc4a505..44bf15b 100644
--- a/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextReconciler.java
+++ b/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextReconciler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2018 itemis AG (http://www.itemis.eu) and others.
+ * Copyright (c) 2008, 2019 itemis AG (http://www.itemis.eu) and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -338,8 +338,8 @@
                     }
                     catch (Throwable e)
                     {
-                        Activator.log(Activator.createErrorStatus(
-                            "Error while forcing reconciliation", e)); //$NON-NLS-1$
+                        Activator.logError("Error while forcing reconciliation", //$NON-NLS-1$
+                            e);
                     }
                 }
                 if (sessionStarted && !paused)
diff --git a/org.eclipse.handly/src/org/eclipse/handly/buffer/TextFileBuffer.java b/org.eclipse.handly/src/org/eclipse/handly/buffer/TextFileBuffer.java
index df39b3e..ad895f1 100644
--- a/org.eclipse.handly/src/org/eclipse/handly/buffer/TextFileBuffer.java
+++ b/org.eclipse.handly/src/org/eclipse/handly/buffer/TextFileBuffer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014, 2018 1C-Soft LLC and others.
+ * Copyright (c) 2014, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -251,7 +251,7 @@
         }
         catch (CoreException e)
         {
-            Activator.log(e.getStatus());
+            Activator.logError(e);
         }
     }
 }
diff --git a/org.eclipse.handly/src/org/eclipse/handly/internal/Activator.java b/org.eclipse.handly/src/org/eclipse/handly/internal/Activator.java
index 34a4479..0af12d8 100644
--- a/org.eclipse.handly/src/org/eclipse/handly/internal/Activator.java
+++ b/org.eclipse.handly/src/org/eclipse/handly/internal/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014, 2016 1C-Soft LLC and others.
+ * Copyright (c) 2014, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -41,9 +41,14 @@
         return plugin;
     }
 
-    public static void log(IStatus status)
+    public static void logError(String msg, Throwable e)
     {
-        plugin.getLog().log(status);
+        plugin.getLog().log(createErrorStatus(msg, e));
+    }
+
+    public static void logError(Throwable e)
+    {
+        logError(e.getMessage(), e);
     }
 
     public static IStatus createErrorStatus(String msg, Throwable e)
diff --git a/org.eclipse.handly/src/org/eclipse/handly/model/Elements.java b/org.eclipse.handly/src/org/eclipse/handly/model/Elements.java
index a58147e..144e89a 100644
--- a/org.eclipse.handly/src/org/eclipse/handly/model/Elements.java
+++ b/org.eclipse.handly/src/org/eclipse/handly/model/Elements.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014, 2018 1C-Soft LLC and others.
+ * Copyright (c) 2014, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -1142,7 +1142,7 @@
             if (!exists(element))
                 ; // this is considered normal
             else
-                Activator.log(e.getStatus());
+                Activator.logError(e);
         }
         catch (StaleSnapshotException e)
         {
@@ -1210,7 +1210,7 @@
             if (!exists(element))
                 ; // this is considered normal
             else
-                Activator.log(e.getStatus());
+                Activator.logError(e);
         }
         return NO_SOURCE_ELEMENT_INFO;
     }
@@ -1308,7 +1308,7 @@
             }
             catch (CoreException e)
             {
-                Activator.log(e.getStatus());
+                Activator.logError(e);
                 return false;
             }
         }
diff --git a/org.eclipse.handly/src/org/eclipse/handly/snapshot/TextFileSnapshot.java b/org.eclipse.handly/src/org/eclipse/handly/snapshot/TextFileSnapshot.java
index 00b994c..aafaa23 100644
--- a/org.eclipse.handly/src/org/eclipse/handly/snapshot/TextFileSnapshot.java
+++ b/org.eclipse.handly/src/org/eclipse/handly/snapshot/TextFileSnapshot.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014, 2018 1C-Soft LLC and others.
+ * Copyright (c) 2014, 2019 1C-Soft LLC and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -92,7 +92,7 @@
             }
             catch (CoreException e)
             {
-                Activator.log(e.getStatus());
+                Activator.logError(e);
                 return NON_EXISTING;
             }
             return new TextFileStoreSnapshot(fileStore);
diff --git a/org.eclipse.handly/src/org/eclipse/handly/snapshot/TextFileSnapshotWs.java b/org.eclipse.handly/src/org/eclipse/handly/snapshot/TextFileSnapshotWs.java
index caad99c..c61db7c 100644
--- a/org.eclipse.handly/src/org/eclipse/handly/snapshot/TextFileSnapshotWs.java
+++ b/org.eclipse.handly/src/org/eclipse/handly/snapshot/TextFileSnapshotWs.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2018 1C-Soft LLC.
+ * Copyright (c) 2018, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -78,8 +78,8 @@
             }
             catch (CoreException e)
             {
-                Activator.log(e.getStatus());
-                status = e.getStatus();
+                Activator.logError(e);
+                status = Activator.createErrorStatus(e.getMessage(), e);
             }
         }
         return result;
diff --git a/org.eclipse.handly/src/org/eclipse/handly/snapshot/TextFileStoreSnapshot.java b/org.eclipse.handly/src/org/eclipse/handly/snapshot/TextFileStoreSnapshot.java
index c400c2e..dbbfdae 100644
--- a/org.eclipse.handly/src/org/eclipse/handly/snapshot/TextFileStoreSnapshot.java
+++ b/org.eclipse.handly/src/org/eclipse/handly/snapshot/TextFileStoreSnapshot.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2018 1C-Soft LLC.
+ * Copyright (c) 2016, 2019 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -81,8 +81,8 @@
             }
             catch (CoreException e)
             {
-                Activator.log(e.getStatus());
-                status = e.getStatus();
+                Activator.logError(e);
+                status = Activator.createErrorStatus(e.getMessage(), e);
             }
             this.status = status;
             this.contents = contents;