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    }