From 393e99fa44afc7dfc1b7f40eaea2affbf780882b Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 9 Sep 2022 16:16:22 +0200 Subject: [PATCH] FE: don't run overload-by-lambda-return-type with unsuccessful candidates Related to KT-52927 --- .../kotlin/fir/FirOverloadByLambdaReturnTypeResolver.kt | 1 + .../org/jetbrains/kotlin/resolve/calls/KotlinCallResolver.kt | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirOverloadByLambdaReturnTypeResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirOverloadByLambdaReturnTypeResolver.kt index 9afdb44957e..36ac6531b3a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirOverloadByLambdaReturnTypeResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirOverloadByLambdaReturnTypeResolver.kt @@ -95,6 +95,7 @@ class FirOverloadByLambdaReturnTypeResolver( call: T, candidates: Set, ): Set? where T : FirResolvable, T : FirStatement { + if (candidates.any { !it.isSuccessful }) return candidates val lambdas = candidates.flatMap { candidate -> candidate.postponedAtoms .filter { it is ResolvedLambdaAtom && !it.analyzed } diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/KotlinCallResolver.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/KotlinCallResolver.kt index cc81efecaa3..40042f7d302 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/KotlinCallResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/KotlinCallResolver.kt @@ -244,8 +244,9 @@ class KotlinCallResolver( } } if (callComponents.languageVersionSettings.supportsFeature(LanguageFeature.OverloadResolutionByLambdaReturnType) && - candidates.all { resolutionCallbacks.inferenceSession.shouldRunCompletion(it) } && - kotlinCall.callKind != KotlinCallKind.CALLABLE_REFERENCE + kotlinCall.callKind != KotlinCallKind.CALLABLE_REFERENCE && + candidates.all { it.isSuccessful } && + candidates.all { resolutionCallbacks.inferenceSession.shouldRunCompletion(it) } ) { val candidatesWithAnnotation = candidates.filter { it.resolvedCall.candidateDescriptor.annotations.hasAnnotation(OVERLOAD_RESOLUTION_BY_LAMBDA_ANNOTATION_FQ_NAME)