From 568195bb34ac4085b5511bcf39cd43bfcb187b80 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 11 May 2016 19:54:17 +0300 Subject: [PATCH] Smart cast to not null should affect flexible types too --- .../calls/smartcasts/DelegatingDataFlowInfo.kt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DelegatingDataFlowInfo.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DelegatingDataFlowInfo.kt index fadc1e42efb..0344a33fad2 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DelegatingDataFlowInfo.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DelegatingDataFlowInfo.kt @@ -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, @@ -104,10 +102,13 @@ internal class DelegatingDataFlowInfo private constructor( } val enrichedTypes = Sets.newHashSetWithExpectedSize(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)) }