diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt index 985779d8149..2cacbea4627 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt @@ -57,10 +57,8 @@ object InlineClassAbi { * Looking for a backing field does not work for unsigned types, which don't * contain a field. */ - fun getUnderlyingType(irClass: IrClass): IrType { - require(irClass.isInline) - return irClass.primaryConstructor!!.valueParameters[0].type - } + fun getUnderlyingType(irClass: IrClass): IrType = + irClass.singlePrimaryConstructorParameter.type /** * Returns a mangled name for a function taking inline class arguments @@ -158,8 +156,16 @@ internal val IrFunction.hasMangledParameters: Boolean internal val IrFunction.hasMangledReturnType: Boolean get() = returnType.erasedUpperBound.isInline && parentClassOrNull?.isFileClass != true +private val IrClass.singlePrimaryConstructorParameter: IrValueParameter + get() { + require(isInline) { "Not an inline class: ${render()} "} + val primaryConstructor = primaryConstructor ?: error("Inline class has no primary constructor: ${render()}") + return primaryConstructor.valueParameters.singleOrNull() + ?: error("Inline class primary constructor should have one parameter: ${primaryConstructor.render()}") + } + internal val IrClass.inlineClassFieldName: Name - get() = primaryConstructor!!.valueParameters.single().name + get() = singlePrimaryConstructorParameter.name val IrFunction.isInlineClassFieldGetter: Boolean get() = (parent as? IrClass)?.isInline == true && this is IrSimpleFunction && extensionReceiverParameter == null && @@ -174,4 +180,4 @@ val IrFunction.isInlineCallableReference: Boolean val IrType.isMappedToPrimitive: Boolean get() = erasedUpperBound.isInline && !(isNullable() && makeNotNull().unboxInlineClass().isNullable()) && - makeNotNull().unboxInlineClass().isPrimitiveType() \ No newline at end of file + makeNotNull().unboxInlineClass().isPrimitiveType()