From a0b3b2cce30c55267c4746730ddaed030e20f2e7 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 26 May 2021 17:27:25 +0200 Subject: [PATCH] javadoc: fix repeatable annotations check (IDEA-265396) GitOrigin-RevId: cadc4dcdfb3d0b9604550f0eaa6b390ec4b19c09 --- .../javadoc/AnnotationDocGenerator.java | 2 +- .../javadocIG/repeatableAnnotations.java | 21 +++++++++++++++++++ .../javadoc/JavaDocInfoGeneratorTest.java | 10 +++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/javadocIG/repeatableAnnotations.java diff --git a/java/java-impl/src/com/intellij/codeInsight/javadoc/AnnotationDocGenerator.java b/java/java-impl/src/com/intellij/codeInsight/javadoc/AnnotationDocGenerator.java index 06b40677f1cb..0f9562069260 100644 --- a/java/java-impl/src/com/intellij/codeInsight/javadoc/AnnotationDocGenerator.java +++ b/java/java-impl/src/com/intellij/codeInsight/javadoc/AnnotationDocGenerator.java @@ -197,7 +197,7 @@ public final class AnnotationDocGenerator { AnnotationDocGenerator anno = new AnnotationDocGenerator(annotation, nameReferenceElement, context); if (anno.isNonDocumentedAnnotation()) return null; - if (!(shownAnnotations.add(annotation.getQualifiedName()) || JavaDocInfoGenerator.isRepeatableAnnotationType(annotation))) return null; + if (!(shownAnnotations.add(annotation.getQualifiedName()) || JavaDocInfoGenerator.isRepeatableAnnotationType(nameReferenceElement.resolve()))) return null; return anno; } } diff --git a/java/java-tests/testData/codeInsight/javadocIG/repeatableAnnotations.java b/java/java-tests/testData/codeInsight/javadocIG/repeatableAnnotations.java new file mode 100644 index 000000000000..7be268a6ffa5 --- /dev/null +++ b/java/java-tests/testData/codeInsight/javadocIG/repeatableAnnotations.java @@ -0,0 +1,21 @@ +import java.lang.annotation.*; +import java.util.ArrayList; +import java.util.List; + +@R("a") +@R("b") +class repeatableAnnotations {} + +@Documented +@Repeatable(R.Rs.class) +@Retention(RetentionPolicy.SOURCE) +@Target({ElementType.FIELD, ElementType.TYPE}) +@interface R { + String value(); + @Documented + @Retention(RetentionPolicy.SOURCE) + @Target({ElementType.TYPE, ElementType.FIELD}) + public @interface Rs { + R[] value(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/JavaDocInfoGeneratorTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/JavaDocInfoGeneratorTest.java index 53355d0d4624..e85c49557a07 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/JavaDocInfoGeneratorTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/JavaDocInfoGeneratorTest.java @@ -4,6 +4,7 @@ package com.intellij.java.codeInsight.javadoc; import com.intellij.JavaTestUtil; import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInsight.JavaCodeInsightTestCase; +import com.intellij.codeInsight.javadoc.JavaDocInfoGenerator; import com.intellij.java.codeInsight.JavaExternalDocumentationTest; import com.intellij.lang.java.JavaDocumentationProvider; import com.intellij.openapi.application.ApplicationManager; @@ -113,6 +114,15 @@ public class JavaDocInfoGeneratorTest extends JavaCodeInsightTestCase { public void testTypeAnnotationArray() { useJava8(); doTestAtCaret(); } public void testTypeAnnotationClass() { useJava8(); doTestClass(); } + public void testRepeatableAnnotations() { + useJava8(); + assertEquals("@R("a") \n" + + "@R("b") \n" + + "class repeatableAnnotations\n" + + "extends Object", + JavaDocInfoGenerator.generateSignature(getTestClass())); + } + public void testAnonymousAndSuperJavadoc() { PsiClass psiClass = PsiTreeUtil.findChildOfType(getTestClass(), PsiAnonymousClass.class); assertNotNull(psiClass);