From 212baf580ce3f47d7d462bf239b4c4a1931ed6f6 Mon Sep 17 00:00:00 2001 From: Justin Paupore Date: Thu, 8 Dec 2022 14:42:11 -0800 Subject: [PATCH] [AA-FIR] Fix handling of Java annotation parameters. This changes FirAnnotationValueConverter to no longer rely on PSI information when projecting annotation parameter information to AA. For annotations defined in Java, including many meta-annotations, PSI information is not available for the annotation. This caused those annotation values to be projected as KtUnsupportedAnnotationValue. Instead of using PSI information, this changes FirAnnotationValueConverter to use the tree structure instead. Spread and named parameter arguments are spliced into the parameter list of their surrounding vararg calls, meaning that callers see the expected structure. (See the varargSpreadParameter.kt test file for an example.) --- ...nnotationsOnDeclarationsTestGenerated.java | 24 ++++++++++ ...nsOnDeclarationsWithMetaTestGenerated.java | 2 +- .../evaluate/FirAnnotationValueConverter.kt | 47 ++++++++----------- ...nnotationsOnDeclarationsTestGenerated.java | 24 ++++++++++ ...nsOnDeclarationsWithMetaTestGenerated.java | 2 +- ...nnotationsOnDeclarationsTestGenerated.java | 24 ++++++++++ ...nsOnDeclarationsWithMetaTestGenerated.java | 2 +- ...nnotationsOnDeclarationsTestGenerated.java | 24 ++++++++++ ...nsOnDeclarationsWithMetaTestGenerated.java | 2 +- .../direct/emptyJavaSpreadParameter.kt | 10 ++++ .../direct/emptyJavaSpreadParameter.txt | 5 ++ .../direct/varargComplexParameter.kt | 5 ++ .../direct/varargComplexParameter.txt | 5 ++ .../direct/varargNamedParameter.kt | 4 ++ .../direct/varargNamedParameter.txt | 5 ++ .../varargSpreadParameter.descriptors.txt | 5 ++ .../direct/varargSpreadParameter.kt | 4 ++ .../direct/varargSpreadParameter.txt | 5 ++ ...roperty_javaAnnotation_varargParameter.txt | 2 +- 19 files changed, 169 insertions(+), 32 deletions(-) create mode 100644 analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/emptyJavaSpreadParameter.kt create mode 100644 analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/emptyJavaSpreadParameter.txt create mode 100644 analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargComplexParameter.kt create mode 100644 analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargComplexParameter.txt create mode 100644 analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargNamedParameter.kt create mode 100644 analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargNamedParameter.txt create mode 100644 analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.descriptors.txt create mode 100644 analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.kt create mode 100644 analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.txt diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/annotations/Fe10IdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/annotations/Fe10IdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java index c21813023b6..9cf695d21b2 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/annotations/Fe10IdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/annotations/Fe10IdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java @@ -67,6 +67,12 @@ public class Fe10IdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclaratio KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("emptyJavaSpreadParameter.kt") + public void testEmptyJavaSpreadParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/emptyJavaSpreadParameter.kt"); + } + @Test @TestMetadata("onClass.kt") public void testOnClass() throws Exception { @@ -103,11 +109,29 @@ public class Fe10IdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclaratio runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/onTypeAlias.kt"); } + @Test + @TestMetadata("varargComplexParameter.kt") + public void testVarargComplexParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargComplexParameter.kt"); + } + + @Test + @TestMetadata("varargNamedParameter.kt") + public void testVarargNamedParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargNamedParameter.kt"); + } + @Test @TestMetadata("varargParameter.kt") public void testVarargParameter() throws Exception { runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargParameter.kt"); } + + @Test + @TestMetadata("varargSpreadParameter.kt") + public void testVarargSpreadParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.kt"); + } } @Nested diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/annotations/Fe10IdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/annotations/Fe10IdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java index fe8c3f8637d..cf6ed683b49 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/annotations/Fe10IdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/annotations/Fe10IdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt index 439f0e248d2..15c997cc187 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.utils.isLocal import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.psi +import org.jetbrains.kotlin.fir.realPsi import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol @@ -41,37 +42,26 @@ internal object FirAnnotationValueConverter { return KtConstantAnnotationValue(constantValue) } - private fun Collection.convertConstantExpression( + private fun Collection.convertVarargsExpression( session: FirSession, - ): Collection = - mapNotNull { it.convertConstantExpression(session) } + ): Pair, KtElement?> { + var representativePsi: KtElement? = null + val flattenedVarargs = buildList { + for (expr in this@convertVarargsExpression) { + val converted = expr.convertConstantExpression(session) ?: continue - // Refer to KtLightAnnotationParameterList#checkIfToArrayConversionExpected - private fun ValueArgument?.arrayConversionExpected(): Boolean { - return when { - this == null -> false - this is KtValueArgument && isSpread -> { - // Anno(*[1,2,3]) - false - } - - else -> { - // Anno(a = [1,2,3]) v.s. Anno(1) or Anno(1,2,3) - !isNamed() + if (expr is FirSpreadArgumentExpression || expr is FirNamedArgumentExpression) { + addAll((converted as KtArrayAnnotationValue).values) + } else { + add(converted) + } + representativePsi = representativePsi ?: converted.sourcePsi } } + + return flattenedVarargs to representativePsi } - private fun Collection.toArrayConstantValueIfNecessary(sourcePsi: KtElement?): KtAnnotationValue? { - val valueArgument = if (sourcePsi is ValueArgument) sourcePsi else - (sourcePsi?.parents?.firstOrNull { it is ValueArgument } as? ValueArgument) - val wrap = valueArgument?.arrayConversionExpected() ?: false - return if (wrap) { - KtArrayAnnotationValue(this, sourcePsi) - } else { - singleOrNull() - } - } fun toConstantValue( firExpression: FirExpression, @@ -94,12 +84,15 @@ internal object FirAnnotationValueConverter { } is FirVarargArgumentsExpression -> { - arguments.convertConstantExpression(session).toArrayConstantValueIfNecessary(sourcePsi) + // Vararg arguments may have multiple independent expressions associated. + // Choose one to be the representative PSI value for the entire assembled argument. + val (annotationValues, representativePsi) = arguments.convertVarargsExpression(session) + KtArrayAnnotationValue(annotationValues, representativePsi ?: sourcePsi) } is FirArrayOfCall -> { // Desugared collection literals. - KtArrayAnnotationValue(argumentList.arguments.convertConstantExpression(session), sourcePsi) + KtArrayAnnotationValue(argumentList.arguments.convertVarargsExpression(session).first, sourcePsi) } is FirFunctionCall -> { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeDependentAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeDependentAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java index b2fab75c9a6..a15f0309732 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeDependentAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeDependentAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java @@ -67,6 +67,12 @@ public class FirIdeDependentAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarat KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("emptyJavaSpreadParameter.kt") + public void testEmptyJavaSpreadParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/emptyJavaSpreadParameter.kt"); + } + @Test @TestMetadata("onClass.kt") public void testOnClass() throws Exception { @@ -103,11 +109,29 @@ public class FirIdeDependentAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarat runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/onTypeAlias.kt"); } + @Test + @TestMetadata("varargComplexParameter.kt") + public void testVarargComplexParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargComplexParameter.kt"); + } + + @Test + @TestMetadata("varargNamedParameter.kt") + public void testVarargNamedParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargNamedParameter.kt"); + } + @Test @TestMetadata("varargParameter.kt") public void testVarargParameter() throws Exception { runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargParameter.kt"); } + + @Test + @TestMetadata("varargSpreadParameter.kt") + public void testVarargSpreadParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.kt"); + } } @Nested diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeDependentAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeDependentAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java index 5819fc18d15..0ecaf87f0cf 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeDependentAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeDependentAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java index 24588f73639..1d8358e903f 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java @@ -67,6 +67,12 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclaration KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("emptyJavaSpreadParameter.kt") + public void testEmptyJavaSpreadParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/emptyJavaSpreadParameter.kt"); + } + @Test @TestMetadata("onClass.kt") public void testOnClass() throws Exception { @@ -103,11 +109,29 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclaration runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/onTypeAlias.kt"); } + @Test + @TestMetadata("varargComplexParameter.kt") + public void testVarargComplexParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargComplexParameter.kt"); + } + + @Test + @TestMetadata("varargNamedParameter.kt") + public void testVarargNamedParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargNamedParameter.kt"); + } + @Test @TestMetadata("varargParameter.kt") public void testVarargParameter() throws Exception { runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargParameter.kt"); } + + @Test + @TestMetadata("varargSpreadParameter.kt") + public void testVarargSpreadParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.kt"); + } } @Nested diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java index ad7f8ff7771..3247dae2679 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/annotations/FirIdeNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/annotations/FirStandaloneNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/annotations/FirStandaloneNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java index 3a244c06977..2c62d494ec5 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/annotations/FirStandaloneNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/annotations/FirStandaloneNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsTestGenerated.java @@ -67,6 +67,12 @@ public class FirStandaloneNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDecl KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("emptyJavaSpreadParameter.kt") + public void testEmptyJavaSpreadParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/emptyJavaSpreadParameter.kt"); + } + @Test @TestMetadata("onClass.kt") public void testOnClass() throws Exception { @@ -103,11 +109,29 @@ public class FirStandaloneNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDecl runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/onTypeAlias.kt"); } + @Test + @TestMetadata("varargComplexParameter.kt") + public void testVarargComplexParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargComplexParameter.kt"); + } + + @Test + @TestMetadata("varargNamedParameter.kt") + public void testVarargNamedParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargNamedParameter.kt"); + } + @Test @TestMetadata("varargParameter.kt") public void testVarargParameter() throws Exception { runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargParameter.kt"); } + + @Test + @TestMetadata("varargSpreadParameter.kt") + public void testVarargSpreadParameter() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.kt"); + } } @Nested diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/annotations/FirStandaloneNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/annotations/FirStandaloneNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java index 3749400bf21..f22ca9e44a9 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/annotations/FirStandaloneNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/annotations/FirStandaloneNormalAnalysisSourceModuleAnalysisApiAnnotationsOnDeclarationsWithMetaTestGenerated.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ diff --git a/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/emptyJavaSpreadParameter.kt b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/emptyJavaSpreadParameter.kt new file mode 100644 index 00000000000..19f66c14645 --- /dev/null +++ b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/emptyJavaSpreadParameter.kt @@ -0,0 +1,10 @@ +// FILE: A.java +public @interface A { + String[] value() default {"foo", "bar"}; +} + +// FILE: Test.kt +annotation class B(vararg val a: A) + +@B(A(), A(*[])) +class Foo \ No newline at end of file diff --git a/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/emptyJavaSpreadParameter.txt b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/emptyJavaSpreadParameter.txt new file mode 100644 index 00000000000..70171cf7f84 --- /dev/null +++ b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/emptyJavaSpreadParameter.txt @@ -0,0 +1,5 @@ +KtDeclaration: KtClass Foo +annotations: [ + B(a = [/A, /A(value = [], )]) + psi: KtAnnotationEntry +] diff --git a/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargComplexParameter.kt b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargComplexParameter.kt new file mode 100644 index 00000000000..aab06b46e22 --- /dev/null +++ b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargComplexParameter.kt @@ -0,0 +1,5 @@ +annotation class A(vararg val strings: String) +annotation class AArray(vararg val value: A) + +@AArray(A(strings = ["foo", "bar"])) +class Foo \ No newline at end of file diff --git a/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargComplexParameter.txt b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargComplexParameter.txt new file mode 100644 index 00000000000..71a597cbdbc --- /dev/null +++ b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargComplexParameter.txt @@ -0,0 +1,5 @@ +KtDeclaration: KtClass Foo +annotations: [ + AArray(value = [/A(strings = ["foo", "bar"], )]) + psi: KtAnnotationEntry +] diff --git a/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargNamedParameter.kt b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargNamedParameter.kt new file mode 100644 index 00000000000..16a32fedd1a --- /dev/null +++ b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargNamedParameter.kt @@ -0,0 +1,4 @@ +annotation class A(vararg val strings: String) + +@A(strings = ["foo", "bar"]) +class Foo diff --git a/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargNamedParameter.txt b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargNamedParameter.txt new file mode 100644 index 00000000000..5cf42aaec39 --- /dev/null +++ b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargNamedParameter.txt @@ -0,0 +1,5 @@ +KtDeclaration: KtClass Foo +annotations: [ + A(strings = ["foo", "bar"]) + psi: KtAnnotationEntry +] diff --git a/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.descriptors.txt b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.descriptors.txt new file mode 100644 index 00000000000..9af69a98e27 --- /dev/null +++ b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.descriptors.txt @@ -0,0 +1,5 @@ +KtDeclaration: KtClass Foo +annotations: [ + A(strings = [["foo", "bar"], "baz", ["quux"]]) + psi: KtAnnotationEntry +] diff --git a/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.kt b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.kt new file mode 100644 index 00000000000..ee1f2dcf310 --- /dev/null +++ b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.kt @@ -0,0 +1,4 @@ +annotation class A(vararg val strings: String) + +@A(*arrayOf("foo", "bar"), "baz", *["quux"]) +class Foo \ No newline at end of file diff --git a/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.txt b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.txt new file mode 100644 index 00000000000..01c50d8ed69 --- /dev/null +++ b/analysis/analysis-api/testData/annotations/annotationsOnDeclaration/direct/varargSpreadParameter.txt @@ -0,0 +1,5 @@ +KtDeclaration: KtClass Foo +annotations: [ + A(strings = ["foo", "bar", "baz", "quux"]) + psi: KtAnnotationEntry +] diff --git a/analysis/analysis-api/testData/annotations/metaAnnotations/onProperty_javaAnnotation_varargParameter.txt b/analysis/analysis-api/testData/annotations/metaAnnotations/onProperty_javaAnnotation_varargParameter.txt index 777fb0a9a74..04659bf798c 100644 --- a/analysis/analysis-api/testData/annotations/metaAnnotations/onProperty_javaAnnotation_varargParameter.txt +++ b/analysis/analysis-api/testData/annotations/metaAnnotations/onProperty_javaAnnotation_varargParameter.txt @@ -3,7 +3,7 @@ annotations: [ JavaAnno(value = [java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD]) psi: KtAnnotationEntry annotations: [ - kotlin/annotation/Target(allowedTargets = error("non-annotation value")) + kotlin/annotation/Target(allowedTargets = [kotlin.annotation.AnnotationTarget.FIELD, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.PROPERTY_SETTER]) psi: null annotations: [ kotlin/annotation/Target(allowedTargets = [kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS])