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 }