001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.tools.template_engine;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import org.openstreetmap.josm.tools.template_engine.Tokenizer.Token;
007import org.openstreetmap.josm.tools.template_engine.Tokenizer.TokenType;
008
009public class ParseError extends Exception {
010
011    private final transient Token unexpectedToken;
012
013    public ParseError(Token unexpectedToken) {
014        super(tr("Unexpected token ({0}) on position {1}", unexpectedToken.getType(), unexpectedToken.getPosition()));
015        this.unexpectedToken = unexpectedToken;
016    }
017
018    public ParseError(Token unexpectedToken, TokenType expected) {
019        super(tr("Unexpected token on position {0}. Expected {1}, found {2}",
020                unexpectedToken.getPosition(), expected, unexpectedToken.getType()));
021        this.unexpectedToken = unexpectedToken;
022    }
023
024    public ParseError(int position, org.openstreetmap.josm.actions.search.SearchCompiler.ParseError e) {
025        super(tr("Error while parsing search expression on position {0}", position), e);
026        unexpectedToken = null;
027    }
028
029    public ParseError(String message) {
030        super(message);
031        unexpectedToken = null;
032    }
033
034    public Token getUnexpectedToken() {
035        return unexpectedToken;
036    }
037
038    public static ParseError unexpectedChar(char expected, char found, int position) {
039        return new ParseError(tr("Unexpected char on {0}. Expected {1} found {2}", position, expected, found));
040    }
041}