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:
committed by
Roman Golyshev
parent
d27954a6d4
commit
4c6ea7c26a
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user