]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLAnnotationModel.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor2 / SCLAnnotationModel.java
1 package org.simantics.scl.ui.editor2;
2
3 import java.util.Arrays;
4 import java.util.Collections;
5 import java.util.List;
6
7 import org.eclipse.jface.text.IDocument;
8 import org.eclipse.jface.text.Position;
9 import org.eclipse.jface.text.source.Annotation;
10 import org.eclipse.jface.text.source.AnnotationModel;
11 import org.simantics.scl.compiler.errors.CompilationError;
12 import org.simantics.scl.compiler.errors.Failable;
13 import org.simantics.scl.compiler.errors.Failure;
14 import org.simantics.scl.compiler.errors.Locations;
15 import org.simantics.scl.compiler.module.Module;
16 import org.simantics.scl.compiler.module.repository.ModuleRepository;
17 import org.simantics.scl.compiler.module.repository.UpdateListener;
18
19 public class SCLAnnotationModel extends AnnotationModel {
20     private final SCLModuleEditorInput input;
21     private final ModuleRepository repository;
22     private volatile boolean connected = false;
23     
24     public SCLAnnotationModel(SCLModuleEditorInput input,
25             ModuleRepository repository) {
26         this.input = input;
27         this.repository = repository;
28     }
29     
30     UpdateListener updateListener = new UpdateListener() {
31         @Override
32         public void notifyAboutUpdate() {
33             if(connected)
34                 updateAnnotations();
35         }
36     };
37     
38     private void updateAnnotations() {
39         Failable<Module> result = repository.getModule(input.getModuleName(), updateListener);
40         if(result instanceof Failure) {
41             Failure failure = (Failure)result;
42             setAnnotations(Arrays.asList(failure.errors));
43         }
44         else {
45             setAnnotations(Collections.<CompilationError>emptyList());
46         }
47     }
48     
49     protected void setAnnotations(List<CompilationError> errors) {
50         synchronized(getLockObject()) {
51             removeAllAnnotations();
52             for(CompilationError error : errors) {
53                 Annotation annotation = new Annotation("org.eclipse.ui.workbench.texteditor.error", true,
54                         error.description);
55                 int begin = Locations.beginOf(error.location);
56                 int end = Locations.endOf(error.location);
57                 Position position = new Position(begin, end - begin);
58                 addAnnotation(annotation, position);
59             }
60         }
61     }
62
63     @Override
64     public void connect(IDocument document) {
65         super.connect(document);
66         connected = true;
67         updateAnnotations();
68     }
69     
70     @Override
71     public void disconnect(IDocument document) {
72         connected = false;
73         super.disconnect(document);
74     }
75 }