[NI] Leave candidates with annotation if there are no candidates without it

This commit is contained in:
Dmitriy Novozhilov
2020-05-27 10:28:55 +03:00
parent 2812ed0a02
commit 1982f80bfb
@@ -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())
}
}