From e9f14e44961113450aac6927e5474fbb5a310044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Wed, 12 Oct 2016 14:18:29 -0300 Subject: [PATCH 1/3] Add failing test scenario --- .../sourceforge/pmd/lang/java/ast/ParserCornersTest.java | 6 ++++++ .../net/sourceforge/pmd/lang/java/ast/Bug1530.java | 5 +++++ 2 files changed, 11 insertions(+) create mode 100644 pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/Bug1530.java diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ParserCornersTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ParserCornersTest.java index 8c099ac5b0..eaae58d7e1 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ParserCornersTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ParserCornersTest.java @@ -130,6 +130,12 @@ public class ParserCornersTest extends ParserTst { String c = IOUtils.toString(this.getClass().getResourceAsStream("Bug1429.java")); parseJava18(c); } + + @Test + public void testBug1530ParseError() throws Exception { + String c = IOUtils.toString(this.getClass().getResourceAsStream("Bug1530.java")); + parseJava18(c); + } /** * This triggered bug #1484 UnusedLocalVariable - false positive - parenthesis diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/Bug1530.java b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/Bug1530.java new file mode 100644 index 0000000000..e6d6c784d4 --- /dev/null +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/Bug1530.java @@ -0,0 +1,5 @@ +public class Bug1530 { + public void incChild() { + ((PathElement) stack.getLastLeaf().getUserObject()).currentChild++; + } +} \ No newline at end of file From 283dc00a43741cd4b1e48324f63b22b12c30dcd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Wed, 12 Oct 2016 16:58:33 -0300 Subject: [PATCH 2/3] Replace syntactic lookahead with semantic one - They are the same, but JavaCC seems to handle this one better. --- pmd-java/etc/grammar/Java.jjt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pmd-java/etc/grammar/Java.jjt b/pmd-java/etc/grammar/Java.jjt index 5b2b631c37..24b576ddd2 100644 --- a/pmd-java/etc/grammar/Java.jjt +++ b/pmd-java/etc/grammar/Java.jjt @@ -1,4 +1,11 @@ /** + * Fix for regression introduced in previous changeset. + * The syntactic lookahead was not properly handled by javacc, + * so it was converted to a semantic one + * Bug #1530 + * + * Juan Martin Sotuyo Dodero 10/2016 + *==================================================================== * Fix for an expression within an additive expression that was * wrongly taken as a cast expression. * Bug #1484 @@ -1761,7 +1768,7 @@ void UnaryExpressionNotPlusMinus() #UnaryExpressionNotPlusMinus((jjtn000.getImag {} { ( "~" {jjtThis.setImage("~");} | "!" {jjtThis.setImage("!");} ) UnaryExpression() -| LOOKAHEAD("(" ")" "+") PostfixExpression() +| LOOKAHEAD( { getToken(1).kind == LPAREN && getToken(2).kind == IDENTIFIER && getToken(3).kind == RPAREN && getToken(4).kind == PLUS } ) PostfixExpression() | LOOKAHEAD( CastExpression() ) CastExpression() | LOOKAHEAD("(" Type() ")" "(") CastExpression() | PostfixExpression() @@ -1843,9 +1850,8 @@ void PrimarySuffix() : } void Literal() : -{} -{ { Token t;} +{ t= { checkForBadNumericalLiteralslUsage(t); jjtThis.setImage(t.image); jjtThis.setIntLiteral();} | t= { checkForBadNumericalLiteralslUsage(t); jjtThis.setImage(t.image); jjtThis.setFloatLiteral();} | t= { checkForBadHexFloatingPointLiteral(); checkForBadNumericalLiteralslUsage(t); jjtThis.setImage(t.image); jjtThis.setFloatLiteral();} From 1bc409119cd2a061bd460f12554656d7b36ffe50 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sun, 16 Oct 2016 14:07:56 +0200 Subject: [PATCH 3/3] Update changelog, fixes #1530 [java] Parser exception on Java code --- src/site/markdown/overview/changelog.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md index 6ac407ab54..7dfd57fc32 100644 --- a/src/site/markdown/overview/changelog.md +++ b/src/site/markdown/overview/changelog.md @@ -14,11 +14,13 @@ * [#35](https://github.com/adangel/pmd/pull/35): Javascript tokenizer now ignores comment tokens. * [#103](https://github.com/pmd/pmd/pull/103): \[java] \[apex] Fix for 1501: CyclomaticComplexity rule causes OOM when class reporting is disabled +* [#110](https://github.com/pmd/pmd/pull/110): \[java] Fix parser error (issue 1530) **Bugfixes:** * Java * [#1501](https://sourceforge.net/p/pmd/bugs/1501/): \[java] \[apex] CyclomaticComplexity rule causes OOM when class reporting is disabled + * [#1530](https://sourceforge.net/p/pmd/bugs/1530/): \[java] Parser exception on Java code * java-comments * [#1522](https://sourceforge.net/p/pmd/bugs/1522/): \[java] CommentRequired: false positive * java-design/CloseResource