1 package org.simantics.scl.ui.editor2;
\r
3 import java.util.Arrays;
\r
4 import java.util.Collections;
\r
5 import java.util.List;
\r
7 import org.eclipse.jface.text.IDocument;
\r
8 import org.eclipse.jface.text.Position;
\r
9 import org.eclipse.jface.text.source.Annotation;
\r
10 import org.eclipse.jface.text.source.AnnotationModel;
\r
11 import org.simantics.scl.compiler.errors.CompilationError;
\r
12 import org.simantics.scl.compiler.errors.Failable;
\r
13 import org.simantics.scl.compiler.errors.Failure;
\r
14 import org.simantics.scl.compiler.errors.Locations;
\r
15 import org.simantics.scl.compiler.module.Module;
\r
16 import org.simantics.scl.compiler.module.repository.ModuleRepository;
\r
17 import org.simantics.scl.compiler.module.repository.UpdateListener;
\r
19 public class SCLAnnotationModel extends AnnotationModel {
\r
20 private final SCLModuleEditorInput input;
\r
21 private final ModuleRepository repository;
\r
22 private volatile boolean connected = false;
\r
24 public SCLAnnotationModel(SCLModuleEditorInput input,
\r
25 ModuleRepository repository) {
\r
27 this.repository = repository;
\r
30 UpdateListener updateListener = new UpdateListener() {
\r
32 public void notifyAboutUpdate() {
\r
34 updateAnnotations();
\r
38 private void updateAnnotations() {
\r
39 Failable<Module> result = repository.getModule(input.getModuleName(), updateListener);
\r
40 if(result instanceof Failure) {
\r
41 Failure failure = (Failure)result;
\r
42 setAnnotations(Arrays.asList(failure.errors));
\r
45 setAnnotations(Collections.<CompilationError>emptyList());
\r
49 protected void setAnnotations(List<CompilationError> errors) {
\r
50 synchronized(getLockObject()) {
\r
51 removeAllAnnotations();
\r
52 for(CompilationError error : errors) {
\r
53 Annotation annotation = new Annotation("org.eclipse.ui.workbench.texteditor.error", true,
\r
55 int begin = Locations.beginOf(error.location);
\r
56 int end = Locations.endOf(error.location);
\r
57 Position position = new Position(begin, end - begin);
\r
58 addAnnotation(annotation, position);
\r
64 public void connect(IDocument document) {
\r
65 super.connect(document);
\r
67 updateAnnotations();
\r
71 public void disconnect(IDocument document) {
\r
73 super.disconnect(document);
\r