javadoc: fix repeatable annotations check (IDEA-265396)

GitOrigin-RevId: cadc4dcdfb3d0b9604550f0eaa6b390ec4b19c09
This commit is contained in:
Anna Kozlova
2021-05-26 17:27:25 +02:00
committed by intellij-monorepo-bot
parent c2ebab1d86
commit a0b3b2cce3
3 changed files with 32 additions and 1 deletions

View File

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

View File

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

View File

@@ -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 <b>repeatableAnnotations</b>\n" +
"extends <a href=\"psi_element://java.lang.Object\"><code>Object</code></a>",
JavaDocInfoGenerator.generateSignature(getTestClass()));
}
public void testAnonymousAndSuperJavadoc() {
PsiClass psiClass = PsiTreeUtil.findChildOfType(getTestClass(), PsiAnonymousClass.class);
assertNotNull(psiClass);