You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2015/03/16 11:07:39 UTC
svn commit: r1666945 - in
/sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend:
ExpressionParser.java SightlyParserErrorListener.java
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);
}
}