]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLAnnotationModel.java
Update SCL-editor annotations asynchronously
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor2 / SCLAnnotationModel.java
index b8010ef828a23868ba0b24b7820c53be38ef2dfa..1a0e7bcc7033c2e01444d0ab1ab30c3e6e00f47b 100644 (file)
@@ -3,6 +3,7 @@ package org.simantics.scl.ui.editor2;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.ForkJoinPool;
 
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.Position;
@@ -14,7 +15,6 @@ import org.simantics.scl.compiler.errors.ErrorSeverity;
 import org.simantics.scl.compiler.errors.Failable;
 import org.simantics.scl.compiler.errors.Failure;
 import org.simantics.scl.compiler.errors.Locations;
-import org.simantics.scl.compiler.errors.Success;
 import org.simantics.scl.compiler.module.Module;
 import org.simantics.scl.compiler.module.repository.ModuleRepository;
 import org.simantics.scl.compiler.module.repository.UpdateListener;
@@ -39,15 +39,19 @@ public class SCLAnnotationModel extends AnnotationModel {
     };
     
     private void updateAnnotations() {
-        Failable<Module> result = repository.getModule(input.getModuleName(), updateListener);
-        if(result instanceof Failure) {
-            Failure failure = (Failure)result;
-            setAnnotations(Arrays.asList(failure.errors));
-        }
-        else if(result == DoesNotExist.INSTANCE)
-            setAnnotations(Collections.<CompilationError>emptyList());
-        else
-            setAnnotations(Arrays.asList(result.getResult().getWarnings()));
+        ForkJoinPool.commonPool().submit(() -> {
+            if (!connected)
+                return;
+            Failable<Module> result = repository.getModule(input.getModuleName(), updateListener);
+            if(result instanceof Failure) {
+                Failure failure = (Failure)result;
+                setAnnotations(Arrays.asList(failure.errors));
+            }
+            else if(result == DoesNotExist.INSTANCE)
+                setAnnotations(Collections.<CompilationError>emptyList());
+            else
+                setAnnotations(Arrays.asList(result.getResult().getWarnings()));
+        });
     }
     
     protected void setAnnotations(List<CompilationError> errors) {
@@ -55,12 +59,16 @@ public class SCLAnnotationModel extends AnnotationModel {
             removeAllAnnotations();
             for(CompilationError error : errors) {
                 Annotation annotation = new Annotation(
-                        error.severity == ErrorSeverity.ERROR ?
-                                "org.eclipse.ui.workbench.texteditor.error" :
-                                    "org.eclipse.ui.workbench.texteditor.warning",
+                        error.severity == ErrorSeverity.ERROR || error.severity == ErrorSeverity.IMPORT_ERROR ?
+                                "org.eclipse.ui.workbench.texteditor.error" : //$NON-NLS-1$
+                                    "org.eclipse.ui.workbench.texteditor.warning", //$NON-NLS-1$
                                     true, error.description);
                 int begin = Locations.beginOf(error.location);
                 int end = Locations.endOf(error.location);
+                if(begin < 0 || end < begin) {
+                    begin = 0;
+                    end = 1;
+                }
                 Position position = new Position(begin, end - begin);
                 addAnnotation(annotation, position);
             }