From fa28aa7e2328c88bb5a054d3bd0fdd48d57c9046 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 28 Feb 2020 17:59:39 +0100 Subject: [PATCH] [java] Test annotations with RecordComponents --- pmd-java/etc/grammar/Java.jjt | 2 +- .../pmd/lang/java/ast/ASTRecordComponent.java | 2 +- .../pmd/lang/java/ast/Java14PreviewTest.java | 4 ++++ .../java/ast/jdkversiontests/java14/Records.java | 16 +++++++++++----- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/pmd-java/etc/grammar/Java.jjt b/pmd-java/etc/grammar/Java.jjt index 6d9dfc4125..10e7f995bd 100644 --- a/pmd-java/etc/grammar/Java.jjt +++ b/pmd-java/etc/grammar/Java.jjt @@ -1147,7 +1147,7 @@ void RecordComponent(): { (Annotation())* Type() - [ (Annotation())* "..." {jjtThis.setVarargs();} ] + [ "..." {jjtThis.setVarargs();} ] VariableDeclaratorId() } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRecordComponent.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRecordComponent.java index 3b3e474a43..390a8ab8df 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRecordComponent.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRecordComponent.java @@ -14,7 +14,7 @@ import net.sourceforge.pmd.annotation.Experimental; * * RecordComponent ::= ({@linkplain ASTAnnotation Annotation})* * {@linkplain ASTType Type} - * ( ({@linkplain ASTAnnotation Annotation})* "..." )? + * ( "..." )? * {@linkplain ASTVariableDeclaratorId VariableDeclaratorId} * * diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/Java14PreviewTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/Java14PreviewTest.java index 7c788c2af4..204dd41944 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/Java14PreviewTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/Java14PreviewTest.java @@ -118,6 +118,8 @@ public class Java14PreviewTest { ASTRecordDeclaration complex = recordDecls.get(0); Assert.assertEquals("MyComplex", complex.getImage()); Assert.assertTrue(complex.isNested()); + Assert.assertEquals(0, complex.getRecordComponents().get(0).findChildrenOfType(ASTAnnotation.class).size()); + Assert.assertEquals(1, complex.getRecordComponents().get(1).findChildrenOfType(ASTAnnotation.class).size()); ASTRecordDeclaration nested = recordDecls.get(1); Assert.assertEquals("Nested", nested.getImage()); @@ -134,6 +136,8 @@ public class Java14PreviewTest { Assert.assertEquals("VarRec", varRec.getImage()); Assert.assertEquals("x", varRec.getRecordComponents().get(0).getVariableDeclaratorId().getImage()); Assert.assertTrue(varRec.getRecordComponents().get(0).isVarargs()); + Assert.assertEquals(2, varRec.getRecordComponents().get(0).findChildrenOfType(ASTAnnotation.class).size()); + Assert.assertEquals(1, varRec.getRecordComponents().get(0).getTypeNode().findDescendantsOfType(ASTAnnotation.class).size()); ASTRecordDeclaration arrayRec = recordDecls.get(4); Assert.assertEquals("ArrayRec", arrayRec.getImage()); diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java14/Records.java b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java14/Records.java index 5f12b5a159..507116941e 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java14/Records.java +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java14/Records.java @@ -1,12 +1,18 @@ +import java.lang.annotation.Target; +import java.lang.annotation.ElementType; + /** * @see JEP 359: Records (Preview) */ public class Records { + @Target(ElementType.TYPE_USE) + @interface Nullable { + } - public record MyComplex(int real, int imaginary) { + public record MyComplex(int real, @Deprecated int imaginary) { public record Nested(int a) {}; - }; + } public record Range(int lo, int hi) { @@ -16,9 +22,9 @@ public class Records { } } - public record VarRec(int ... x) {}; + public record VarRec(@Nullable @Deprecated String @Nullable ... x) {} - public record ArrayRec(int x[]) {}; + public record ArrayRec(int x[]) {} - public record EmptyRec() {}; + public record EmptyRec() {} }