[NI] Leave candidates with annotation if there are no candidates without it
This commit is contained in:
@@ -146,6 +146,7 @@ class KotlinCallResolver(
|
|||||||
) {
|
) {
|
||||||
val candidatesWithAnnotation =
|
val candidatesWithAnnotation =
|
||||||
candidates.filter { it.resolvedCall.candidateDescriptor.annotations.hasAnnotation(OVERLOAD_RESOLUTION_BY_LAMBDA_ANNOTATION) }
|
candidates.filter { it.resolvedCall.candidateDescriptor.annotations.hasAnnotation(OVERLOAD_RESOLUTION_BY_LAMBDA_ANNOTATION) }
|
||||||
|
val candidatesWithoutAnnotation = candidates - candidatesWithAnnotation
|
||||||
if (candidatesWithAnnotation.isNotEmpty()) {
|
if (candidatesWithAnnotation.isNotEmpty()) {
|
||||||
val newCandidates = kotlinCallCompleter.chooseCandidateRegardingFactoryPatternResolution(maximallySpecificCandidates, resolutionCallbacks)
|
val newCandidates = kotlinCallCompleter.chooseCandidateRegardingFactoryPatternResolution(maximallySpecificCandidates, resolutionCallbacks)
|
||||||
maximallySpecificCandidates = overloadingConflictResolver.chooseMaximallySpecificCandidates(
|
maximallySpecificCandidates = overloadingConflictResolver.chooseMaximallySpecificCandidates(
|
||||||
@@ -154,8 +155,8 @@ class KotlinCallResolver(
|
|||||||
discriminateGenerics = true
|
discriminateGenerics = true
|
||||||
)
|
)
|
||||||
|
|
||||||
if (maximallySpecificCandidates.size > 1) {
|
if (maximallySpecificCandidates.size > 1 && candidatesWithoutAnnotation.any { it in maximallySpecificCandidates }) {
|
||||||
maximallySpecificCandidates = candidates.toMutableSet().apply { removeAll(candidatesWithAnnotation) }
|
maximallySpecificCandidates = maximallySpecificCandidates.toMutableSet().apply { removeAll(candidatesWithAnnotation) }
|
||||||
maximallySpecificCandidates.singleOrNull()?.addDiagnostic(CandidateChosenUsingOverloadResolutionByLambdaAnnotation())
|
maximallySpecificCandidates.singleOrNull()?.addDiagnostic(CandidateChosenUsingOverloadResolutionByLambdaAnnotation())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user