From 00491a78f158063058349a644ea960144f2cfc46 Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Thu, 4 Jan 2024 10:36:55 +0100 Subject: [PATCH] [FIR] Implement canBeNull for captured type by checking its supertypes #KT-62959 --- .../jetbrains/kotlin/fir/backend/Fir2IrImplicitCastInserter.kt | 3 +++ .../providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt | 1 + 2 files changed, 4 insertions(+) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrImplicitCastInserter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrImplicitCastInserter.kt index a0f126a6636..54b9d15e671 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrImplicitCastInserter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrImplicitCastInserter.kt @@ -256,6 +256,9 @@ class Fir2IrImplicitCastInserter( } private fun ConeKotlinType.acceptsNullValues(): Boolean { + if (this is ConeCapturedType && this.constructor.projection.kind == ProjectionKind.IN) { + return constructor.projection.type!!.canBeNull(session) + } return canBeNull(session) || hasEnhancedNullability } diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt index a9f3ee5bbf7..28ecda80159 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt @@ -821,6 +821,7 @@ fun ConeKotlinType.canBeNull(session: FirSession): Boolean { it.coneType.fullyExpandedType(session).canBeNull(session) } is ConeIntersectionType -> intersectedTypes.all { it.canBeNull(session) } + is ConeCapturedType -> constructor.supertypes?.all { it.canBeNull(session) } == true else -> fullyExpandedType(session).isNullable } }