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 }