Author: radu Date: Mon Mar 16 10:07:39 2015 New Revision: 1666945 URL: http://svn.apache.org/r1666945 Log: SLING-4499 - Sightly: Parsing errors should not show up in console/stdout
* added custom error listener to the Lexer as well, as per Sam Harwell's suggestion: http://stackoverflow.com/a/18137301/831507 * updated the error listener to also accept Lexer recognizers (applied patch provided by Vlad Băilescu - closes #71) Modified: sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/ExpressionParser.java sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/SightlyParserErrorListener.java Modified: sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/ExpressionParser.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/ExpressionParser.java?rev=1666945&r1=1666944&r2=1666945&view=diff ============================================================================== --- sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/ExpressionParser.java (original) +++ sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/ExpressionParser.java Mon Mar 16 10:07:39 2015 @@ -45,6 +45,8 @@ public class ExpressionParser { private SightlyParser createParser(String string) { SightlyLexer lexer = new SightlyLexer(new ANTLRInputStream(string)); + lexer.removeErrorListeners(); + lexer.addErrorListener(new SightlyParserErrorListener()); CommonTokenStream tokenStream = new CommonTokenStream(lexer); SightlyParser parser = new SightlyParser(tokenStream); parser.removeErrorListeners(); Modified: sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/SightlyParserErrorListener.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/SightlyParserErrorListener.java?rev=1666945&r1=1666944&r2=1666945&view=diff ============================================================================== --- sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/SightlyParserErrorListener.java (original) +++ sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/SightlyParserErrorListener.java Mon Mar 16 10:07:39 2015 @@ -37,13 +37,17 @@ public class SightlyParserErrorListener @Override public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) { - List<String> stack = ((Parser) recognizer).getRuleInvocationStack(); - Collections.reverse(stack); + String offendingInput; + if (Parser.class.isAssignableFrom(recognizer.getClass())) { + List<String> stack = ((Parser) recognizer).getRuleInvocationStack(); + Collections.reverse(stack); + offendingInput = ((CommonTokenStream) recognizer.getInputStream()).getTokenSource().getInputStream().toString(); + } else { + offendingInput = recognizer.getInputStream().toString(); + } if (e != null) { - throw new SightlyParsingException(msg, - ((CommonTokenStream) recognizer.getInputStream()).getTokenSource().getInputStream().toString(), e); + throw new SightlyParsingException(msg, offendingInput, e); } - throw new SightlyParsingException(msg, - ((CommonTokenStream) recognizer.getInputStream()).getTokenSource().getInputStream().toString()); + throw new SightlyParsingException(msg, offendingInput); } }