diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/LambdaItems.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/LambdaItems.kt index 2321a089c56..d4fd6328deb 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/LambdaItems.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/LambdaItems.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.completion.smart import com.intellij.codeInsight.lookup.LookupElement import com.intellij.codeInsight.lookup.LookupElementBuilder import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.builtins.isFunctionType import org.jetbrains.kotlin.idea.completion.LambdaSignatureTemplates import org.jetbrains.kotlin.idea.completion.suppressAutoInsertion import org.jetbrains.kotlin.idea.core.ExpectedInfo @@ -35,7 +36,7 @@ object LambdaItems { } fun addToCollection(collection: MutableCollection, expectedInfos: Collection) { - val functionExpectedInfos = expectedInfos.filterFunctionExpected() + val functionExpectedInfos = expectedInfos.filter { it.fuzzyType?.type?.isFunctionType == true } if (functionExpectedInfos.isEmpty()) return val functionTypes = functionExpectedInfos diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletionSession.kt index 0db359dfc87..ffb58972d29 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletionSession.kt @@ -21,12 +21,14 @@ import com.intellij.codeInsight.completion.CompletionResultSet import com.intellij.codeInsight.completion.CompletionSorter import com.intellij.codeInsight.lookup.LookupElement import com.intellij.psi.impl.source.tree.LeafPsiElement +import org.jetbrains.kotlin.builtins.isFunctionType import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.idea.completion.* import org.jetbrains.kotlin.idea.core.ExpectedInfo import org.jetbrains.kotlin.idea.core.ExpectedInfos import org.jetbrains.kotlin.idea.core.completion.DeclarationLookupObject +import org.jetbrains.kotlin.idea.core.fuzzyType import org.jetbrains.kotlin.idea.util.CallTypeAndReceiver import org.jetbrains.kotlin.load.java.sam.SamConstructorDescriptorKindExclude import org.jetbrains.kotlin.psi.LambdaArgument @@ -45,14 +47,17 @@ class SmartCompletionSession( override val descriptorKindFilter: DescriptorKindFilter by lazy { // we do not include SAM-constructors because they are handled separately and adding them requires iterating of java classes - var filter = DescriptorKindFilter.VALUES exclude SamConstructorDescriptorKindExclude + val filter = DescriptorKindFilter.VALUES exclude SamConstructorDescriptorKindExclude - if (smartCompletion?.expectedInfos?.filterFunctionExpected()?.isNotEmpty() ?: false) { - // if function type is expected we need classes to obtain their constructors - filter = filter.withKinds(DescriptorKindFilter.NON_SINGLETON_CLASSIFIERS_MASK) + val referenceToConstructorIsApplicable = smartCompletion?.expectedInfos.orEmpty().any { + it.fuzzyType?.type?.isFunctionType == true } - filter + if (referenceToConstructorIsApplicable) { + filter.withKinds(DescriptorKindFilter.NON_SINGLETON_CLASSIFIERS_MASK) + } else { + filter + } } private val smartCompletion by lazy(LazyThreadSafetyMode.NONE) { diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/Utils.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/Utils.kt index 3f825fc500d..dc939b08185 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/Utils.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/Utils.kt @@ -335,8 +335,5 @@ fun DeclarationDescriptor.fuzzyTypesForSmartCompletion( } } -fun Collection.filterFunctionExpected() - = filter { it.fuzzyType != null && it.fuzzyType!!.type.isFunctionType } - fun Collection.filterCallableExpected() = filter { it.fuzzyType != null && ReflectionTypes.isCallableType(it.fuzzyType!!.type) }