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() {
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');
}
public int getErrorCount() {
- return errors.size();
+ return errorCount;
}
}