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}