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);
     }
 }