From ab563bd89139dd13d9888c9b1830afb8db3dcc45 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 7 May 2014 17:49:10 +0400 Subject: [PATCH] Added utility extension methods to not use TypeUtils --- .../jet/plugin/completion/smart/SmartCompletion.kt | 3 ++- .../jetbrains/jet/plugin/completion/smart/StaticMembers.kt | 6 ++---- .../org/jetbrains/jet/plugin/completion/smart/ThisItems.kt | 4 ++-- .../jet/plugin/completion/smart/TypeInstantiationItems.kt | 4 ++-- .../jet/plugin/completion/smart/TypesWithAutoCasts.kt | 6 +++--- idea/src/org/jetbrains/jet/plugin/util/TypeUtils.kt | 7 +++++++ 6 files changed, 18 insertions(+), 12 deletions(-) create mode 100644 idea/src/org/jetbrains/jet/plugin/util/TypeUtils.kt diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt index e17c6f7c946..88ec2252ee7 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt @@ -27,6 +27,7 @@ import com.intellij.codeInsight.completion.* import java.util.* import org.jetbrains.jet.plugin.completion.* import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns +import org.jetbrains.jet.plugin.util.makeNotNullable class SmartCompletion(val expression: JetSimpleNameExpression, val resolveSession: ResolveSessionForBodies, @@ -87,7 +88,7 @@ class SmartCompletion(val expression: JetSimpleNameExpression, if (itemsToSkip.contains(descriptor)) continue val types = typesWithAutoCasts(descriptor) - val nonNullTypes = types.map { TypeUtils.makeNotNullable(it) } + val nonNullTypes = types.map { it.makeNotNullable() } val classifier = { (expectedInfo: ExpectedInfo) -> when { types.any { it.isSubtypeOf(expectedInfo.`type`) } -> ExpectedInfoClassification.MATCHES diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt index 7e44b3672ec..1a6b0eb5c53 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt @@ -26,9 +26,7 @@ import org.jetbrains.jet.lang.descriptors.Visibilities import org.jetbrains.jet.lang.descriptors.CallableDescriptor import org.jetbrains.jet.lang.descriptors.ClassKind import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor -import org.jetbrains.jet.plugin.completion.DescriptorLookupConverter import org.jetbrains.jet.lang.resolve.DescriptorUtils -import org.jetbrains.jet.plugin.completion.handlers.CaretPosition import org.jetbrains.jet.lang.descriptors.FunctionDescriptor import com.intellij.codeInsight.lookup.LookupElementDecorator import com.intellij.codeInsight.lookup.LookupElementPresentation @@ -38,7 +36,7 @@ import org.jetbrains.jet.plugin.project.ResolveSessionForBodies import org.jetbrains.jet.lang.resolve.BindingContext import org.jetbrains.jet.lang.psi.JetExpression import org.jetbrains.jet.plugin.completion.ExpectedInfo -import java.util.ArrayList +import org.jetbrains.jet.plugin.util.makeNotNullable // adds java static members, enum members and members from class object class StaticMembers(val bindingContext: BindingContext, val resolveSession: ResolveSessionForBodies) { @@ -71,7 +69,7 @@ class StaticMembers(val bindingContext: BindingContext, val resolveSession: Reso expectedInfo -> when { returnType.isSubtypeOf(expectedInfo.`type`) -> ExpectedInfoClassification.MATCHES - returnType.isNullable() && TypeUtils.makeNotNullable(returnType).isSubtypeOf(expectedInfo.`type`) -> ExpectedInfoClassification.MAKE_NOT_NULLABLE + returnType.isNullable() && returnType.makeNotNullable().isSubtypeOf(expectedInfo.`type`) -> ExpectedInfoClassification.MAKE_NOT_NULLABLE else -> ExpectedInfoClassification.NOT_MATCHES } } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/ThisItems.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/ThisItems.kt index c55a2bfe4e9..0a6082f00a0 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/ThisItems.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/ThisItems.kt @@ -33,8 +33,8 @@ import org.jetbrains.jet.lang.psi.JetValueArgumentList import org.jetbrains.jet.lang.psi.JetCallExpression import org.jetbrains.jet.lang.psi.JetSimpleNameExpression import org.jetbrains.jet.lang.resolve.BindingContext -import org.jetbrains.jet.lang.types.TypeUtils import org.jetbrains.jet.plugin.completion.ExpectedInfo +import org.jetbrains.jet.plugin.util.makeNotNullable class ThisItems(val bindingContext: BindingContext) { public fun addToCollection(collection: MutableCollection, context: JetExpression, expectedInfos: Collection) { @@ -48,7 +48,7 @@ class ThisItems(val bindingContext: BindingContext) { val classifier = { (expectedInfo: ExpectedInfo) -> when { thisType.isSubtypeOf(expectedInfo.`type`) -> ExpectedInfoClassification.MATCHES - thisType.isNullable() && TypeUtils.makeNotNullable(thisType).isSubtypeOf(expectedInfo.`type`) -> ExpectedInfoClassification.MAKE_NOT_NULLABLE + thisType.isNullable() && thisType.makeNotNullable().isSubtypeOf(expectedInfo.`type`) -> ExpectedInfoClassification.MAKE_NOT_NULLABLE else -> ExpectedInfoClassification.NOT_MATCHES } } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt index 3b051841d0d..0dc8370318d 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt @@ -18,7 +18,6 @@ package org.jetbrains.jet.plugin.completion.smart import com.intellij.codeInsight.lookup.LookupElement import org.jetbrains.jet.lang.types.JetType -import org.jetbrains.jet.lang.types.TypeUtils import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns import org.jetbrains.jet.lang.descriptors.ClassDescriptor import org.jetbrains.jet.renderer.DescriptorRenderer @@ -37,12 +36,13 @@ import org.jetbrains.jet.plugin.completion.* import org.jetbrains.jet.plugin.completion.handlers.CaretPosition import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor import org.jetbrains.jet.lang.descriptors.Visibilities +import org.jetbrains.jet.plugin.util.makeNotNullable class TypeInstantiationItems(val bindingContext: BindingContext, val resolveSession: ResolveSessionForBodies, val visibilityFilter: (DeclarationDescriptor) -> Boolean) { public fun addToCollection(collection: MutableCollection, expectedInfos: Collection) { - val expectedInfosGrouped: Map> = expectedInfos.groupBy { TypeUtils.makeNotNullable(it.`type`) } + val expectedInfosGrouped: Map> = expectedInfos.groupBy { it.`type`.makeNotNullable() } for ((jetType, types) in expectedInfosGrouped) { val tail = mergeTails(types.map { it.tail }) addToCollection(collection, jetType, tail) diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/TypesWithAutoCasts.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/TypesWithAutoCasts.kt index fc357ce9e2c..bf14eb60c63 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/TypesWithAutoCasts.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/TypesWithAutoCasts.kt @@ -22,7 +22,6 @@ import org.jetbrains.jet.lang.types.JetType import org.jetbrains.jet.lang.descriptors.VariableDescriptor import org.jetbrains.jet.lang.descriptors.CallableDescriptor import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns -import org.jetbrains.jet.lang.types.TypeUtils import org.jetbrains.jet.lang.descriptors.ClassDescriptor import org.jetbrains.jet.lang.descriptors.ClassKind import java.util.Collections @@ -35,6 +34,7 @@ import org.jetbrains.jet.lang.resolve.calls.autocasts.Nullability import java.util.HashSet import org.jetbrains.jet.lang.resolve.BindingContext import org.jetbrains.jet.lang.resolve.scopes.receivers.ThisReceiver +import org.jetbrains.jet.plugin.util.makeNotNullable class TypesWithAutoCasts(val bindingContext: BindingContext) { public fun calculate(expression: JetExpression, receiver: JetExpression?): (DeclarationDescriptor) -> Iterable { @@ -50,8 +50,8 @@ class TypesWithAutoCasts(val bindingContext: BindingContext) { return listOf() } if (descriptor is VariableDescriptor) { - if (notNullVariables.contains(descriptor) && returnType != null) { - returnType = TypeUtils.makeNotNullable(returnType!!) + if (notNullVariables.contains(descriptor)) { + returnType = returnType?.makeNotNullable() } val autoCastTypes = variableToTypes[descriptor] diff --git a/idea/src/org/jetbrains/jet/plugin/util/TypeUtils.kt b/idea/src/org/jetbrains/jet/plugin/util/TypeUtils.kt new file mode 100644 index 00000000000..ff6017a24e4 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/util/TypeUtils.kt @@ -0,0 +1,7 @@ +package org.jetbrains.jet.plugin.util + +import org.jetbrains.jet.lang.types.JetType +import org.jetbrains.jet.lang.types.TypeUtils + +fun JetType.makeNullable() = TypeUtils.makeNullable(this) +fun JetType.makeNotNullable() = TypeUtils.makeNotNullable(this)