package de.skuzzle.polly.core.parser.ast.declarations; import java.util.List; import de.skuzzle.polly.core.parser.Position; import de.skuzzle.polly.core.parser.ast.visitor.ASTTraversalException; public class DeclarationException extends ASTTraversalException { /** Max similar suggestions to show in error message */ public final static int MAX_SUGGESTIONS = 3; private static final long serialVersionUID = 1L; private final List<String> similar; private final String message; public DeclarationException(Position position, String message, List<String> similar) { super(position, message); this.similar = similar; final StringBuilder b = new StringBuilder(); if (similar.isEmpty()) { this.message = message; return; } b.append(message); b.append(" Meintest du vielleicht: "); int max = Math.min(MAX_SUGGESTIONS, similar.size()); for (int i = 0; i < max; ++i) { b.append("'"); b.append(similar.get(i)); b.append("'"); if (i == max - 2) { b.append(" oder "); } else if (i < max - 1) { b.append(", "); } } b.append("? In Eingabe an Position: "); b.append(position); this.message = b.toString(); } public List<String> getSimilar() { return this.similar; } @Override public String getMessage() { return this.message; } }