From 4c6ea7c26a4fccabafd8e714555ea91d3282936f Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Thu, 12 Mar 2020 16:34:00 +0300 Subject: [PATCH] KT-36808 Sink down member function `Flow.collect` in the completion - This method is never supposed to be called, so we try to lower its presence in the completion list by puting it on the last possible position - ^KT-36808 Fixed --- .../kotlin/idea/completion/CompletionSession.kt | 2 ++ .../jetbrains/kotlin/idea/completion/Weighers.kt | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt index 5bfb93e7698..1db3cd760c6 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt @@ -284,6 +284,8 @@ abstract class CompletionSession( sorter = sorter.weighAfter("kotlin.proximity", ByNameAlphabeticalWeigher, PreferLessParametersWeigher) + sorter = sorter.weighBefore("prefix", KotlinUnwantedLookupElementWeigher) + sorter = if (expectedInfos.all { it.fuzzyType?.type?.isUnit() == true }) { sorter.weighBefore("prefix", PreferDslMembers) } else { diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/Weighers.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/Weighers.kt index 3155a5ac94e..ac0cbed5f77 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/Weighers.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/Weighers.kt @@ -22,7 +22,9 @@ import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.util.CallType import org.jetbrains.kotlin.idea.util.CallTypeAndReceiver import org.jetbrains.kotlin.idea.util.toFuzzyType +import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf import org.jetbrains.kotlin.resolve.findOriginalTopMostOverriddenDescriptors import org.jetbrains.kotlin.types.typeUtil.isNothing @@ -222,6 +224,20 @@ object DeprecatedWeigher : LookupElementWeigher("kotlin.deprecated") { } } +/** + * This weigher is designed to "sink down" specific elements in completion. + * + * For now it only works on "Flow.collect" member method (see [https://youtrack.jetbrains.com/issue/KT-36808] for details). + */ +object KotlinUnwantedLookupElementWeigher : LookupElementWeigher("kotlin.unwantedElement") { + private val flowCollectFqName = FqName("kotlinx.coroutines.flow.Flow.collect") + + override fun weigh(element: LookupElement): Int { + val descriptor = (element.`object` as? DeclarationLookupObject)?.descriptor ?: return 0 + return if (descriptor.fqNameSafe == flowCollectFqName) 1 else 0 + } +} + object PreferMatchingItemWeigher : LookupElementWeigher("kotlin.preferMatching", false, true) { private enum class Weight { keywordExactMatch,