From 4dc9b291e5e741817685583d50014bd84770b529 Mon Sep 17 00:00:00 2001 From: Victor Petukhov Date: Fri, 24 Dec 2021 12:55:56 +0300 Subject: [PATCH] [FE 1.0] Store builder inference session in the corresponding lambda argument --- .../resolve/calls/tower/KotlinResolutionCallbacksImpl.kt | 1 + .../kotlin/resolve/calls/tower/NewCallArguments.kt | 7 +++++++ .../kotlin/resolve/calls/model/KotlinCallArguments.kt | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinResolutionCallbacksImpl.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinResolutionCallbacksImpl.kt index c7240a5fc5a..48c3c4d6d5b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinResolutionCallbacksImpl.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinResolutionCallbacksImpl.kt @@ -213,6 +213,7 @@ class KotlinResolutionCallbacksImpl( null } + lambdaArgument.builderInferenceSession = builderInferenceSession val temporaryTrace = if (builderInferenceSession != null) TemporaryBindingTrace.create(trace, "Trace to resolve builder inference lambda: $lambdaArgument") diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewCallArguments.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewCallArguments.kt index 45d2fa3d9df..7f233839584 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewCallArguments.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewCallArguments.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.StatementFilter import org.jetbrains.kotlin.resolve.TypeResolver import org.jetbrains.kotlin.resolve.calls.ArgumentTypeResolver +import org.jetbrains.kotlin.resolve.calls.components.InferenceSession import org.jetbrains.kotlin.resolve.calls.util.getCall import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext import org.jetbrains.kotlin.resolve.calls.model.* @@ -115,6 +116,12 @@ class LambdaKotlinCallArgumentImpl( assert(!field) field = value } + + override var builderInferenceSession: InferenceSession? = null + set(value) { + assert(field == null) + field = value + } } class FunctionExpressionImpl( diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinCallArguments.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinCallArguments.kt index f4465b9692f..538650dcc66 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinCallArguments.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinCallArguments.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.calls.components.InferenceSession import org.jetbrains.kotlin.resolve.scopes.receivers.DetailedReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.QualifierReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValueWithSmartCastInfo @@ -60,6 +61,10 @@ interface LambdaKotlinCallArgument : PostponableKotlinCallArgument { get() = false set(@Suppress("UNUSED_PARAMETER") value) {} + var builderInferenceSession: InferenceSession? + get() = null + set(@Suppress("UNUSED_PARAMETER") value) {} + /** * parametersTypes == null means, that there is no declared arguments * null inside array means that this type is not declared explicitly