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 =