Corrected usages of isNullableType/isMarkedNullable
This commit is contained in:
@@ -42,7 +42,7 @@ fun CallableDescriptor.fuzzyExtensionReceiverType(): FuzzyType? {
|
||||
|
||||
fun FuzzyType.makeNotNullable() = FuzzyType(type.makeNotNullable(), freeParameters)
|
||||
fun FuzzyType.makeNullable() = FuzzyType(type.makeNullable(), freeParameters)
|
||||
fun FuzzyType.isNullable() = type.isMarkedNullable()
|
||||
fun FuzzyType.nullability() = type.nullability()
|
||||
|
||||
class FuzzyType(
|
||||
val type: JetType,
|
||||
|
||||
@@ -29,6 +29,7 @@ import org.jetbrains.jet.lang.types.isFlexible
|
||||
import org.jetbrains.jet.lang.types.flexibility
|
||||
import java.util.LinkedHashSet
|
||||
import org.jetbrains.jet.lang.types.isDynamic
|
||||
import org.jetbrains.jet.lang.types.isNullabilityFlexible
|
||||
|
||||
fun JetType.makeNullable() = TypeUtils.makeNullable(this)
|
||||
fun JetType.makeNotNullable() = TypeUtils.makeNotNullable(this)
|
||||
@@ -78,4 +79,18 @@ public fun JetType.getAllReferencedTypes(): Set<JetType> {
|
||||
|
||||
addType(this)
|
||||
return types
|
||||
}
|
||||
|
||||
public enum class TypeNullability {
|
||||
NOT_NULL
|
||||
NULLABLE
|
||||
FLEXIBLE
|
||||
}
|
||||
|
||||
public fun JetType.nullability(): TypeNullability {
|
||||
return when {
|
||||
isNullabilityFlexible() -> TypeNullability.FLEXIBLE
|
||||
TypeUtils.isNullableType(this) -> TypeNullability.NULLABLE
|
||||
else -> TypeNullability.NOT_NULL
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,6 @@ import org.jetbrains.jet.lang.resolve.calls.smartcasts.DataFlowInfo
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope
|
||||
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor
|
||||
import org.jetbrains.jet.lang.resolve.calls.smartcasts.SmartCastUtils
|
||||
import org.jetbrains.jet.lang.types.TypeUtils
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
|
||||
|
||||
public enum class CallType {
|
||||
@@ -79,7 +78,7 @@ public fun CallableDescriptor.substituteExtensionIfCallable(
|
||||
.map {
|
||||
var substitutor = extensionReceiverType.checkIsSuperTypeOf(it)
|
||||
// check if we may fail due to receiver expression being nullable
|
||||
if (substitutor == null && TypeUtils.isNullableType(it) && !TypeUtils.isNullableType(extensionReceiverType.type)) {
|
||||
if (substitutor == null && it.nullability() == TypeNullability.NULLABLE && extensionReceiverType.nullability() == TypeNullability.NOT_NULL) {
|
||||
substitutor = extensionReceiverType.checkIsSuperTypeOf(it.makeNotNullable())
|
||||
}
|
||||
substitutor
|
||||
|
||||
Reference in New Issue
Block a user