From 1982f80bfbcfbcd9f7e903428b07580e83310f53 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 27 May 2020 10:28:55 +0300 Subject: [PATCH] [NI] Leave candidates with annotation if there are no candidates without it --- .../org/jetbrains/kotlin/resolve/calls/KotlinCallResolver.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 c878e366a39..6f6cff00228 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/KotlinCallResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/KotlinCallResolver.kt @@ -146,6 +146,7 @@ class KotlinCallResolver( ) { val candidatesWithAnnotation = candidates.filter { it.resolvedCall.candidateDescriptor.annotations.hasAnnotation(OVERLOAD_RESOLUTION_BY_LAMBDA_ANNOTATION) } + val candidatesWithoutAnnotation = candidates - candidatesWithAnnotation if (candidatesWithAnnotation.isNotEmpty()) { val newCandidates = kotlinCallCompleter.chooseCandidateRegardingFactoryPatternResolution(maximallySpecificCandidates, resolutionCallbacks) maximallySpecificCandidates = overloadingConflictResolver.chooseMaximallySpecificCandidates( @@ -154,8 +155,8 @@ class KotlinCallResolver( discriminateGenerics = true ) - if (maximallySpecificCandidates.size > 1) { - maximallySpecificCandidates = candidates.toMutableSet().apply { removeAll(candidatesWithAnnotation) } + if (maximallySpecificCandidates.size > 1 && candidatesWithoutAnnotation.any { it in maximallySpecificCandidates }) { + maximallySpecificCandidates = maximallySpecificCandidates.toMutableSet().apply { removeAll(candidatesWithAnnotation) } maximallySpecificCandidates.singleOrNull()?.addDiagnostic(CandidateChosenUsingOverloadResolutionByLambdaAnnotation()) } }