From 1c32c62a877f166ee6f37c222dcbffaf1c31d706 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 22 Apr 2020 14:50:55 +0300 Subject: [PATCH] [NI] Choose annotated candidate if call still ambiguous #KT-11265 --- .../jetbrains/kotlin/resolve/calls/KotlinCallResolver.kt | 9 +++++++-- 1 file changed, 7 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 f0580a2eb1e..03a10513b47 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/KotlinCallResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/KotlinCallResolver.kt @@ -154,10 +154,15 @@ class KotlinCallResolver( if ( maximallySpecificCandidates.size > 1 && callComponents.languageVersionSettings.supportsFeature(LanguageFeature.FactoryPatternResolution) && - candidates.any { it.resolvedCall.candidateDescriptor.annotations.hasAnnotation(FACTORY_PATTERN_ANNOTATION) } && candidates.all { resolutionCallbacks.inferenceSession.shouldRunCompletion(it) } ) { - maximallySpecificCandidates = kotlinCallCompleter.chooseCandidateRegardingFactoryPatternResolution(maximallySpecificCandidates, resolutionCallbacks) + val candidateWithAnnotation = candidates.firstOrNull { it.resolvedCall.candidateDescriptor.annotations.hasAnnotation(FACTORY_PATTERN_ANNOTATION) } + if (candidateWithAnnotation != null) { + maximallySpecificCandidates = kotlinCallCompleter.chooseCandidateRegardingFactoryPatternResolution(maximallySpecificCandidates, resolutionCallbacks) + if (maximallySpecificCandidates.size > 1) { + maximallySpecificCandidates = setOf(candidateWithAnnotation) + } + } } return kotlinCallCompleter.runCompletion(candidateFactory, maximallySpecificCandidates, expectedType, resolutionCallbacks)