From c53e1790e19cc1952ccb985b7e399bbb90dbc072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Wed, 25 Jan 2017 14:42:25 -0300 Subject: [PATCH 1/2] [java] Allow more than 1 annotation in local classes - This fixes #208 --- pmd-java/etc/grammar/Java.jjt | 7 ++++++- .../pmd/lang/java/ast/ParserCornersTest.java | 6 ++++++ .../sourceforge/pmd/lang/java/ast/GitHubBug208.java | 11 +++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/GitHubBug208.java diff --git a/pmd-java/etc/grammar/Java.jjt b/pmd-java/etc/grammar/Java.jjt index 0548fdf6d0..3e6f53a932 100644 --- a/pmd-java/etc/grammar/Java.jjt +++ b/pmd-java/etc/grammar/Java.jjt @@ -1,4 +1,9 @@ /** + * Allow local classes to carry more than one annotation. + * Bug #208 + * + * Juan Martin Sotuyo Dodero 01/2017 + *==================================================================== * Change lookahead for AnnotationMethodDeclaration in AnnotationTypeMemberDeclaration. * Bug #206 * @@ -1978,7 +1983,7 @@ void BlockStatement(): ClassOrInterfaceDeclaration, but that seems like a hack that could break other things... */ - LOOKAHEAD( [Annotation()] ["final"|"abstract"] "class") [Annotation()] ClassOrInterfaceDeclaration(0) + LOOKAHEAD( (Annotation())* ["final"|"abstract"] "class") (Annotation())* ClassOrInterfaceDeclaration(0) } void LocalVariableDeclaration() : 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 4e151479e7..9a0b20d366 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 @@ -152,6 +152,12 @@ public class ParserCornersTest extends ParserTst { parseJava18(code); } + @Test + public void testGitHubBug208ParseError() throws Exception { + String c = IOUtils.toString(this.getClass().getResourceAsStream("GitHubBug208.java")); + parseJava15(c); + } + /** * This triggered bug #1484 UnusedLocalVariable - false positive - parenthesis * @throws Exception diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/GitHubBug208.java b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/GitHubBug208.java new file mode 100644 index 0000000000..df790a09ff --- /dev/null +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/GitHubBug208.java @@ -0,0 +1,11 @@ +public class GitHubBug208 { + public void testMethod() { + @Lazy + @Configuration + class LocalClass { + @Bean Object foo() { + return null; + } + } + } +} \ No newline at end of file From 5081c8976386fe6ad0524593710c2ead8ad536c9 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 27 Jan 2017 20:00:44 +0100 Subject: [PATCH 2/2] Update changelog, references #208 --- src/site/markdown/overview/changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md index a890b981c0..a0d545da93 100644 --- a/src/site/markdown/overview/changelog.md +++ b/src/site/markdown/overview/changelog.md @@ -44,6 +44,7 @@ See also [bugfix #1556](https://sourceforge.net/p/pmd/bugs/1556/). * java * [#206](https://github.com/pmd/pmd/issues/206): \[java] Parse error on annotation fields with generics * [#207](https://github.com/pmd/pmd/issues/207): \[java] Parse error on method reference with generics + * [#208](https://github.com/pmd/pmd/issues/208): \[java] Parse error with local class with 2 or more annotations * [#213](https://github.com/pmd/pmd/issues/213): \[java] CPD: OutOfMemory when analyzing Lucene * java-design * [#1552](https://sourceforge.net/p/pmd/bugs/1552/): \[java] MissingBreakInSwitch - False positive for continue