From 156f86a322774e37dcea855a716d587e359359ef Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 22 Mar 2024 17:47:34 +0100 Subject: [PATCH] [kotlin] k2: quick documentation: find annotations on backing field - also fix links on annotation classes ^KTIJ-29181 fixed GitOrigin-RevId: 450d4f2af447578480bc0ec7ae46f24ce0a3f904 --- .../quickDoc/KotlinIdeDeclarationRenderer.kt | 15 ++++++++++++--- .../documentation/FirQuickDocTestGenerated.java | 5 +++++ .../quickDoc/QuickDocProviderTestGenerated.java | 5 +++++ .../editor/quickDoc/JvmFieldAnnotation.kt | 13 +++++++++++++ 4 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 plugins/kotlin/idea/tests/testData/editor/quickDoc/JvmFieldAnnotation.kt diff --git a/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/quickDoc/KotlinIdeDeclarationRenderer.kt b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/quickDoc/KotlinIdeDeclarationRenderer.kt index 13d5d63cd4e5..c1ae4ece45e0 100644 --- a/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/quickDoc/KotlinIdeDeclarationRenderer.kt +++ b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/quickDoc/KotlinIdeDeclarationRenderer.kt @@ -140,7 +140,13 @@ internal class KotlinIdeDeclarationRenderer( annotationListRenderer = object : KtAnnotationListRenderer { context(KtAnalysisSession, KtAnnotationRenderer) override fun renderAnnotations(owner: KtAnnotated, printer: PrettyPrinter) { - val annotations = owner.annotations.filter { annotationFilter.filter(it, owner) }.ifEmpty { return } + val backingFieldAnnotations = (owner as? KtPropertySymbol)?.backingFieldSymbol?.annotations + val annotations = (backingFieldAnnotations?.let { owner.annotations + it } ?: owner.annotations).filter { + annotationFilter.filter( + it, + owner + ) + }.ifEmpty { return } printer.printCollection( annotations, separator = when (owner) { is KtValueParameterSymbol -> " " @@ -149,7 +155,10 @@ internal class KotlinIdeDeclarationRenderer( } ) { annotation -> append(highlight("@") { asAnnotationName }) - annotationUseSiteTargetRenderer.renderUseSiteTarget(annotation, owner, printer) + if (backingFieldAnnotations != null && annotation in backingFieldAnnotations) { + printer.append(highlight("field") { asKeyword }) + printer.append(':') + } annotationsQualifiedNameRenderer.renderQualifier(annotation, owner, printer) annotationArgumentsRenderer.renderAnnotationArguments(annotation, owner, printer) } @@ -164,7 +173,7 @@ internal class KotlinIdeDeclarationRenderer( val classId = annotation.classId if (classId != null) { val buffer = StringBuilder() - DocumentationManagerUtil.createHyperlink(buffer, classId.asString(), classId.shortClassName.renderName(), true, false) + DocumentationManagerUtil.createHyperlink(buffer, classId.asSingleFqName().asString(), classId.shortClassName.renderName(), true, false) printer.append(highlight(buffer.toString()) { asAnnotationName }) } else { printer.append(highlight("ERROR_ANNOTATION") { asError }) diff --git a/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/documentation/FirQuickDocTestGenerated.java b/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/documentation/FirQuickDocTestGenerated.java index 0cb394928796..96b1d3ab8a18 100644 --- a/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/documentation/FirQuickDocTestGenerated.java +++ b/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/documentation/FirQuickDocTestGenerated.java @@ -158,6 +158,11 @@ public class FirQuickDocTestGenerated extends AbstractFirQuickDocTest { runTest("../../idea/tests/testData/editor/quickDoc/JavaMethodUsedInKotlinInParen.kt"); } + @TestMetadata("JvmFieldAnnotation.kt") + public void testJvmFieldAnnotation() throws Exception { + runTest("../../idea/tests/testData/editor/quickDoc/JvmFieldAnnotation.kt"); + } + @TestMetadata("KotlinClassUsedFromJava.java") public void testKotlinClassUsedFromJava() throws Exception { runTest("../../idea/tests/testData/editor/quickDoc/KotlinClassUsedFromJava.java"); diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/editor/quickDoc/QuickDocProviderTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/editor/quickDoc/QuickDocProviderTestGenerated.java index a650d110fdcc..60d5ae0733e9 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/editor/quickDoc/QuickDocProviderTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/editor/quickDoc/QuickDocProviderTestGenerated.java @@ -158,6 +158,11 @@ public class QuickDocProviderTestGenerated extends AbstractQuickDocProviderTest runTest("testData/editor/quickDoc/JavaMethodUsedInKotlinInParen.kt"); } + @TestMetadata("JvmFieldAnnotation.kt") + public void testJvmFieldAnnotation() throws Exception { + runTest("testData/editor/quickDoc/JvmFieldAnnotation.kt"); + } + @TestMetadata("KotlinClassUsedFromJava.java") public void testKotlinClassUsedFromJava() throws Exception { runTest("testData/editor/quickDoc/KotlinClassUsedFromJava.java"); diff --git a/plugins/kotlin/idea/tests/testData/editor/quickDoc/JvmFieldAnnotation.kt b/plugins/kotlin/idea/tests/testData/editor/quickDoc/JvmFieldAnnotation.kt new file mode 100644 index 000000000000..a52b2b458ac3 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/editor/quickDoc/JvmFieldAnnotation.kt @@ -0,0 +1,13 @@ +annotation class Anno +class JvmFieldContainerContainer { + companion object { + @JvmField @Anno val jvmField = 0 + } +} + +//K2_INFO:
@Anno
+//K2_INFO: @field:JvmField
+//K2_INFO: public final val jvmField: Int
+ +//INFO:
@Anno
+//INFO: @field:JvmField public final val jvmField: Int