Smart cast to not null should affect flexible types too

This commit is contained in:
Valentin Kipyatkov
2016-05-11 19:54:17 +03:00
parent 5ee33e6ad5
commit 568195bb34
@@ -18,15 +18,13 @@ package org.jetbrains.kotlin.resolve.calls.smartcasts
import com.google.common.collect.*
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.resolve.calls.smartcasts.Nullability.NOT_NULL
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.TypeUtils
import org.jetbrains.kotlin.types.typeUtil.*
import org.jetbrains.kotlin.types.isFlexible
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
import java.util.*
import org.jetbrains.kotlin.resolve.calls.smartcasts.Nullability.NOT_NULL
internal class DelegatingDataFlowInfo private constructor(
private val parent: DataFlowInfo?,
private val nullabilityInfo: ImmutableMap<DataFlowValue, Nullability>,
@@ -104,10 +102,13 @@ internal class DelegatingDataFlowInfo private constructor(
}
val enrichedTypes = Sets.newHashSetWithExpectedSize<KotlinType>(types.size + 1)
val originalType = key.type
if (originalType.isMarkedNullable) {
enrichedTypes.add(TypeUtils.makeNotNullable(originalType))
val notNullable = TypeUtils.makeNotNullable(originalType)
if (notNullable != originalType) {
enrichedTypes.add(notNullable)
}
for (type in types) {
enrichedTypes.add(TypeUtils.makeNotNullable(type))
}