package org.simantics.scl.compiler.errors; import java.util.ArrayList; import java.util.Collections; import org.simantics.scl.compiler.common.exceptions.InternalCompilerError; public class ErrorLog { ArrayList errors = new ArrayList(); long exceptionPosition = Locations.NO_LOCATION; public void log(String message) { errors.add(new CompilationError(message)); } public void log(CompilationError error) { errors.add(error); } public void log(long locatable, String description) { log(new CompilationError(locatable, description)); } public void log(Exception e) { long location = Locations.NO_LOCATION; if(e instanceof InternalCompilerError) 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 CompilationError[] getErrors() { Collections.sort(errors); return errors.toArray(new CompilationError[errors.size()]); } public void setExceptionPosition(long exceptionPosition) { if(this.exceptionPosition == Locations.NO_LOCATION) this.exceptionPosition = exceptionPosition; } public String getErrorsAsString() { StringBuilder b = new StringBuilder(); for(CompilationError error : errors) b.append(error.description).append('\n'); return b.toString(); } @Override public String toString() { return getErrorsAsString(); } public int getErrorCount() { return errors.size(); } }