diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/AbstractResolveCallTest.kt b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/AbstractResolveCallTest.kt index 3e8233c9a0a..b58afd30440 100644 --- a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/AbstractResolveCallTest.kt +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/AbstractResolveCallTest.kt @@ -50,6 +50,11 @@ abstract class AbstractResolveCallTest : AbstractHLApiSingleModuleTest() { is KtArrayAccessExpression -> element.resolveCall() is KtSimpleNameExpression -> element.resolveAccessorCall() is KtValueArgument -> resolveCall(element.getArgumentExpression()!!) + is KtDeclarationModifierList -> { + val annotationEntry = element.annotationEntries.singleOrNull() + ?: error("Only single annotation entry is supported for now") + annotationEntry.resolveCall() + } else -> error("Selected element type (${element::class.simpleName}) is not supported for resolveCall()") } diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/ResolveCallTestGenerated.java b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/ResolveCallTestGenerated.java index 8270b11665d..0394830a6ad 100644 --- a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/ResolveCallTestGenerated.java +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/ResolveCallTestGenerated.java @@ -24,6 +24,48 @@ public class ResolveCallTestGenerated extends AbstractResolveCallTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/analysisSession/resolveCall"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("annotationEntry.kt") + public void testAnnotationEntry() throws Exception { + runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationEntry.kt"); + } + + @Test + @TestMetadata("annotationInAnnotation_arrayOf.kt") + public void testAnnotationInAnnotation_arrayOf() throws Exception { + runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_arrayOf.kt"); + } + + @Test + @TestMetadata("annotationInAnnotation_collectionLiteral.kt") + public void testAnnotationInAnnotation_collectionLiteral() throws Exception { + runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_collectionLiteral.kt"); + } + + @Test + @TestMetadata("annotationInAnnotation_multipleAnnotations_arrayOf.kt") + public void testAnnotationInAnnotation_multipleAnnotations_arrayOf() throws Exception { + runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_arrayOf.kt"); + } + + @Test + @TestMetadata("annotationInAnnotation_multipleAnnotations_collectionLiteral.kt") + public void testAnnotationInAnnotation_multipleAnnotations_collectionLiteral() throws Exception { + runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_collectionLiteral.kt"); + } + + @Test + @TestMetadata("annotationInAnnotation_noarg.kt") + public void testAnnotationInAnnotation_noarg() throws Exception { + runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_noarg.kt"); + } + + @Test + @TestMetadata("annotationInAnnotation_vararg.kt") + public void testAnnotationInAnnotation_vararg() throws Exception { + runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_vararg.kt"); + } + @Test @TestMetadata("arrayOfInAnnotation.kt") public void testArrayOfInAnnotation() throws Exception { @@ -54,6 +96,12 @@ public class ResolveCallTestGenerated extends AbstractResolveCallTest { runTest("analysis/analysis-api/testData/analysisSession/resolveCall/delegatedConstructorCall_this_unresolved.kt"); } + @Test + @TestMetadata("enumAsAnnotationValue.kt") + public void testEnumAsAnnotationValue() throws Exception { + runTest("analysis/analysis-api/testData/analysisSession/resolveCall/enumAsAnnotationValue.kt"); + } + @Test @TestMetadata("functionCallInTheSameFile.kt") public void testFunctionCallInTheSameFile() throws Exception { diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationEntry.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationEntry.kt new file mode 100644 index 00000000000..9f4aaa33123 --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationEntry.kt @@ -0,0 +1,6 @@ +annotation class Annotation(vararg val strings: String) + +annotation class AnnotationInner(val value: Annotation) + +@AnnotationInner(Annotation("v1", "v2")) +class C diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationEntry.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationEntry.txt new file mode 100644 index 00000000000..d1ed506e82d --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationEntry.txt @@ -0,0 +1,3 @@ +KtAnnotationCall: +argumentMapping = { Annotation("v1", "v2") -> (value: Annotation) } +targetFunction = (value: Annotation): AnnotationInner diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_arrayOf.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_arrayOf.kt new file mode 100644 index 00000000000..1baa5dc856a --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_arrayOf.kt @@ -0,0 +1,6 @@ +annotation class Annotation(vararg val strings: String) + +annotation class AnnotationInner(val value: Annotation) + +@AnnotationInner(Annotation(strings = arrayOf("v1", "v2"))) +class C diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_arrayOf.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_arrayOf.txt new file mode 100644 index 00000000000..16f718df21f --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_arrayOf.txt @@ -0,0 +1,4 @@ +KtFunctionCall: +argumentMapping = { arrayOf("v1", "v2") -> (vararg strings: kotlin.String) } +targetFunction = (vararg strings: kotlin.String): Annotation +substitutor = diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_collectionLiteral.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_collectionLiteral.kt new file mode 100644 index 00000000000..9e33acf14d3 --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_collectionLiteral.kt @@ -0,0 +1,6 @@ +annotation class Annotation(vararg val strings: String) + +annotation class AnnotationInner(val value: Annotation) + +@AnnotationInner(Annotation(["v1", "v2"])) +class C diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_collectionLiteral.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_collectionLiteral.txt new file mode 100644 index 00000000000..57cc8df7cf7 --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_collectionLiteral.txt @@ -0,0 +1,4 @@ +KtFunctionCall: +argumentMapping = { ["v1", "v2"] -> (vararg strings: kotlin.String) } +targetFunction = (vararg strings: kotlin.String): Annotation +substitutor = diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_arrayOf.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_arrayOf.kt new file mode 100644 index 00000000000..1c4d30e3931 --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_arrayOf.kt @@ -0,0 +1,6 @@ +annotation class Annotation(vararg val strings: String) + +annotation class AnnotationArray(vararg val annos: Annotation) + +@AnnotationArray(annos = arrayOf(Annotation("v1", "v2"), Annotation(strings = arrayOf("v3", "v4")))) +class C diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_arrayOf.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_arrayOf.txt new file mode 100644 index 00000000000..f3b98d8ea6a --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_arrayOf.txt @@ -0,0 +1,4 @@ +KtFunctionCall: +argumentMapping = { Annotation("v1", "v2") -> (vararg elements: Annotation), Annotation(strings = arrayOf("v3", "v4")) -> (vararg elements: Annotation) } +targetFunction = kotlin/arrayOf(vararg elements: Annotation): kotlin.Array +substitutor = diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_collectionLiteral.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_collectionLiteral.kt new file mode 100644 index 00000000000..6613d1be0f7 --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_collectionLiteral.kt @@ -0,0 +1,6 @@ +annotation class Annotation(vararg val strings: String) + +annotation class AnnotationArray(vararg val annos: Annotation) + +@AnnotationArray([Annotation("v1", "v2"), Annotation(["v3", "v4"])]) +class C diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_collectionLiteral.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_collectionLiteral.txt new file mode 100644 index 00000000000..ad92170bdc6 --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_multipleAnnotations_collectionLiteral.txt @@ -0,0 +1,3 @@ +KtAnnotationCall: +argumentMapping = { [Annotation("v1", "v2"), Annotation(["v3", "v4"])] -> (vararg annos: Annotation) } +targetFunction = (vararg annos: Annotation): AnnotationArray diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_noarg.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_noarg.kt new file mode 100644 index 00000000000..f5b2f8f3110 --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_noarg.kt @@ -0,0 +1,6 @@ +annotation class Annotation(vararg val strings: String) + +annotation class AnnotationInner(val value: Annotation) + +@AnnotationInner(Annotation()) +class C diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_noarg.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_noarg.txt new file mode 100644 index 00000000000..53f68b82381 --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_noarg.txt @@ -0,0 +1,4 @@ +KtFunctionCall: +argumentMapping = { } +targetFunction = (vararg strings: kotlin.String): Annotation +substitutor = diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_vararg.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_vararg.kt new file mode 100644 index 00000000000..9604251ed9f --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_vararg.kt @@ -0,0 +1,6 @@ +annotation class Annotation(vararg val strings: String) + +annotation class AnnotationInner(val value: Annotation) + +@AnnotationInner(Annotation("v1", "v2")) +class C diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_vararg.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_vararg.txt new file mode 100644 index 00000000000..676c76cc01e --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_vararg.txt @@ -0,0 +1,4 @@ +KtFunctionCall: +argumentMapping = { "v1" -> (vararg strings: kotlin.String), "v2" -> (vararg strings: kotlin.String) } +targetFunction = (vararg strings: kotlin.String): Annotation +substitutor = diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/enumAsAnnotationValue.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/enumAsAnnotationValue.kt new file mode 100644 index 00000000000..c29ea27bf00 --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/enumAsAnnotationValue.kt @@ -0,0 +1,10 @@ +enum class Color { + R, + G, + B +} + +annotation class Annotation(val color : Color) + +@Annotation(Color.R) +class C diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/enumAsAnnotationValue.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/enumAsAnnotationValue.txt new file mode 100644 index 00000000000..133b81208ec --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/enumAsAnnotationValue.txt @@ -0,0 +1,3 @@ +KtAnnotationCall: +argumentMapping = { Color.R -> (color: Color) } +targetFunction = (color: Color): Annotation