]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/errors/ErrorLog.java
(refs #7386) Minor SCL tools improvements
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / errors / ErrorLog.java
index 13e80fc6d62755e6d162d14536b74cff6e32e160..0e61a1644ef961bd99b9ae4a770eda46ffadf87e 100644 (file)
@@ -6,34 +6,51 @@ import java.util.Collections;
 import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;
 
 public class ErrorLog {
-    ArrayList<CompilationError> errors = new ArrayList<CompilationError>(); 
-    long exceptionPosition;
+    ArrayList<CompilationError> errors = new ArrayList<CompilationError>();
+    int errorCount;
+    long exceptionPosition = Locations.NO_LOCATION;
     
     public void log(String message) {
-        errors.add(new CompilationError(message));
+        log(new CompilationError(message));
     }
     
     public void log(CompilationError error) {
         errors.add(error);
+        if(error.severity != ErrorSeverity.WARNING)
+               ++errorCount;
     }
     
     public void log(long locatable, String description) {
         log(new CompilationError(locatable, description));
     }
+    
+    public void logWarning(long locatable, String description) {
+        log(new CompilationError(locatable, description, ErrorSeverity.WARNING));
+    }
 
     public void log(Exception e) {
+        long location = Locations.NO_LOCATION;
         if(e instanceof InternalCompilerError)
-            log(((InternalCompilerError)e).location, e);
-        else
-            log(new CompilationError(e));
+            location = ((InternalCompilerError)e).location;
+        if(location == Locations.NO_LOCATION)
+            location = exceptionPosition;
+        log(new CompilationError(location, e));
     }
     
     public void log(long location, Exception e) {
         log(new CompilationError(location, e));
     }
     
-    public boolean isEmpty() {
-        return errors.isEmpty();
+    public boolean hasNoErrors() {
+        return errorCount == 0;
+    }
+    
+    public boolean hasErrors() {
+        return errorCount > 0;
+    }
+    
+    public boolean hasErrorsOrWarnings() {
+        return !errors.isEmpty();
     }
 
     public CompilationError[] getErrors() {
@@ -45,12 +62,9 @@ public class ErrorLog {
         if(this.exceptionPosition == Locations.NO_LOCATION)
             this.exceptionPosition = exceptionPosition;
     }
-    
-    public long getExceptionPosition() {
-        return exceptionPosition;
-    }
 
     public String getErrorsAsString() {
+        Collections.sort(errors);
         StringBuilder b = new StringBuilder();
         for(CompilationError error : errors)
             b.append(error.description).append('\n');
@@ -61,4 +75,8 @@ public class ErrorLog {
     public String toString() {
         return getErrorsAsString();
     }
+
+    public int getErrorCount() {
+        return errorCount;
+    }
 }