X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.ui%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fui%2Feditor2%2FSCLAnnotationModel.java;h=b8010ef828a23868ba0b24b7820c53be38ef2dfa;hp=181abf7e4eadb01521d7745335c7091ca198de63;hb=7045f0f516c243563976207abcec13a68891ff1d;hpb=969bd23cab98a79ca9101af33334000879fb60c5 diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLAnnotationModel.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLAnnotationModel.java index 181abf7e4..b8010ef82 100644 --- a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLAnnotationModel.java +++ b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLAnnotationModel.java @@ -1,75 +1,83 @@ -package org.simantics.scl.ui.editor2; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.Position; -import org.eclipse.jface.text.source.Annotation; -import org.eclipse.jface.text.source.AnnotationModel; -import org.simantics.scl.compiler.errors.CompilationError; -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.module.Module; -import org.simantics.scl.compiler.module.repository.ModuleRepository; -import org.simantics.scl.compiler.module.repository.UpdateListener; - -public class SCLAnnotationModel extends AnnotationModel { - private final SCLModuleEditorInput input; - private final ModuleRepository repository; - private volatile boolean connected = false; - - public SCLAnnotationModel(SCLModuleEditorInput input, - ModuleRepository repository) { - this.input = input; - this.repository = repository; - } - - UpdateListener updateListener = new UpdateListener() { - @Override - public void notifyAboutUpdate() { - if(connected) - updateAnnotations(); - } - }; - - private void updateAnnotations() { - Failable result = repository.getModule(input.getModuleName(), updateListener); - if(result instanceof Failure) { - Failure failure = (Failure)result; - setAnnotations(Arrays.asList(failure.errors)); - } - else { - setAnnotations(Collections.emptyList()); - } - } - - protected void setAnnotations(List errors) { - synchronized(getLockObject()) { - removeAllAnnotations(); - for(CompilationError error : errors) { - Annotation annotation = new Annotation("org.eclipse.ui.workbench.texteditor.error", true, - error.description); - int begin = Locations.beginOf(error.location); - int end = Locations.endOf(error.location); - Position position = new Position(begin, end - begin); - addAnnotation(annotation, position); - } - } - } - - @Override - public void connect(IDocument document) { - super.connect(document); - connected = true; - updateAnnotations(); - } - - @Override - public void disconnect(IDocument document) { - connected = false; - super.disconnect(document); - } -} +package org.simantics.scl.ui.editor2; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.Position; +import org.eclipse.jface.text.source.Annotation; +import org.eclipse.jface.text.source.AnnotationModel; +import org.simantics.scl.compiler.errors.CompilationError; +import org.simantics.scl.compiler.errors.DoesNotExist; +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; + +public class SCLAnnotationModel extends AnnotationModel { + private final SCLModuleEditorInput input; + private final ModuleRepository repository; + private volatile boolean connected = false; + + public SCLAnnotationModel(SCLModuleEditorInput input, + ModuleRepository repository) { + this.input = input; + this.repository = repository; + } + + UpdateListener updateListener = new UpdateListener() { + @Override + public void notifyAboutUpdate() { + if(connected) + updateAnnotations(); + } + }; + + private void updateAnnotations() { + Failable 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.emptyList()); + else + setAnnotations(Arrays.asList(result.getResult().getWarnings())); + } + + protected void setAnnotations(List errors) { + synchronized(getLockObject()) { + 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", + true, error.description); + int begin = Locations.beginOf(error.location); + int end = Locations.endOf(error.location); + Position position = new Position(begin, end - begin); + addAnnotation(annotation, position); + } + } + } + + @Override + public void connect(IDocument document) { + super.connect(document); + connected = true; + updateAnnotations(); + } + + @Override + public void disconnect(IDocument document) { + connected = false; + updateListener.stopListening(); + super.disconnect(document); + } +}