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 b58afd30440..272b6a5ce94 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
@@ -55,6 +55,11 @@ abstract class AbstractResolveCallTest : AbstractHLApiSingleModuleTest() {
?: error("Only single annotation entry is supported for now")
annotationEntry.resolveCall()
}
+ is KtFileAnnotationList -> {
+ 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 0394830a6ad..c264c80bc15 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
@@ -66,6 +66,96 @@ public class ResolveCallTestGenerated extends AbstractResolveCallTest {
runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationInAnnotation_vararg.kt");
}
+ @Test
+ @TestMetadata("annotationOnDelegate.kt")
+ public void testAnnotationOnDelegate() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnDelegate.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnExpression_asT.kt")
+ public void testAnnotationOnExpression_asT() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_asT.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnExpression_destructuring.kt")
+ public void testAnnotationOnExpression_destructuring() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_destructuring.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnExpression_if.kt")
+ public void testAnnotationOnExpression_if() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_if.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnExpression_whenBranch.kt")
+ public void testAnnotationOnExpression_whenBranch() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_whenBranch.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnFile.kt")
+ public void testAnnotationOnFile() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnFile.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnParameter_param.kt")
+ public void testAnnotationOnParameter_param() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_param.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnParameter_parameterProperty.kt")
+ public void testAnnotationOnParameter_parameterProperty() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_parameterProperty.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnParameter_reified.kt")
+ public void testAnnotationOnParameter_reified() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_reified.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnParameter_setparam.kt")
+ public void testAnnotationOnParameter_setparam() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_setparam.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnProperty_field.kt")
+ public void testAnnotationOnProperty_field() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_field.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnProperty_get.kt")
+ public void testAnnotationOnProperty_get() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_get.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnProperty_property.kt")
+ public void testAnnotationOnProperty_property() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_property.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnProperty_set.kt")
+ public void testAnnotationOnProperty_set() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_set.kt");
+ }
+
+ @Test
+ @TestMetadata("annotationOnReceiver.kt")
+ public void testAnnotationOnReceiver() throws Exception {
+ runTest("analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnReceiver.kt");
+ }
+
@Test
@TestMetadata("arrayOfInAnnotation.kt")
public void testArrayOfInAnnotation() throws Exception {
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnDelegate.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnDelegate.kt
new file mode 100644
index 00000000000..ec5542ba365
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnDelegate.kt
@@ -0,0 +1,2 @@
+@delegate:Suppress
+val annotatedDelegate by lazy { 1 + 1 }
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnDelegate.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnDelegate.txt
new file mode 100644
index 00000000000..bfb3d0a25e7
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnDelegate.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { }
+targetFunction = (vararg names: kotlin.String): kotlin.Suppress
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_asT.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_asT.kt
new file mode 100644
index 00000000000..7d61400f413
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_asT.kt
@@ -0,0 +1,8 @@
+class A(val value : T)
+class B
+
+fun A.toB(): B {
+ @Suppress("UNCHECKED_CAST")
+ val v = (value as? Long)?.let { it.toInt() } as T ?: value
+ return v
+}
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_asT.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_asT.txt
new file mode 100644
index 00000000000..4937c6b0c0f
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_asT.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { "UNCHECKED_CAST" -> (vararg names: kotlin.String) }
+targetFunction = (vararg names: kotlin.String): kotlin.Suppress
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_destructuring.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_destructuring.kt
new file mode 100644
index 00000000000..44094f1434f
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_destructuring.kt
@@ -0,0 +1,4 @@
+fun foo(data: Any) {
+ @Suppress("UNCHECKED_CAST")
+ val (k, v) = data as Pair
+}
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_destructuring.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_destructuring.txt
new file mode 100644
index 00000000000..19765bd501b
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_destructuring.txt
@@ -0,0 +1 @@
+null
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_if.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_if.kt
new file mode 100644
index 00000000000..abe03849bee
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_if.kt
@@ -0,0 +1,3 @@
+val a: Int = 42
+val b: Int = 24
+val c = @Suppress if (a > 2) a else b
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_if.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_if.txt
new file mode 100644
index 00000000000..bfb3d0a25e7
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_if.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { }
+targetFunction = (vararg names: kotlin.String): kotlin.Suppress
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_whenBranch.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_whenBranch.kt
new file mode 100644
index 00000000000..681a9fb73d1
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_whenBranch.kt
@@ -0,0 +1,7 @@
+fun annotatedSwitch(str: String) =
+ when {
+ @Suppress("DEPRECATION")
+ str.isBlank() -> null
+ str.isNotEmpty() != null -> null
+ else -> 1
+ }
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_whenBranch.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_whenBranch.txt
new file mode 100644
index 00000000000..38abfcaaaa0
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnExpression_whenBranch.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { "DEPRECATION" -> (vararg names: kotlin.String) }
+targetFunction = (vararg names: kotlin.String): kotlin.Suppress
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnFile.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnFile.kt
new file mode 100644
index 00000000000..abf930dbd58
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnFile.kt
@@ -0,0 +1,6 @@
+// WITH_STDLIB
+@file:JvmName("Foo")
+package some.pkg
+
+val p : Int = 42
+
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnFile.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnFile.txt
new file mode 100644
index 00000000000..0ff7ff611de
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnFile.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { "Foo" -> (name: kotlin.String) }
+targetFunction = (name: kotlin.String): kotlin.jvm.JvmName
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_param.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_param.kt
new file mode 100644
index 00000000000..c932e76f0e9
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_param.kt
@@ -0,0 +1,3 @@
+annotation class Anno
+
+class Test1(@param:Anno var bar: Int)
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_param.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_param.txt
new file mode 100644
index 00000000000..2db10886b03
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_param.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { }
+targetFunction = (): Anno
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_parameterProperty.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_parameterProperty.kt
new file mode 100644
index 00000000000..a7b834e3dd8
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_parameterProperty.kt
@@ -0,0 +1,3 @@
+annotation class Anno
+
+class Test1(@Anno var bar: Int)
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_parameterProperty.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_parameterProperty.txt
new file mode 100644
index 00000000000..2db10886b03
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_parameterProperty.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { }
+targetFunction = (): Anno
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_reified.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_reified.kt
new file mode 100644
index 00000000000..e5eab09ba47
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_reified.kt
@@ -0,0 +1 @@
+inline fun functionWithParamAnnotation(@Suppress("s") t: T): T = t
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_reified.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_reified.txt
new file mode 100644
index 00000000000..0f0858ce752
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_reified.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { "s" -> (vararg names: kotlin.String) }
+targetFunction = (vararg names: kotlin.String): kotlin.Suppress
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_setparam.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_setparam.kt
new file mode 100644
index 00000000000..def29ba98af
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_setparam.kt
@@ -0,0 +1,3 @@
+annotation class Anno
+
+class Test1(@setparam:Anno var bar: Int)
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_setparam.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_setparam.txt
new file mode 100644
index 00000000000..2db10886b03
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnParameter_setparam.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { }
+targetFunction = (): Anno
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_field.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_field.kt
new file mode 100644
index 00000000000..50f12c1149e
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_field.kt
@@ -0,0 +1,9 @@
+annotation class Anno
+
+@field:Anno
+var p : Int = 42
+ set(value) {
+ if (value > field) {
+ field = value
+ }
+ }
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_field.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_field.txt
new file mode 100644
index 00000000000..2db10886b03
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_field.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { }
+targetFunction = (): Anno
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_get.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_get.kt
new file mode 100644
index 00000000000..321f0da29b0
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_get.kt
@@ -0,0 +1,4 @@
+annotation class Anno
+
+@get:Anno
+val p : Int = 42
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_get.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_get.txt
new file mode 100644
index 00000000000..2db10886b03
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_get.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { }
+targetFunction = (): Anno
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_property.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_property.kt
new file mode 100644
index 00000000000..4dc668ea3cc
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_property.kt
@@ -0,0 +1,4 @@
+annotation class Anno
+
+@property:Anno
+val p : Int = 42
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_property.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_property.txt
new file mode 100644
index 00000000000..2db10886b03
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_property.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { }
+targetFunction = (): Anno
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_set.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_set.kt
new file mode 100644
index 00000000000..6f41962d67e
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_set.kt
@@ -0,0 +1,4 @@
+annotation class Anno
+
+@set:Anno
+var p : Int = 42
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_set.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_set.txt
new file mode 100644
index 00000000000..2db10886b03
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnProperty_set.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { }
+targetFunction = (): Anno
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnReceiver.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnReceiver.kt
new file mode 100644
index 00000000000..62a4a1c7bd3
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnReceiver.kt
@@ -0,0 +1,6 @@
+annotation class Anno
+
+@receiver:Anno
+fun String.foo() {
+ return "$this (${this.length})"
+}
diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnReceiver.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnReceiver.txt
new file mode 100644
index 00000000000..2db10886b03
--- /dev/null
+++ b/analysis/analysis-api/testData/analysisSession/resolveCall/annotationOnReceiver.txt
@@ -0,0 +1,3 @@
+KtAnnotationCall:
+argumentMapping = { }
+targetFunction = (): Anno