From ff3116f0ed002cfb967f12f867bd35e07e6aec5d Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Mon, 27 Jan 2020 17:27:47 +0300 Subject: [PATCH] [FIR] Support intersection types in some type context methods --- .../fir/resolve/calls/ConeInferenceContext.kt | 18 +++++------------- .../kotlin/fir/types/ConeTypeContext.kt | 5 ++++- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeInferenceContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeInferenceContext.kt index 11df93630e8..1fd7d25c6d5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeInferenceContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeInferenceContext.kt @@ -134,10 +134,10 @@ interface ConeInferenceContext : TypeSystemInferenceExtensionContext, ConeTypeCo if (predicate(this)) return true - val flexibleType = this.asFlexibleType() + val flexibleType = this as? ConeFlexibleType if (flexibleType != null - && (flexibleType.lowerBound().containsInternal(predicate, visited) - || flexibleType.upperBound().containsInternal(predicate, visited)) + && (flexibleType.lowerBound.containsInternal(predicate, visited) + || flexibleType.upperBound.containsInternal(predicate, visited)) ) { return true } @@ -148,18 +148,10 @@ interface ConeInferenceContext : TypeSystemInferenceExtensionContext, ConeTypeCo ) { return true } - /* - TODO: - TypeConstructor typeConstructor = type.getConstructor(); - if (typeConstructor instanceof IntersectionTypeConstructor) { - IntersectionTypeConstructor intersectionTypeConstructor = (IntersectionTypeConstructor) typeConstructor; - for (KotlinType supertype : intersectionTypeConstructor.getSupertypes()) { - if (contains(supertype, isSpecialType, visited)) return true; - } - return false; + if (this is ConeIntersectionType) { + return this.intersectedTypes.any { it.containsInternal(predicate, visited) } } - */ repeat(argumentsCount()) { index -> val argument = getArgument(index) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt index 4ed1d6daf0d..21fe52d3533 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt @@ -417,7 +417,10 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty if (this is ConeTypeParameterType /* || is TypeVariable */) return hasNullableSuperType(type) - // TODO: Intersection types + if (this is ConeIntersectionType && intersectedTypes.any { it.isNullableType() }) { + return true + } + return false }