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