diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt index df640b459e8..fb57d90f06b 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt @@ -60,10 +60,6 @@ internal sealed class MetafactoryArgumentsResult { // TODO make sure indy and Kotlin bytecode inliner work well together object InliningHazard : Failure() - // Resulting object should be Serializable. - // TODO implement serialization support required by j.l.invoke.LambdaMetafactory - object SerializationHazard : Failure() - // There's something special about a function we are referencing. // Wrapping it into a proxy local function might help. object FunctionHazard : Failure() @@ -549,7 +545,9 @@ internal class LambdaMetafactoryArgumentsBuilder( ) } - private fun computeParameterTypeAdaptationConstraint(adapteeType: IrType, expectedType: IrType): TypeAdaptationConstraint? { + private fun computeParameterTypeAdaptationConstraint(adapteeType0: IrType, expectedType0: IrType): TypeAdaptationConstraint? { + val adapteeType = adapteeType0.unwrapDefinitelyNotNullType() + val expectedType = expectedType0.unwrapDefinitelyNotNullType() if (adapteeType !is IrSimpleType) throw AssertionError("Simple type expected: ${adapteeType.render()}") if (expectedType !is IrSimpleType) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt index 8d73ba75cb5..d249723a9b2 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt @@ -1134,11 +1134,13 @@ private fun getContainingDeclaration(declaration: IrDeclaration): DeclarationDes fun IrType.toIrBasedKotlinType(): KotlinType = when (this) { is IrSimpleType -> makeKotlinType(classifier, arguments, hasQuestionMark) - is IrDefinitelyNotNullType -> - DefinitelyNotNullType.makeDefinitelyNotNull(this.original.toIrBasedKotlinType().unwrap()) - ?: throw AssertionError("Can't reconstruct a definitely not-null type: ${this.render()}") + is IrDefinitelyNotNullType -> { + val kotlinType = this.original.toIrBasedKotlinType() + DefinitelyNotNullType.makeDefinitelyNotNull(kotlinType.unwrap()) + ?: kotlinType + } else -> - TODO(toString()) + throw AssertionError("Unexpected type: $this = ${this.render()}") } private fun makeKotlinType( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeUtils.kt index 1c12671a0ed..9916e8ae419 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeUtils.kt @@ -70,3 +70,9 @@ fun IrType.toArrayOrPrimitiveArrayType(irBuiltIns: IrBuiltIns): IrType = } else { irBuiltIns.arrayClass.typeWith(this) } + +fun IrType.unwrapDefinitelyNotNullType(): IrType = + if (this is IrDefinitelyNotNullType) + this.original.unwrapDefinitelyNotNullType() + else + this