Simplify and rename function type utilities
- isFunctionType -> change the only usage in TracingStrategyForInvoke to check for exact function type - isExtensionFunctionType -> change all usages to check for exact extension function type because extension function types are uninheritable in Kotlin - isExactFunctionType -> isNonExtensionFunctionType - isExactExtensionFunctionType -> isExtensionFunctionType - isExactFunctionOrExtensionFunctionType -> isFunctionType - isFunctionOrExtensionFunctionType -> isFunctionTypeOrSubtype
This commit is contained in:
@@ -24,7 +24,7 @@ import com.intellij.patterns.ElementPattern
|
||||
import com.intellij.patterns.StandardPatterns
|
||||
import com.intellij.psi.PsiDocumentManager
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.isExactFunctionOrExtensionFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.idea.KotlinIcons
|
||||
import org.jetbrains.kotlin.idea.completion.handlers.CastReceiverInsertHandler
|
||||
@@ -299,7 +299,7 @@ fun breakOrContinueExpressionItems(position: KtElement, breakOrContinue: String)
|
||||
fun BasicLookupElementFactory.createLookupElementForType(type: KotlinType): LookupElement? {
|
||||
if (type.isError) return null
|
||||
|
||||
if (type.isExactFunctionOrExtensionFunctionType) {
|
||||
if (type.isFunctionType) {
|
||||
val text = IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.renderType(type)
|
||||
val baseLookupElement = LookupElementBuilder.create(text).withIcon(KotlinIcons.LAMBDA)
|
||||
return BaseTypeLookupElement(type, baseLookupElement)
|
||||
|
||||
+2
-2
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.idea.completion
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.util.SmartList
|
||||
import org.jetbrains.kotlin.builtins.isFunctionOrExtensionFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isFunctionTypeOrSubtype
|
||||
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
||||
import org.jetbrains.kotlin.idea.codeInsight.ReferenceVariantsHelper
|
||||
import org.jetbrains.kotlin.idea.util.CallTypeAndReceiver
|
||||
@@ -39,7 +39,7 @@ class RealContextVariablesProvider(
|
||||
) : ContextVariablesProvider {
|
||||
|
||||
val allFunctionTypeVariables by lazy {
|
||||
collectVariables().filter { it.type.isFunctionOrExtensionFunctionType }
|
||||
collectVariables().filter { it.type.isFunctionTypeOrSubtype }
|
||||
}
|
||||
|
||||
private fun collectVariables(): Collection<VariableDescriptor> {
|
||||
|
||||
+3
-3
@@ -20,7 +20,7 @@ import com.intellij.codeInsight.completion.InsertHandler
|
||||
import com.intellij.codeInsight.lookup.LookupElement
|
||||
import org.jetbrains.kotlin.builtins.getParameterTypeProjectionsFromFunctionType
|
||||
import org.jetbrains.kotlin.builtins.getReturnTypeFromFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isExactFunctionOrExtensionFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.idea.completion.handlers.*
|
||||
import org.jetbrains.kotlin.idea.core.ExpectedInfo
|
||||
@@ -53,7 +53,7 @@ class InsertHandlerProvider(
|
||||
1 -> {
|
||||
if (callType != CallType.SUPER_MEMBERS) { // for super call we don't suggest to generate "super.foo { ... }" (seems to be non-typical use)
|
||||
val parameterType = parameters.single().type
|
||||
if (parameterType.isExactFunctionOrExtensionFunctionType) {
|
||||
if (parameterType.isFunctionType) {
|
||||
val parameterCount = getParameterTypeProjectionsFromFunctionType(parameterType).size
|
||||
if (parameterCount <= 1) {
|
||||
// otherwise additional item with lambda template is to be added
|
||||
@@ -98,7 +98,7 @@ class InsertHandlerProvider(
|
||||
potentiallyInferred.add(descriptor)
|
||||
}
|
||||
|
||||
if (type.isExactFunctionOrExtensionFunctionType && getParameterTypeProjectionsFromFunctionType(type).size <= 1) {
|
||||
if (type.isFunctionType && getParameterTypeProjectionsFromFunctionType(type).size <= 1) {
|
||||
// do not rely on inference from input of function type with one or no arguments - use only return type of functional type
|
||||
addPotentiallyInferred(getReturnTypeFromFunctionType(type))
|
||||
return
|
||||
|
||||
+3
-3
@@ -23,7 +23,7 @@ import com.intellij.codeInsight.lookup.LookupElementPresentation
|
||||
import com.intellij.codeInsight.lookup.impl.LookupCellRenderer
|
||||
import com.intellij.util.SmartList
|
||||
import org.jetbrains.kotlin.builtins.getParameterTypeProjectionsFromFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isExactFunctionOrExtensionFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.idea.completion.handlers.GenerateLambdaInfo
|
||||
import org.jetbrains.kotlin.idea.completion.handlers.KotlinFunctionInsertHandler
|
||||
@@ -68,7 +68,7 @@ class LookupElementFactory(
|
||||
companion object {
|
||||
fun hasSingleFunctionTypeParameter(descriptor: FunctionDescriptor): Boolean {
|
||||
val parameter = descriptor.original.valueParameters.singleOrNull() ?: return false
|
||||
return parameter.type.isExactFunctionOrExtensionFunctionType
|
||||
return parameter.type.isFunctionType
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ class LookupElementFactory(
|
||||
val lastParameter = descriptor.valueParameters.lastOrNull() ?: return
|
||||
if (!descriptor.valueParameters.all { it == lastParameter || it.hasDefaultValue() }) return
|
||||
|
||||
if (lastParameter.original.type.isExactFunctionOrExtensionFunctionType) {
|
||||
if (lastParameter.original.type.isFunctionType) {
|
||||
val isSingleParameter = descriptor.valueParameters.size == 1
|
||||
|
||||
val parameterType = lastParameter.type
|
||||
|
||||
+2
-2
@@ -26,7 +26,7 @@ import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.PsiDocumentManager
|
||||
import com.intellij.psi.util.PsiTreeUtil
|
||||
import org.jetbrains.kotlin.builtins.getParameterTypeProjectionsFromFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isExactFunctionOrExtensionFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||
import org.jetbrains.kotlin.idea.core.ExpectedInfos
|
||||
import org.jetbrains.kotlin.idea.core.KotlinNameSuggester
|
||||
@@ -84,7 +84,7 @@ private fun needExplicitParameterTypes(context: InsertionContext, placeholderRan
|
||||
|
||||
val functionTypes = expectedInfos
|
||||
.mapNotNull { it.fuzzyType?.type }
|
||||
.filter(KotlinType::isExactFunctionOrExtensionFunctionType)
|
||||
.filter(KotlinType::isFunctionType)
|
||||
.toSet()
|
||||
if (functionTypes.size <= 1) return false
|
||||
|
||||
|
||||
+2
-2
@@ -26,7 +26,7 @@ import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.psi.search.searches.ClassInheritorsSearch
|
||||
import org.jetbrains.kotlin.asJava.toLightClass
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.isExactFunctionOrExtensionFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||
@@ -81,7 +81,7 @@ class TypeInstantiationItems(
|
||||
fuzzyType: FuzzyType,
|
||||
tail: Tail?
|
||||
) {
|
||||
if (fuzzyType.type.isExactFunctionOrExtensionFunctionType) return // do not show "object: ..." for function types
|
||||
if (fuzzyType.type.isFunctionType) return // do not show "object: ..." for function types
|
||||
|
||||
val classifier = fuzzyType.type.constructor.declarationDescriptor
|
||||
if (classifier !is ClassDescriptor) return
|
||||
|
||||
@@ -23,7 +23,7 @@ import com.intellij.codeInsight.lookup.LookupElementDecorator
|
||||
import com.intellij.codeInsight.lookup.LookupElementPresentation
|
||||
import com.intellij.openapi.util.Key
|
||||
import org.jetbrains.kotlin.builtins.ReflectionTypes
|
||||
import org.jetbrains.kotlin.builtins.isExactFunctionOrExtensionFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor
|
||||
import org.jetbrains.kotlin.idea.completion.handlers.WithExpressionPrefixInsertHandler
|
||||
@@ -308,7 +308,7 @@ fun DeclarationDescriptor.fuzzyTypesForSmartCompletion(
|
||||
}
|
||||
|
||||
fun Collection<ExpectedInfo>.filterFunctionExpected()
|
||||
= filter { it.fuzzyType != null && it.fuzzyType!!.type.isExactFunctionOrExtensionFunctionType }
|
||||
= filter { it.fuzzyType != null && it.fuzzyType!!.type.isFunctionType }
|
||||
|
||||
fun Collection<ExpectedInfo>.filterCallableExpected()
|
||||
= filter { it.fuzzyType != null && ReflectionTypes.isCallableType(it.fuzzyType!!.type) }
|
||||
|
||||
Reference in New Issue
Block a user