~ fix for named arguments
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java
index 0659f05..f5fbd32 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java
@@ -16638,6 +16638,12 @@
}
@Test
+ @TestMetadata("builderPassedAsNamedArgument.kt")
+ public void testBuilderPassedAsNamedArgument() throws Exception {
+ runTest("compiler/testData/diagnostics/tests/inference/builderInference/builderPassedAsNamedArgument.kt");
+ }
+
+ @Test
@TestMetadata("callableReferenceInsideInvokeCall.kt")
public void testCallableReferenceInsideInvokeCall() throws Exception {
runTest("compiler/testData/diagnostics/tests/inference/builderInference/callableReferenceInsideInvokeCall.kt");
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java
index 2451b8e..096000e 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java
@@ -16638,6 +16638,12 @@
}
@Test
+ @TestMetadata("builderPassedAsNamedArgument.kt")
+ public void testBuilderPassedAsNamedArgument() throws Exception {
+ runTest("compiler/testData/diagnostics/tests/inference/builderInference/builderPassedAsNamedArgument.kt");
+ }
+
+ @Test
@TestMetadata("callableReferenceInsideInvokeCall.kt")
public void testCallableReferenceInsideInvokeCall() throws Exception {
runTest("compiler/testData/diagnostics/tests/inference/builderInference/callableReferenceInsideInvokeCall.kt");
diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java
index 91b113b..d472eb0 100644
--- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java
+++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java
@@ -16632,6 +16632,12 @@
}
@Test
+ @TestMetadata("builderPassedAsNamedArgument.kt")
+ public void testBuilderPassedAsNamedArgument() throws Exception {
+ runTest("compiler/testData/diagnostics/tests/inference/builderInference/builderPassedAsNamedArgument.kt");
+ }
+
+ @Test
@TestMetadata("callableReferenceInsideInvokeCall.kt")
public void testCallableReferenceInsideInvokeCall() throws Exception {
runTest("compiler/testData/diagnostics/tests/inference/builderInference/callableReferenceInsideInvokeCall.kt");
diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java
index 3377178..1ac2fc5 100644
--- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java
+++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java
@@ -16638,6 +16638,12 @@
}
@Test
+ @TestMetadata("builderPassedAsNamedArgument.kt")
+ public void testBuilderPassedAsNamedArgument() throws Exception {
+ runTest("compiler/testData/diagnostics/tests/inference/builderInference/builderPassedAsNamedArgument.kt");
+ }
+
+ @Test
@TestMetadata("callableReferenceInsideInvokeCall.kt")
public void testCallableReferenceInsideInvokeCall() throws Exception {
runTest("compiler/testData/diagnostics/tests/inference/builderInference/callableReferenceInsideInvokeCall.kt");
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirBuilderInferenceSession2.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirBuilderInferenceSession2.kt
index 6f95dfe..ba0eb74 100644
--- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirBuilderInferenceSession2.kt
+++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirBuilderInferenceSession2.kt
@@ -193,7 +193,7 @@
if (dispatchReceiver?.resolvedType?.containsNotFixedTypeVariables() == true) return true
if (givenExtensionReceiverOptions.any { it.resolvedType.containsNotFixedTypeVariables() }) return true
- if (callInfo.arguments.any { it in qualifiedAccessesToProcess }) return true
+ if (callInfo.arguments.any { it.isArgumentAmongPostponedQualifiedAccess() }) return true
if (callInfo.isDelegateExpression) return true
// For assignments
if ((callInfo.resolutionMode as? ResolutionMode.WithExpectedType)?.expectedTypeRef?.type?.containsNotFixedTypeVariables() == true) {
@@ -205,6 +205,11 @@
return false
}
+ private fun FirExpression.isArgumentAmongPostponedQualifiedAccess(): Boolean {
+ if (this is FirNamedArgumentExpression) return expression.isArgumentAmongPostponedQualifiedAccess()
+ return this in qualifiedAccessesToProcess
+ }
+
private fun ConeKotlinType.containsNotFixedTypeVariables(): Boolean =
contains {
it is ConeTypeVariableType && it.typeConstructor in currentCommonSystem.allTypeVariables
diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/builderPassedAsNamedArgument.kt b/compiler/testData/diagnostics/tests/inference/builderInference/builderPassedAsNamedArgument.kt
new file mode 100644
index 0000000..d09229d
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/inference/builderInference/builderPassedAsNamedArgument.kt
@@ -0,0 +1,21 @@
+// FIR_IDENTICAL
+class Controller<T>
+
+fun <S> generate1(g: suspend (Controller<S>) -> Unit): S = TODO()
+fun <S> generate2(g: suspend Controller<S>.() -> Unit): S = TODO()
+
+fun foo(c: Controller<String>) {}
+
+fun foo() {
+ val t1 = generate1 {
+ foo(c = it)
+ }
+
+ <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String")!>t1<!>
+
+ val t2 = generate2 {
+ foo(c = this)
+ }
+
+ <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String")!>t2<!>
+}
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 85d1ba7..8095878 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
@@ -16638,6 +16638,12 @@
}
@Test
+ @TestMetadata("builderPassedAsNamedArgument.kt")
+ public void testBuilderPassedAsNamedArgument() throws Exception {
+ runTest("compiler/testData/diagnostics/tests/inference/builderInference/builderPassedAsNamedArgument.kt");
+ }
+
+ @Test
@TestMetadata("callableReferenceInsideInvokeCall.kt")
public void testCallableReferenceInsideInvokeCall() throws Exception {
runTest("compiler/testData/diagnostics/tests/inference/builderInference/callableReferenceInsideInvokeCall.kt");