From ee58de068004f1093b7f709b3b161965cb2ed709 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 12 Sep 2022 11:25:47 +0200 Subject: [PATCH] Revert "[FE 1.0] Get rid of deprecated `interceptCandidates` in `CallResolutionInterceptorExtension`" This reverts commit afaf20aea39bcad9212fb9e4fcfb6311b5dce166. --- .../extensions/internal/CandidateInterceptor.kt | 17 +++++++++++++++++ .../internal/NonStableExtensionPoints.kt | 15 +++++++++++++++ .../calls/tower/NewResolutionOldInference.kt | 2 ++ 3 files changed, 34 insertions(+) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/extensions/internal/CandidateInterceptor.kt b/compiler/frontend/src/org/jetbrains/kotlin/extensions/internal/CandidateInterceptor.kt index b633f423f9e..160d562c63e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/extensions/internal/CandidateInterceptor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/extensions/internal/CandidateInterceptor.kt @@ -14,11 +14,16 @@ import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.calls.CallResolver +import org.jetbrains.kotlin.resolve.calls.CandidateResolver +import org.jetbrains.kotlin.resolve.calls.KotlinCallResolver import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext import org.jetbrains.kotlin.resolve.calls.inference.components.NewTypeSubstitutor +import org.jetbrains.kotlin.resolve.calls.model.CallResolutionResult import org.jetbrains.kotlin.resolve.calls.model.KotlinCallDiagnostic import org.jetbrains.kotlin.resolve.calls.model.ResolvedCallAtom +import org.jetbrains.kotlin.resolve.calls.tasks.TracingStrategy import org.jetbrains.kotlin.resolve.calls.tower.ImplicitScopeTower +import org.jetbrains.kotlin.resolve.calls.tower.NewResolutionOldInference import org.jetbrains.kotlin.resolve.calls.tower.PSICallResolver import org.jetbrains.kotlin.resolve.scopes.ResolutionScope import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValueWithSmartCastInfo @@ -37,6 +42,18 @@ class CandidateInterceptor(project: Project) { extension.interceptResolvedCallAtomCandidate(it, completedCallAtom, trace, resultSubstitutor, diagnostics) } + fun interceptResolvedCandidates( + candidates: Collection, + context: BasicCallResolutionContext, + candidateResolver: CandidateResolver, + callResolver: CallResolver, + name: Name, + kind: NewResolutionOldInference.ResolutionKind, + tracing: TracingStrategy + ): Collection = extensions.fold(candidates) { it, extension -> + extension.interceptCandidates(it, context, candidateResolver, callResolver, name, kind, tracing) + } + fun interceptFunctionCandidates( candidates: Collection, scopeTower: ImplicitScopeTower, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/extensions/internal/NonStableExtensionPoints.kt b/compiler/frontend/src/org/jetbrains/kotlin/extensions/internal/NonStableExtensionPoints.kt index f1501d05a0f..c3beb37b508 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/extensions/internal/NonStableExtensionPoints.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/extensions/internal/NonStableExtensionPoints.kt @@ -15,11 +15,14 @@ import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtLambdaExpression import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.calls.CallResolver +import org.jetbrains.kotlin.resolve.calls.CandidateResolver import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext import org.jetbrains.kotlin.resolve.calls.inference.components.NewTypeSubstitutor import org.jetbrains.kotlin.resolve.calls.model.KotlinCallDiagnostic import org.jetbrains.kotlin.resolve.calls.model.ResolvedCallAtom +import org.jetbrains.kotlin.resolve.calls.tasks.TracingStrategy import org.jetbrains.kotlin.resolve.calls.tower.ImplicitScopeTower +import org.jetbrains.kotlin.resolve.calls.tower.NewResolutionOldInference import org.jetbrains.kotlin.resolve.calls.tower.PSICallResolver import org.jetbrains.kotlin.resolve.scopes.ResolutionScope import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValueWithSmartCastInfo @@ -62,6 +65,18 @@ interface CallResolutionInterceptorExtension { diagnostics: Collection ): CallableDescriptor = candidateDescriptor + @Suppress("DEPRECATION") + @JvmDefault + fun interceptCandidates( + candidates: Collection, + context: BasicCallResolutionContext, + candidateResolver: CandidateResolver, + callResolver: CallResolver, + name: Name, + kind: NewResolutionOldInference.ResolutionKind, + tracing: TracingStrategy + ): Collection = candidates + @Suppress("DEPRECATION") @JvmDefault fun interceptFunctionCandidates( diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt index d4873124231..c11ea61f12f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt @@ -201,6 +201,8 @@ class NewResolutionOldInference( ) } + candidates = candidateInterceptor.interceptResolvedCandidates(candidates, context, candidateResolver, callResolver, name, kind, tracing) + if (candidates.isEmpty()) { if (reportAdditionalDiagnosticIfNoCandidates(context, nameToResolve, kind, scopeTower, detailedReceiver)) { return OverloadResolutionResultsImpl.nameNotFound()