AA FIR: build argument mapping for SAM conversion node

^KT-64910 fixed
diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java
index 063eba0..7065828 100644
--- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java
+++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java
@@ -767,6 +767,30 @@
     }
 
     @Test
+    @TestMetadata("samFromJava_lambda.kt")
+    public void testSamFromJava_lambda() throws Exception {
+        runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_lambda.kt");
+    }
+
+    @Test
+    @TestMetadata("samFromJava_methodReference.kt")
+    public void testSamFromJava_methodReference() throws Exception {
+        runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_methodReference.kt");
+    }
+
+    @Test
+    @TestMetadata("samLambda.kt")
+    public void testSamLambda() throws Exception {
+        runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/samLambda.kt");
+    }
+
+    @Test
+    @TestMetadata("samMethodReference.kt")
+    public void testSamMethodReference() throws Exception {
+        runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/samMethodReference.kt");
+    }
+
+    @Test
     @TestMetadata("simpleCallWithNonMatchingArgs.kt")
     public void testSimpleCallWithNonMatchingArgs() throws Exception {
         runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/simpleCallWithNonMatchingArgs.kt");
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt
index db52847..d565b3e 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt
@@ -1343,7 +1343,10 @@
         // For spread, named, and lambda arguments, the source is the KtValueArgument.
         // For other arguments (including array indices), the source is the KtExpression.
         return when (this) {
-            is FirSmartCastExpression -> originalExpression.realPsi as? KtExpression
+            is FirSamConversionExpression ->
+                expression.realPsi as? KtExpression
+            is FirSmartCastExpression ->
+                originalExpression.realPsi as? KtExpression
             is FirNamedArgumentExpression, is FirSpreadArgumentExpression, is FirLambdaArgumentExpression ->
                 realPsi.safeAs<KtValueArgument>()?.getArgumentExpression()
             else -> realPsi as? KtExpression
diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java
index 6968555..31c28e3 100644
--- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java
+++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java
@@ -767,6 +767,30 @@
     }
 
     @Test
+    @TestMetadata("samFromJava_lambda.kt")
+    public void testSamFromJava_lambda() throws Exception {
+        runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_lambda.kt");
+    }
+
+    @Test
+    @TestMetadata("samFromJava_methodReference.kt")
+    public void testSamFromJava_methodReference() throws Exception {
+        runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_methodReference.kt");
+    }
+
+    @Test
+    @TestMetadata("samLambda.kt")
+    public void testSamLambda() throws Exception {
+        runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/samLambda.kt");
+    }
+
+    @Test
+    @TestMetadata("samMethodReference.kt")
+    public void testSamMethodReference() throws Exception {
+        runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/samMethodReference.kt");
+    }
+
+    @Test
     @TestMetadata("simpleCallWithNonMatchingArgs.kt")
     public void testSimpleCallWithNonMatchingArgs() throws Exception {
         runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/simpleCallWithNonMatchingArgs.kt");
diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java
index d7d78ec..b35ea74 100644
--- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java
+++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java
@@ -767,6 +767,30 @@
     }
 
     @Test
+    @TestMetadata("samFromJava_lambda.kt")
+    public void testSamFromJava_lambda() throws Exception {
+        runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_lambda.kt");
+    }
+
+    @Test
+    @TestMetadata("samFromJava_methodReference.kt")
+    public void testSamFromJava_methodReference() throws Exception {
+        runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_methodReference.kt");
+    }
+
+    @Test
+    @TestMetadata("samLambda.kt")
+    public void testSamLambda() throws Exception {
+        runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/samLambda.kt");
+    }
+
+    @Test
+    @TestMetadata("samMethodReference.kt")
+    public void testSamMethodReference() throws Exception {
+        runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/samMethodReference.kt");
+    }
+
+    @Test
     @TestMetadata("simpleCallWithNonMatchingArgs.kt")
     public void testSimpleCallWithNonMatchingArgs() throws Exception {
         runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/simpleCallWithNonMatchingArgs.kt");
diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_lambda.descriptors.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_lambda.descriptors.txt
new file mode 100644
index 0000000..985240e
--- /dev/null
+++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_lambda.descriptors.txt
@@ -0,0 +1,43 @@
+KtSuccessCallInfo:
+  call = KtSimpleFunctionCall:
+    isImplicitInvoke = false
+    partiallyAppliedSymbol = KtPartiallyAppliedSymbol:
+      dispatchReceiver = KtExplicitReceiverValue:
+        expression = handler
+        isSafeNavigation = false
+        type = test.pkg.MyHandler
+      extensionReceiver = null
+      signature = KtFunctionLikeSignature:
+        receiverType = null
+        returnType = kotlin.Unit
+        symbol = test/pkg/MyHandler.stash(<dispatch receiver>: test.pkg.MyHandler, actor: test.pkg.MyInterface!, actors: (kotlin.collections.MutableList<test.pkg.MyInterface!>..kotlin.collections.List<test.pkg.MyInterface!>?)): kotlin.Unit
+        valueParameters = [
+          KtVariableLikeSignature:
+            name = actor
+            receiverType = null
+            returnType = test.pkg.MyInterface!
+            symbol = actor: test.pkg.MyInterface!
+            callableIdIfNonLocal = null,
+          KtVariableLikeSignature:
+            name = actors
+            receiverType = null
+            returnType = (kotlin.collections.MutableList<test.pkg.MyInterface!>..kotlin.collections.List<test.pkg.MyInterface!>?)
+            symbol = actors: (kotlin.collections.MutableList<test.pkg.MyInterface!>..kotlin.collections.List<test.pkg.MyInterface!>?)
+            callableIdIfNonLocal = null
+        ]
+        callableIdIfNonLocal = test/pkg/MyHandler.stash
+    typeArgumentsMapping = {}
+    argumentMapping = {
+      lambda -> (KtVariableLikeSignature:
+        name = actor
+        receiverType = null
+        returnType = test.pkg.MyInterface!
+        symbol = actor: test.pkg.MyInterface!
+        callableIdIfNonLocal = null),
+      list -> (KtVariableLikeSignature:
+        name = actors
+        receiverType = null
+        returnType = (kotlin.collections.MutableList<test.pkg.MyInterface!>..kotlin.collections.List<test.pkg.MyInterface!>?)
+        symbol = actors: (kotlin.collections.MutableList<test.pkg.MyInterface!>..kotlin.collections.List<test.pkg.MyInterface!>?)
+        callableIdIfNonLocal = null)
+    }
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_lambda.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_lambda.kt
new file mode 100644
index 0000000..2052aa8
--- /dev/null
+++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_lambda.kt
@@ -0,0 +1,30 @@
+// WITH_STDLIB
+
+// FILE: MyInterface.java
+
+package test.pkg;
+
+interface MyInterface {
+    void act();
+}
+
+// FILE: MyHandler.java
+
+package test.pkg;
+
+import java.util.List;
+
+public class MyHandler {
+    public void stash(MyInterface actor, List<MyInterface> actors) {
+        actors.add(actor);
+    }
+}
+
+// FILE: main.kt
+
+package test.pkg
+
+fun test(handler: MyHandler, list: List<MyInterface>) {
+    val lambda = { println("hello") }
+    <expr>handler.stash(lambda, list)</expr>
+}
diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_lambda.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_lambda.txt
new file mode 100644
index 0000000..16085cb
--- /dev/null
+++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_lambda.txt
@@ -0,0 +1,43 @@
+KtSuccessCallInfo:
+  call = KtSimpleFunctionCall:
+    isImplicitInvoke = false
+    partiallyAppliedSymbol = KtPartiallyAppliedSymbol:
+      dispatchReceiver = KtExplicitReceiverValue:
+        expression = handler
+        isSafeNavigation = false
+        type = test.pkg.MyHandler
+      extensionReceiver = null
+      signature = KtFunctionLikeSignature:
+        receiverType = null
+        returnType = kotlin.Unit
+        symbol = test/pkg/MyHandler.stash(<dispatch receiver>: test.pkg.MyHandler, actor: test.pkg.MyInterface!, actors: ft<kotlin.collections.MutableList<test.pkg.MyInterface!>, kotlin.collections.List<test.pkg.MyInterface!>?>): kotlin.Unit
+        valueParameters = [
+          KtVariableLikeSignature:
+            name = actor
+            receiverType = null
+            returnType = test.pkg.MyInterface!
+            symbol = actor: test.pkg.MyInterface!
+            callableIdIfNonLocal = null,
+          KtVariableLikeSignature:
+            name = actors
+            receiverType = null
+            returnType = ft<kotlin.collections.MutableList<test.pkg.MyInterface!>, kotlin.collections.List<test.pkg.MyInterface!>?>
+            symbol = actors: ft<kotlin.collections.MutableList<test.pkg.MyInterface!>, kotlin.collections.List<test.pkg.MyInterface!>?>
+            callableIdIfNonLocal = null
+        ]
+        callableIdIfNonLocal = test/pkg/MyHandler.stash
+    typeArgumentsMapping = {}
+    argumentMapping = {
+      lambda -> (KtVariableLikeSignature:
+        name = actor
+        receiverType = null
+        returnType = test.pkg.MyInterface!
+        symbol = actor: test.pkg.MyInterface!
+        callableIdIfNonLocal = null),
+      list -> (KtVariableLikeSignature:
+        name = actors
+        receiverType = null
+        returnType = ft<kotlin.collections.MutableList<test.pkg.MyInterface!>, kotlin.collections.List<test.pkg.MyInterface!>?>
+        symbol = actors: ft<kotlin.collections.MutableList<test.pkg.MyInterface!>, kotlin.collections.List<test.pkg.MyInterface!>?>
+        callableIdIfNonLocal = null)
+    }
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_methodReference.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_methodReference.kt
new file mode 100644
index 0000000..f87ca93
--- /dev/null
+++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_methodReference.kt
@@ -0,0 +1,33 @@
+// WITH_STDLIB
+
+// FILE: MyInterface.java
+
+package test.pkg;
+
+interface MyInterface {
+    void act();
+}
+
+// FILE: MyHandler.java
+
+package test.pkg;
+
+import java.util.List;
+
+public class MyHandler {
+    public void act(MyInterface actor) {
+        if (actor != null) {
+            actor.act();
+        }
+    }
+}
+
+// FILE: main.kt
+
+package test.pkg
+
+fun callback() {}
+
+fun test(handler: MyHandler, list: List<MyInterface>) {
+    <expr>handler.act(::callback)</expr>
+}
diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_methodReference.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_methodReference.txt
new file mode 100644
index 0000000..8913e4e
--- /dev/null
+++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/samFromJava_methodReference.txt
@@ -0,0 +1,31 @@
+KtSuccessCallInfo:
+  call = KtSimpleFunctionCall:
+    isImplicitInvoke = false
+    partiallyAppliedSymbol = KtPartiallyAppliedSymbol:
+      dispatchReceiver = KtExplicitReceiverValue:
+        expression = handler
+        isSafeNavigation = false
+        type = test.pkg.MyHandler
+      extensionReceiver = null
+      signature = KtFunctionLikeSignature:
+        receiverType = null
+        returnType = kotlin.Unit
+        symbol = test/pkg/MyHandler.act(<dispatch receiver>: test.pkg.MyHandler, actor: test.pkg.MyInterface!): kotlin.Unit
+        valueParameters = [
+          KtVariableLikeSignature:
+            name = actor
+            receiverType = null
+            returnType = test.pkg.MyInterface!
+            symbol = actor: test.pkg.MyInterface!
+            callableIdIfNonLocal = null
+        ]
+        callableIdIfNonLocal = test/pkg/MyHandler.act
+    typeArgumentsMapping = {}
+    argumentMapping = {
+      ::callback -> (KtVariableLikeSignature:
+        name = actor
+        receiverType = null
+        returnType = test.pkg.MyInterface!
+        symbol = actor: test.pkg.MyInterface!
+        callableIdIfNonLocal = null)
+    }
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/samLambda.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/samLambda.kt
new file mode 100644
index 0000000..1d3ef1c
--- /dev/null
+++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/samLambda.kt
@@ -0,0 +1,13 @@
+class Test {
+    fun interface Foo {
+        fun foo()
+    }
+
+    fun uiMethod() {}
+
+    fun test(foo: Foo) {}
+
+    fun testLambda() {
+        <expr>test { uiMethod() }</expr>
+    }
+}
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/samLambda.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/samLambda.txt
new file mode 100644
index 0000000..4c56366
--- /dev/null
+++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/samLambda.txt
@@ -0,0 +1,54 @@
+KtSuccessCallInfo:
+  call = KtSimpleFunctionCall:
+    isImplicitInvoke = false
+    partiallyAppliedSymbol = KtPartiallyAppliedSymbol:
+      dispatchReceiver = KtImplicitReceiverValue:
+        symbol = KtNamedClassOrObjectSymbol:
+          annotationsList: []
+          classIdIfNonLocal: Test
+          classKind: CLASS
+          companionObject: null
+          contextReceivers: []
+          isActual: false
+          isData: false
+          isExpect: false
+          isExternal: false
+          isFun: false
+          isInline: false
+          isInner: false
+          modality: FINAL
+          name: Test
+          origin: SOURCE
+          superTypes: [
+            KtUsualClassType:
+              annotationsList: []
+              ownTypeArguments: []
+              type: kotlin/Any
+          ]
+          symbolKind: TOP_LEVEL
+          typeParameters: []
+          visibility: Public
+        type = Test
+      extensionReceiver = null
+      signature = KtFunctionLikeSignature:
+        receiverType = null
+        returnType = kotlin.Unit
+        symbol = /Test.test(<dispatch receiver>: Test, foo: Test.Foo): kotlin.Unit
+        valueParameters = [
+          KtVariableLikeSignature:
+            name = foo
+            receiverType = null
+            returnType = Test.Foo
+            symbol = foo: Test.Foo
+            callableIdIfNonLocal = null
+        ]
+        callableIdIfNonLocal = /Test.test
+    typeArgumentsMapping = {}
+    argumentMapping = {
+      { uiMethod() } -> (KtVariableLikeSignature:
+        name = foo
+        receiverType = null
+        returnType = Test.Foo
+        symbol = foo: Test.Foo
+        callableIdIfNonLocal = null)
+    }
diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/samMethodReference.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/samMethodReference.kt
new file mode 100644
index 0000000..3f76676
--- /dev/null
+++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/samMethodReference.kt
@@ -0,0 +1,13 @@
+class Test {
+    fun interface Foo {
+        fun foo()
+    }
+
+    fun uiMethod() {}
+
+    fun test(foo: Foo) {}
+
+    fun testMethodRef() {
+        <expr>test(this::uiMethod)</expr>
+    }
+}
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/samMethodReference.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/samMethodReference.txt
new file mode 100644
index 0000000..14c72cd4
--- /dev/null
+++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/samMethodReference.txt
@@ -0,0 +1,54 @@
+KtSuccessCallInfo:
+  call = KtSimpleFunctionCall:
+    isImplicitInvoke = false
+    partiallyAppliedSymbol = KtPartiallyAppliedSymbol:
+      dispatchReceiver = KtImplicitReceiverValue:
+        symbol = KtNamedClassOrObjectSymbol:
+          annotationsList: []
+          classIdIfNonLocal: Test
+          classKind: CLASS
+          companionObject: null
+          contextReceivers: []
+          isActual: false
+          isData: false
+          isExpect: false
+          isExternal: false
+          isFun: false
+          isInline: false
+          isInner: false
+          modality: FINAL
+          name: Test
+          origin: SOURCE
+          superTypes: [
+            KtUsualClassType:
+              annotationsList: []
+              ownTypeArguments: []
+              type: kotlin/Any
+          ]
+          symbolKind: TOP_LEVEL
+          typeParameters: []
+          visibility: Public
+        type = Test
+      extensionReceiver = null
+      signature = KtFunctionLikeSignature:
+        receiverType = null
+        returnType = kotlin.Unit
+        symbol = /Test.test(<dispatch receiver>: Test, foo: Test.Foo): kotlin.Unit
+        valueParameters = [
+          KtVariableLikeSignature:
+            name = foo
+            receiverType = null
+            returnType = Test.Foo
+            symbol = foo: Test.Foo
+            callableIdIfNonLocal = null
+        ]
+        callableIdIfNonLocal = /Test.test
+    typeArgumentsMapping = {}
+    argumentMapping = {
+      this::uiMethod -> (KtVariableLikeSignature:
+        name = foo
+        receiverType = null
+        returnType = Test.Foo
+        symbol = foo: Test.Foo
+        callableIdIfNonLocal = null)
+    }
\ No newline at end of file