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:
Alexander Udalov
2016-03-14 14:44:04 +03:00
parent e308f2acdb
commit c18fab82e5
32 changed files with 73 additions and 87 deletions
@@ -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)
@@ -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> {
@@ -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
@@ -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
@@ -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
@@ -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) }