package org.uva.student.calinwouter.qlqls.ql.model; import org.uva.student.calinwouter.qlqls.ql.interfaces.ITypeDescriptor; import java.util.LinkedList; import java.util.List; public class QLTypeCheckResults { private final List<String> errors, warnings; public List<String> getErrors() { return errors; } public List<String> getWarnings() { return warnings; } private void addError(String s) { this.errors.add(s); } public void addErrorTypeIsNotOfType(ITypeDescriptor typeDescriptor) { addError("Type is not of type: " + typeDescriptor + "."); } public void addUndefinedReferenceError(String undefinedReference) { addError("Undefined reference: " + undefinedReference + "."); } public void addCyclicDependencyError(String firstIdentifier, String secondIdentifier){ addError("Cyclic dependency between: " + firstIdentifier + " and " + secondIdentifier + "."); } private void addWarning(final String s) { this.warnings.add(s); } public void addTwoQuestionsSameTypeError(final String variable) { addError("Two questions with the same identifier and a different type were found for variable: " + variable + "."); } public void addLabelFoundTwiceWarning(final String fieldLabel) { addWarning("Label " + fieldLabel + " found twice."); } private void appendAllErrorsStrings(StringBuilder results) { for (String error : errors) { results.append("\t\t"); results.append(error); results.append("\n"); } } private void appendAllWarningsStrings(StringBuilder results) { for (String warning : warnings) { results.append("\t\t"); results.append(warning); results.append("\n"); } } private void appendErrorsString(StringBuilder results) { if (errors.size() > 0) { results.append("\tErrors:\n"); appendAllErrorsStrings(results); } results.append("\tNo errors.\n"); } private void appendWarningsString(StringBuilder results) { if (warnings.size() > 0) { results.append("\n\tWarnings:\n"); appendAllWarningsStrings(results); return; } results.append("\tNo warnings.\n"); } public String toString() { final StringBuilder results = new StringBuilder("Type checker results:\n"); appendErrorsString(results); appendWarningsString(results); return results.toString(); } public boolean hasErrors() { return errors.size() != 0; } public QLTypeCheckResults() { this.errors = new LinkedList<String>(); this.warnings = new LinkedList<String>(); } }