]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/errors/ErrorLog.java
f2e648b0089ea022021c815f98cf5e52d5d4228c
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / errors / ErrorLog.java
1 package org.simantics.scl.compiler.errors;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5
6 import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;
7
8 public class ErrorLog {
9     ArrayList<CompilationError> errors = new ArrayList<CompilationError>(); 
10     long exceptionPosition = Locations.NO_LOCATION;
11     
12     public void log(String message) {
13         errors.add(new CompilationError(message));
14     }
15     
16     public void log(CompilationError error) {
17         errors.add(error);
18     }
19     
20     public void log(long locatable, String description) {
21         log(new CompilationError(locatable, description));
22     }
23
24     public void log(Exception e) {
25         long location = Locations.NO_LOCATION;
26         if(e instanceof InternalCompilerError)
27             location = ((InternalCompilerError)e).location;
28         if(location == Locations.NO_LOCATION)
29             location = exceptionPosition;
30         log(new CompilationError(location, e));
31     }
32     
33     public void log(long location, Exception e) {
34         log(new CompilationError(location, e));
35     }
36     
37     public boolean isEmpty() {
38         return errors.isEmpty();
39     }
40
41     public CompilationError[] getErrors() {
42         Collections.sort(errors);
43         return errors.toArray(new CompilationError[errors.size()]);
44     }
45
46     public void setExceptionPosition(long exceptionPosition) {
47         if(this.exceptionPosition == Locations.NO_LOCATION)
48             this.exceptionPosition = exceptionPosition;
49     }
50
51     public String getErrorsAsString() {
52         StringBuilder b = new StringBuilder();
53         for(CompilationError error : errors)
54             b.append(error.description).append('\n');
55         return b.toString();
56     }
57     
58     @Override
59     public String toString() {
60         return getErrorsAsString();
61     }
62
63     public int getErrorCount() {
64         return errors.size();
65     }
66 }