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 d3159bd5a7a..714d7d6f268 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 @@ -17065,6 +17065,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCalls.kt"); } + @Test + @TestMetadata("topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt") + public void testTopDownCompletionWithThreeBuilderInferenceCallsSameLevel() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt"); + } + @Test @TestMetadata("topDownCompletionWithTwoBuilderInferenceCalls.kt") public void testTopDownCompletionWithTwoBuilderInferenceCalls() 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 c46dc2b42e6..e9dd3ed345a 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 @@ -53,11 +53,11 @@ class BuilderInferenceSession( ) : ManyCandidatesResolver( psiCallResolver, postponedArgumentsAnalyzer, kotlinConstraintSystemCompleter, callComponents, builtIns ) { - var nestedBuilderInferenceSession: BuilderInferenceSession? = null + private var nestedBuilderInferenceSessions: MutableSet = mutableSetOf() init { if (topLevelCallContext.inferenceSession is BuilderInferenceSession) { - topLevelCallContext.inferenceSession.nestedBuilderInferenceSession = this + topLevelCallContext.inferenceSession.nestedBuilderInferenceSessions.add(this) } } @@ -232,7 +232,9 @@ class BuilderInferenceSession( updateCalls(lambda, resultingSubstitutor, commonSystem.errors) - nestedBuilderInferenceSession?.updateAllCalls(substitutor, commonSystem, lambda) + for (nestedSession in nestedBuilderInferenceSessions) { + nestedSession.updateAllCalls(substitutor, commonSystem, lambda) + } } override fun shouldCompleteResolvedSubAtomsOf(resolvedCallAtom: ResolvedCallAtom) = true diff --git a/compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt b/compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt new file mode 100644 index 00000000000..f7d7d7b4e8d --- /dev/null +++ b/compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt @@ -0,0 +1,49 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER -EXPERIMENTAL_IS_NOT_ENABLED +// WITH_RUNTIME + +import kotlin.experimental.ExperimentalTypeInference + +@OptIn(ExperimentalTypeInference::class) +class A1 { + fun builder1(@BuilderInference configure: A2.() -> Unit) {} +} + +@OptIn(ExperimentalTypeInference::class) +class A2 { + fun builder2(@BuilderInference configure: A3.() -> Unit) {} +} + +@OptIn(ExperimentalTypeInference::class) +class A3 { + fun builder3(@BuilderInference configure: A4.() -> Unit) {} +} + +class A4 { + fun resolver(x: A3_BT3) {} +} + +fun foo(x: A1) { + x.builder1 { + builder2 { + builder3 { + resolver("") + } + builder3 { + resolver("") + } + } + builder2 { + builder3 { + resolver("") + } + builder3 { + resolver("") + } + } + } +} + +fun box(): String { + foo(A1()) + return "OK" +} \ No newline at end of file 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 b42413dcaa3..299bae2420f 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 @@ -17065,6 +17065,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCalls.kt"); } + @Test + @TestMetadata("topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt") + public void testTopDownCompletionWithThreeBuilderInferenceCallsSameLevel() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt"); + } + @Test @TestMetadata("topDownCompletionWithTwoBuilderInferenceCalls.kt") public void testTopDownCompletionWithTwoBuilderInferenceCalls() 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 f3d6a7722cc..32d40169b8a 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 @@ -17065,6 +17065,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCalls.kt"); } + @Test + @TestMetadata("topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt") + public void testTopDownCompletionWithThreeBuilderInferenceCallsSameLevel() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt"); + } + @Test @TestMetadata("topDownCompletionWithTwoBuilderInferenceCalls.kt") public void testTopDownCompletionWithTwoBuilderInferenceCalls() 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 6abedaea486..3dbf9dce166 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -14132,6 +14132,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCalls.kt"); } + @TestMetadata("topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt") + public void testTopDownCompletionWithThreeBuilderInferenceCallsSameLevel() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt"); + } + @TestMetadata("topDownCompletionWithTwoBuilderInferenceCalls.kt") public void testTopDownCompletionWithTwoBuilderInferenceCalls() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithTwoBuilderInferenceCalls.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 4163f256904..ee1616d3a44 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -12416,6 +12416,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCalls.kt"); } + @TestMetadata("topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt") + public void testTopDownCompletionWithThreeBuilderInferenceCallsSameLevel() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt"); + } + @TestMetadata("topDownCompletionWithTwoBuilderInferenceCalls.kt") public void testTopDownCompletionWithTwoBuilderInferenceCalls() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithTwoBuilderInferenceCalls.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index e6027e81dcc..e4f1e9e834f 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -11837,6 +11837,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCalls.kt"); } + @TestMetadata("topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt") + public void testTopDownCompletionWithThreeBuilderInferenceCallsSameLevel() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt"); + } + @TestMetadata("topDownCompletionWithTwoBuilderInferenceCalls.kt") public void testTopDownCompletionWithTwoBuilderInferenceCalls() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithTwoBuilderInferenceCalls.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index f074b772b12..233634b1c0d 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -11902,6 +11902,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCalls.kt"); } + @TestMetadata("topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt") + public void testTopDownCompletionWithThreeBuilderInferenceCallsSameLevel() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt"); + } + @TestMetadata("topDownCompletionWithTwoBuilderInferenceCalls.kt") public void testTopDownCompletionWithTwoBuilderInferenceCalls() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithTwoBuilderInferenceCalls.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index 724b7663479..30c14d86823 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -6308,6 +6308,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCalls.kt"); } + @TestMetadata("topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt") + public void testTopDownCompletionWithThreeBuilderInferenceCallsSameLevel() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithThreeBuilderInferenceCallsSameLevel.kt"); + } + @TestMetadata("topDownCompletionWithTwoBuilderInferenceCalls.kt") public void testTopDownCompletionWithTwoBuilderInferenceCalls() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/topDownCompletionWithTwoBuilderInferenceCalls.kt");