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 com.google.common.collect.*
import org.jetbrains.kotlin.builtins.KotlinBuiltIns 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.KotlinType
import org.jetbrains.kotlin.types.TypeUtils 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 java.util.*
import org.jetbrains.kotlin.resolve.calls.smartcasts.Nullability.NOT_NULL
internal class DelegatingDataFlowInfo private constructor( internal class DelegatingDataFlowInfo private constructor(
private val parent: DataFlowInfo?, private val parent: DataFlowInfo?,
private val nullabilityInfo: ImmutableMap<DataFlowValue, Nullability>, private val nullabilityInfo: ImmutableMap<DataFlowValue, Nullability>,
@@ -104,10 +102,13 @@ internal class DelegatingDataFlowInfo private constructor(
} }
val enrichedTypes = Sets.newHashSetWithExpectedSize<KotlinType>(types.size + 1) val enrichedTypes = Sets.newHashSetWithExpectedSize<KotlinType>(types.size + 1)
val originalType = key.type val originalType = key.type
if (originalType.isMarkedNullable) { val notNullable = TypeUtils.makeNotNullable(originalType)
enrichedTypes.add(TypeUtils.makeNotNullable(originalType)) if (notNullable != originalType) {
enrichedTypes.add(notNullable)
} }
for (type in types) { for (type in types) {
enrichedTypes.add(TypeUtils.makeNotNullable(type)) enrichedTypes.add(TypeUtils.makeNotNullable(type))
} }