/** * */ package com.sap.furcas.parsergenerator.tcs.t2m.grammar; import java.util.HashSet; import java.util.Set; import com.sap.furcas.runtime.common.exceptions.SyntaxElementException; /** * Collects all Semantic errors occurring while trying to generate a Grammar */ public class SemanticErrorBucket { public static final int SEVERITY_ERROR = 0; public static final int SEVERITY_WARNING = 1; private Set<SemanticErrorWrapper> messages = new HashSet<SemanticErrorWrapper>(); /** * * @param message * @param modelElement to mark as having an error */ public void addError (String message, Object modelElement) { messages.add(new SemanticErrorWrapper(modelElement, message, SEVERITY_ERROR)); } public void addException (SyntaxElementException ex) { messages.add(new SemanticErrorWrapper(ex.getSyntaxModelElement(), ex.getMessage(), SEVERITY_ERROR)); } public Set<SemanticErrorWrapper> getErrors() { return messages; } /** * */ public void clear() { messages.clear(); } public void addWarning(String message, Object modelElement) { messages.add(new SemanticErrorWrapper(modelElement, message, SEVERITY_WARNING)); } class SemanticErrorWrapper { String message; Object modelElement; int severity; public SemanticErrorWrapper(Object modelElement, String message, int severity) { super(); this.modelElement = modelElement; this.message = message; this.severity = severity; } /** * @return */ public Object getSyntaxModelElement() { return modelElement; } /** * @return */ public String getMessage() { return message; } @Override public String toString() { return severity + ":" + message + " for element " + modelElement; } @Override public boolean equals(Object obj) { if (obj instanceof SemanticErrorWrapper) { SemanticErrorWrapper other = (SemanticErrorWrapper) obj; return (severity == other.severity) && (message.equals(other.message)) && (modelElement.equals(other.modelElement)); } return false; } @Override public int hashCode() { // using XOR operator ^ return (message == null ? 0 : message.hashCode()) ^ (modelElement == null ? 0 : modelElement.hashCode()) ^ severity; } } }