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
This commit is contained in:
Roman Golyshev
2020-03-12 16:34:00 +03:00
committed by Roman Golyshev
parent d27954a6d4
commit 4c6ea7c26a
2 changed files with 18 additions and 0 deletions
@@ -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 {
@@ -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,