[FE] KT-51243 Fix parameterized contextual lambda
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java
index 201480b..b0d1ace 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java
@@ -10842,6 +10842,12 @@
                 }
 
                 @Test
+                @TestMetadata("parameterizedContextualLambda.kt")
+                public void testParameterizedContextualLambda() throws Exception {
+                    runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/parameterizedContextualLambda.kt");
+                }
+
+                @Test
                 @TestMetadata("plusMatrix.kt")
                 public void testPlusMatrix() throws Exception {
                     runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/plusMatrix.kt");
diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java
index 72a20f5..87e6764 100644
--- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java
+++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java
@@ -10842,6 +10842,12 @@
                 }
 
                 @Test
+                @TestMetadata("parameterizedContextualLambda.kt")
+                public void testParameterizedContextualLambda() throws Exception {
+                    runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/parameterizedContextualLambda.kt");
+                }
+
+                @Test
                 @TestMetadata("plusMatrix.kt")
                 public void testPlusMatrix() throws Exception {
                     runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/plusMatrix.kt");
diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java
index 7d3a0dd..a1b1247 100644
--- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java
+++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java
@@ -10842,6 +10842,12 @@
                 }
 
                 @Test
+                @TestMetadata("parameterizedContextualLambda.kt")
+                public void testParameterizedContextualLambda() throws Exception {
+                    runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/parameterizedContextualLambda.kt");
+                }
+
+                @Test
                 @TestMetadata("plusMatrix.kt")
                 public void testPlusMatrix() throws Exception {
                     runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/plusMatrix.kt");
diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java
index 8f560a2..759b121 100644
--- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java
+++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java
@@ -16659,6 +16659,12 @@
             }
 
             @Test
+            @TestMetadata("parameterizedContextualLambda.kt")
+            public void testParameterizedContextualLambda() throws Exception {
+                runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/parameterizedContextualLambda.kt");
+            }
+
+            @Test
             @TestMetadata("passingLambdaToContextualParam.kt")
             public void testPassingLambdaToContextualParam() throws Exception {
                 runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/passingLambdaToContextualParam.kt");
diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/ResolutionAtoms.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/ResolutionAtoms.kt
index 5fe6c81..22609d9 100644
--- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/ResolutionAtoms.kt
+++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/ResolutionAtoms.kt
@@ -174,7 +174,7 @@
         setAnalyzedResults(subResolvedAtoms)
     }
 
-    override val inputTypes: Collection<UnwrappedType> get() = receiver?.let { parameters + it } ?: parameters
+    override val inputTypes: Collection<UnwrappedType> get() = parameters + listOfNotNull(receiver) + contextReceivers
     override val outputType: UnwrappedType get() = returnType
 }
 
diff --git a/compiler/testData/codegen/box/extensionFunctions/contextReceivers/parameterizedContextualLambda.kt b/compiler/testData/codegen/box/extensionFunctions/contextReceivers/parameterizedContextualLambda.kt
new file mode 100644
index 0000000..595c5be
--- /dev/null
+++ b/compiler/testData/codegen/box/extensionFunctions/contextReceivers/parameterizedContextualLambda.kt
@@ -0,0 +1,14 @@
+// !LANGUAGE: +ContextReceivers
+// TARGET_BACKEND: JVM_IR
+// IGNORE_BACKEND_FIR: JVM_IR
+// FIR status: context receivers aren't yet supported
+
+class A {
+    val result = "OK"
+}
+
+fun <T> test(receiver: T, action: context(T) () -> String) = action(receiver)
+
+fun box(): String = with(A()) {
+    result
+}
\ No newline at end of file
diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/parameterizedContextualLambda.fir.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/parameterizedContextualLambda.fir.kt
new file mode 100644
index 0000000..5b25168
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/parameterizedContextualLambda.fir.kt
@@ -0,0 +1,18 @@
+// !LANGUAGE: +ContextReceivers
+
+fun <T> test(action: context(T) () -> Unit) {}
+
+fun <T> test2(actionWithArg: context(T) (T) -> Unit) {}
+
+fun main() {
+    test<String> {
+        <!UNRESOLVED_REFERENCE!>length<!>
+    }
+    test<Int> {
+        <!UNRESOLVED_REFERENCE!>toDouble<!>()
+    }
+    test2<String> { a ->
+        <!UNRESOLVED_REFERENCE!>length<!>
+        a.length
+    }
+}
\ No newline at end of file
diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/parameterizedContextualLambda.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/parameterizedContextualLambda.kt
new file mode 100644
index 0000000..97c76ec
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/parameterizedContextualLambda.kt
@@ -0,0 +1,18 @@
+// !LANGUAGE: +ContextReceivers
+
+fun <T> test(action: context(T) () -> Unit) {}
+
+fun <T> test2(actionWithArg: context(T) (T) -> Unit) {}
+
+fun main() {
+    test<String> {
+        length
+    }
+    test<Int> {
+        toDouble()
+    }
+    test2<String> { a ->
+        length
+        a.length
+    }
+}
\ No newline at end of file
diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/parameterizedContextualLambda.txt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/parameterizedContextualLambda.txt
new file mode 100644
index 0000000..59ece61
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/parameterizedContextualLambda.txt
@@ -0,0 +1,5 @@
+package
+
+public fun main(): kotlin.Unit
+public fun </*0*/ T> test(/*0*/ action: context(T) () -> kotlin.Unit): kotlin.Unit
+public fun </*0*/ T> test2(/*0*/ actionWithArg: context(T) (T) -> kotlin.Unit): kotlin.Unit
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java
index ffb2248..dbbda6a 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java
@@ -10848,6 +10848,12 @@
                 }
 
                 @Test
+                @TestMetadata("parameterizedContextualLambda.kt")
+                public void testParameterizedContextualLambda() throws Exception {
+                    runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/parameterizedContextualLambda.kt");
+                }
+
+                @Test
                 @TestMetadata("plusMatrix.kt")
                 public void testPlusMatrix() throws Exception {
                     runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/plusMatrix.kt");
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java
index 183fc99..7e97f32 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java
@@ -16659,6 +16659,12 @@
             }
 
             @Test
+            @TestMetadata("parameterizedContextualLambda.kt")
+            public void testParameterizedContextualLambda() throws Exception {
+                runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/parameterizedContextualLambda.kt");
+            }
+
+            @Test
             @TestMetadata("passingLambdaToContextualParam.kt")
             public void testPassingLambdaToContextualParam() throws Exception {
                 runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/passingLambdaToContextualParam.kt");