From e7064f5b770d33f03c8f217146e286e4bed429eb Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Fri, 7 Jun 2019 14:08:04 +0300 Subject: [PATCH] [NI] Move creation of constraint system under callbacks This will be needed in the next commit to have access to constraint system that is used for old inference --- .../tower/KotlinResolutionStatelessCallbacksImpl.kt | 10 ++++++++++ .../calls/components/CallableReferenceResolver.kt | 2 +- .../resolve/calls/components/ExternalComponents.kt | 7 +++++++ .../calls/components/NewOverloadingConflictResolver.kt | 2 +- 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinResolutionStatelessCallbacksImpl.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinResolutionStatelessCallbacksImpl.kt index 53f8eb3ef66..62ad6590aed 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinResolutionStatelessCallbacksImpl.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinResolutionStatelessCallbacksImpl.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.resolve.calls.tower +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor @@ -27,11 +28,14 @@ import org.jetbrains.kotlin.resolve.calls.callResolverUtil.isInfixCall import org.jetbrains.kotlin.resolve.calls.callResolverUtil.isSuperOrDelegatingConstructorCall import org.jetbrains.kotlin.resolve.calls.components.KotlinResolutionCallbacks import org.jetbrains.kotlin.resolve.calls.components.KotlinResolutionStatelessCallbacks +import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector +import org.jetbrains.kotlin.resolve.calls.inference.components.SimpleConstraintSystemImpl import org.jetbrains.kotlin.resolve.calls.inference.isCoroutineCallWithAdditionalInference import org.jetbrains.kotlin.resolve.calls.model.CallableReferenceKotlinCallArgument import org.jetbrains.kotlin.resolve.calls.model.KotlinCall import org.jetbrains.kotlin.resolve.calls.model.KotlinCallArgument import org.jetbrains.kotlin.resolve.calls.model.SimpleKotlinCallArgument +import org.jetbrains.kotlin.resolve.calls.results.SimpleConstraintSystem import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver import org.jetbrains.kotlin.utils.addToStdlib.safeAs @@ -80,4 +84,10 @@ class KotlinResolutionStatelessCallbacksImpl( ): Boolean { return org.jetbrains.kotlin.resolve.calls.inference.isApplicableCallForBuilderInference(descriptor, languageVersionSettings) } + + override fun createConstraintSystemForOverloadResolution( + constraintInjector: ConstraintInjector, builtIns: KotlinBuiltIns + ): SimpleConstraintSystem { + return SimpleConstraintSystemImpl(constraintInjector, builtIns) + } } diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/CallableReferenceResolver.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/CallableReferenceResolver.kt index 9a009a88ab7..700fb47a662 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/CallableReferenceResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/CallableReferenceResolver.kt @@ -44,7 +44,7 @@ class CallableReferenceOverloadConflictResolver( module, specificityComparator, { it.candidate }, - { SimpleConstraintSystemImpl(constraintInjector, builtIns) }, + { statelessCallbacks.createConstraintSystemForOverloadResolution(constraintInjector, builtIns) }, Companion::createFlatSignature, { null }, { statelessCallbacks.isDescriptorFromSource(it) }, diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ExternalComponents.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ExternalComponents.kt index cbe8d44254d..d05c1c5a24e 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ExternalComponents.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ExternalComponents.kt @@ -5,14 +5,17 @@ package org.jetbrains.kotlin.resolve.calls.components +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.container.DefaultImplementation import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations +import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector import org.jetbrains.kotlin.resolve.calls.inference.model.NewTypeVariable import org.jetbrains.kotlin.resolve.calls.model.* +import org.jetbrains.kotlin.resolve.calls.results.SimpleConstraintSystem import org.jetbrains.kotlin.resolve.calls.tower.ImplicitScopeTower import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValueWithSmartCastInfo import org.jetbrains.kotlin.types.StubType @@ -33,6 +36,10 @@ interface KotlinResolutionStatelessCallbacks { fun getVariableCandidateIfInvoke(functionCall: KotlinCall): KotlinResolutionCandidate? fun isCoroutineCall(argument: KotlinCallArgument, parameter: ValueParameterDescriptor): Boolean fun isApplicableCallForBuilderInference(descriptor: CallableDescriptor, languageVersionSettings: LanguageVersionSettings): Boolean + + fun createConstraintSystemForOverloadResolution( + constraintInjector: ConstraintInjector, builtIns: KotlinBuiltIns + ): SimpleConstraintSystem } // This components hold state (trace). Work with this carefully. diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/NewOverloadingConflictResolver.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/NewOverloadingConflictResolver.kt index 653f9e08e8b..9cad3fc9ee7 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/NewOverloadingConflictResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/NewOverloadingConflictResolver.kt @@ -43,7 +43,7 @@ class NewOverloadingConflictResolver( // todo investigate it.resolvedCall.candidateDescriptor }, - { SimpleConstraintSystemImpl(constraintInjector, builtIns) }, + { statelessCallbacks.createConstraintSystemForOverloadResolution(constraintInjector, builtIns) }, Companion::createFlatSignature, { it.variableCandidateIfInvoke }, { statelessCallbacks.isDescriptorFromSource(it) },