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.data.osm.search.SearchParseError; 007import org.openstreetmap.josm.tools.template_engine.Tokenizer.Token; 008import org.openstreetmap.josm.tools.template_engine.Tokenizer.TokenType; 009 010/** 011 * Exception thrown in case of an error during template parsing. 012 * 013 * Usually caused by invalid user input. 014 */ 015public class ParseError extends Exception { 016 017 private final transient Token unexpectedToken; 018 019 public ParseError(Token unexpectedToken) { 020 super(tr("Unexpected token ({0}) on position {1}", unexpectedToken.getType(), unexpectedToken.getPosition())); 021 this.unexpectedToken = unexpectedToken; 022 } 023 024 public ParseError(Token unexpectedToken, TokenType expected) { 025 super(tr("Unexpected token on position {0}. Expected {1}, found {2}", 026 unexpectedToken.getPosition(), expected, unexpectedToken.getType())); 027 this.unexpectedToken = unexpectedToken; 028 } 029 030 public ParseError(int position, SearchParseError e) { 031 super(tr("Error while parsing search expression on position {0}", position), e); 032 unexpectedToken = null; 033 } 034 035 public ParseError(String message) { 036 super(message); 037 unexpectedToken = null; 038 } 039 040 public Token getUnexpectedToken() { 041 return unexpectedToken; 042 } 043 044 public static ParseError unexpectedChar(char expected, char found, int position) { 045 return new ParseError(tr("Unexpected char on {0}. Expected {1} found {2}", position, expected, found)); 046 } 047}