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 c12d0437f6f..de0bb5920fe 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 @@ -14161,6 +14161,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/inference/builderInference/kt47744.kt"); } + @Test + @TestMetadata("kt49285.kt") + public void testKt49285() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/kt49285.kt"); + } + @Test @TestMetadata("kt49828.kt") public void testKt49828() throws Exception { 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 fd705961529..748cac748d3 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 @@ -14161,6 +14161,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/inference/builderInference/kt47744.kt"); } + @Test + @TestMetadata("kt49285.kt") + public void testKt49285() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/kt49285.kt"); + } + @Test @TestMetadata("kt49828.kt") public void testKt49828() throws Exception { 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 421afa7ecb1..4855ac249a0 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 @@ -14161,6 +14161,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/inference/builderInference/kt47744.kt"); } + @Test + @TestMetadata("kt49285.kt") + public void testKt49285() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/kt49285.kt"); + } + @Test @TestMetadata("kt49828.kt") public void testKt49828() throws Exception { 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 d541a02254e..6fa8bc4466e 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 @@ -19468,12 +19468,6 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/inference/builderInference/kt48633.kt"); } - @Test - @TestMetadata("kt49285.kt") - public void testKt49285() throws Exception { - runTest("compiler/testData/codegen/box/inference/builderInference/kt49285.kt"); - } - @Test @TestMetadata("kt49887.kt") public void testKt49887() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/BuilderInferenceSession.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/BuilderInferenceSession.kt index 66a4c3428c7..6c348b0f133 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/BuilderInferenceSession.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/BuilderInferenceSession.kt @@ -193,7 +193,7 @@ class BuilderInferenceSession( fun hasInapplicableCall(): Boolean = hasInapplicableCall override fun writeOnlyStubs(callInfo: SingleCallResolutionResult): Boolean { - return !skipCall(callInfo) + return !skipCall(callInfo) && !arePostponedVariablesInferred() } private fun skipCall(callInfo: SingleCallResolutionResult): Boolean { @@ -227,6 +227,8 @@ class BuilderInferenceSession( fun getCurrentSubstitutor(): NewTypeSubstitutor = commonSystem.buildCurrentSubstitutor().cast().takeIf { !it.isEmpty } ?: EmptySubstitutor + private fun arePostponedVariablesInferred() = commonSystem.notFixedTypeVariables.isEmpty() + override fun initializeLambda(lambda: ResolvedLambdaAtom) { this.lambda = lambda } diff --git a/compiler/testData/codegen/box/inference/builderInference/kt49285.kt b/compiler/testData/diagnostics/tests/inference/builderInference/kt49285.fir.kt similarity index 70% rename from compiler/testData/codegen/box/inference/builderInference/kt49285.kt rename to compiler/testData/diagnostics/tests/inference/builderInference/kt49285.fir.kt index c3e34c05c75..eeb0138025a 100644 --- a/compiler/testData/codegen/box/inference/builderInference/kt49285.kt +++ b/compiler/testData/diagnostics/tests/inference/builderInference/kt49285.fir.kt @@ -1,4 +1,3 @@ -// DONT_TARGET_EXACT_BACKEND: WASM // WITH_STDLIB import kotlin.experimental.ExperimentalTypeInference @@ -13,12 +12,9 @@ fun myBuilder1(@BuilderInference builder: Foo.() -> Foo): Foo = @OptIn(ExperimentalTypeInference::class) fun myBuilder2(@BuilderInference builder: Foo.() -> Unit): Foo = Foo().apply(builder) -fun box(): String { - val result1 = myBuilder1 { - add(null) - myBuilder2 { - add("") - } +val result1 = myBuilder1 { + add(null) + myBuilder2 { + add("") } - return "OK" } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/kt49285.kt b/compiler/testData/diagnostics/tests/inference/builderInference/kt49285.kt new file mode 100644 index 00000000000..8ed2993dd6b --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/kt49285.kt @@ -0,0 +1,20 @@ +// WITH_STDLIB + +import kotlin.experimental.ExperimentalTypeInference + +class Foo { + fun add(x: T) {} +} + +@OptIn(ExperimentalTypeInference::class) +fun myBuilder1(@BuilderInference builder: Foo.() -> Foo): Foo = Foo().apply { builder() } + +@OptIn(ExperimentalTypeInference::class) +fun myBuilder2(@BuilderInference builder: Foo.() -> Unit): Foo = Foo().apply(builder) + +val result1 = myBuilder1 { + add(null) + myBuilder2 { + add("") + } +} diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/kt49285.txt b/compiler/testData/diagnostics/tests/inference/builderInference/kt49285.txt new file mode 100644 index 00000000000..3761e785835 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/kt49285.txt @@ -0,0 +1,13 @@ +package + +public val result1: Foo +@kotlin.OptIn(markerClass = {kotlin.experimental.ExperimentalTypeInference::class}) public fun myBuilder1(/*0*/ @kotlin.BuilderInference builder: Foo.() -> Foo): Foo +@kotlin.OptIn(markerClass = {kotlin.experimental.ExperimentalTypeInference::class}) public fun myBuilder2(/*0*/ @kotlin.BuilderInference builder: Foo.() -> kotlin.Unit): Foo + +public final class Foo { + public constructor Foo() + public final fun add(/*0*/ x: T): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} 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 efd855de792..ebeabbe7a76 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 @@ -14167,6 +14167,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/inference/builderInference/kt47744.kt"); } + @Test + @TestMetadata("kt49285.kt") + public void testKt49285() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/kt49285.kt"); + } + @Test @TestMetadata("kt49828.kt") public void testKt49828() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 26cfa8508e7..d341fb20b66 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -19036,12 +19036,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inference/builderInference/kt48633.kt"); } - @Test - @TestMetadata("kt49285.kt") - public void testKt49285() throws Exception { - runTest("compiler/testData/codegen/box/inference/builderInference/kt49285.kt"); - } - @Test @TestMetadata("kt49887.kt") public void testKt49887() throws Exception { 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 e0b54d0a210..5663201d05b 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 @@ -19468,12 +19468,6 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inference/builderInference/kt48633.kt"); } - @Test - @TestMetadata("kt49285.kt") - public void testKt49285() throws Exception { - runTest("compiler/testData/codegen/box/inference/builderInference/kt49285.kt"); - } - @Test @TestMetadata("kt49887.kt") public void testKt49887() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 5ae34cd24db..c938a160e9e 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -15833,11 +15833,6 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inference/builderInference/kt48633.kt"); } - @TestMetadata("kt49285.kt") - public void testKt49285() throws Exception { - runTest("compiler/testData/codegen/box/inference/builderInference/kt49285.kt"); - } - @TestMetadata("kt49887.kt") public void testKt49887() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/kt49887.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java index 1050023464e..113f722316d 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java @@ -14814,12 +14814,6 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/builderInference/kt48633.kt"); } - @Test - @TestMetadata("kt49285.kt") - public void testKt49285() throws Exception { - runTest("compiler/testData/codegen/box/inference/builderInference/kt49285.kt"); - } - @Test @TestMetadata("kt49887.kt") public void testKt49887() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java index 5cb9450d2b2..ebc9d1b298f 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java @@ -14778,12 +14778,6 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/builderInference/kt48633.kt"); } - @Test - @TestMetadata("kt49285.kt") - public void testKt49285() throws Exception { - runTest("compiler/testData/codegen/box/inference/builderInference/kt49285.kt"); - } - @Test @TestMetadata("kt49887.kt") public void testKt49887() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java index ef6fd22f7be..03af64f22aa 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java @@ -15888,12 +15888,6 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/inference/builderInference/kt48633.kt"); } - @Test - @TestMetadata("kt49285.kt") - public void testKt49285() throws Exception { - runTest("compiler/testData/codegen/box/inference/builderInference/kt49285.kt"); - } - @Test @TestMetadata("kt49887.kt") public void testKt49887() throws Exception {