From f5e4c72f063608220d64da81e0fc6be5c17505fc Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Thu, 10 Feb 2022 17:49:41 +0300 Subject: [PATCH] IR fix IrType.makeNullable() for DNN type --- .../org/jetbrains/kotlin/ir/types/irTypes.kt | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt index 42068c31414..ffc33ea3b7d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt @@ -108,17 +108,28 @@ fun IrType.makeNotNull() = kotlinType = originalKotlinType?.makeNotNullable() hasQuestionMark = false } - } else + } else { this + } -fun IrType.makeNullable() = - if (this is IrSimpleType && !this.hasQuestionMark) - buildSimpleType { - kotlinType = originalKotlinType?.makeNullable() - hasQuestionMark = true +fun IrType.makeNullable(): IrType = + when (this) { + is IrSimpleType -> { + if (this.hasQuestionMark) + this + else + buildSimpleType { + kotlinType = originalKotlinType?.makeNullable() + hasQuestionMark = true + } } - else - this + is IrDefinitelyNotNullType -> { + // '{ T & Any }?' => 'T?' + this.original.makeNullable() + } + else -> + this + } @ObsoleteDescriptorBasedAPI fun IrType.toKotlinType(): KotlinType {