diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt index 09ffc2c7bf8..d8c153ce5fe 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt @@ -26,7 +26,6 @@ class IrConstructorImpl @IrImplementationDetail constructor( override val symbol: IrConstructorSymbol, override var name: Name, override var visibility: DescriptorVisibility, - returnType: IrType, override var isInline: Boolean, override var isExternal: Boolean, override var isPrimary: Boolean, @@ -41,13 +40,6 @@ class IrConstructorImpl @IrImplementationDetail constructor( override lateinit var parent: IrDeclarationParent override var annotations: List = emptyList() - override var returnType: IrType = returnType - get() = if (field === IrUninitializedType) { - throw ReturnTypeIsNotInitializedException(this) - } else { - field - } - override var typeParameters: List = emptyList() override var dispatchReceiverParameter: IrValueParameter? = null @@ -55,6 +47,8 @@ class IrConstructorImpl @IrImplementationDetail constructor( override var contextReceiverParametersCount: Int = 0 override var valueParameters: List = emptyList() + override lateinit var returnType: IrType + override var body: IrBody? = null override var metadata: MetadataSource? = null diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt index 861317980a9..98419ac09f6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.types.IrType +import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource import org.jetbrains.kotlin.types.Variance @@ -83,9 +84,13 @@ abstract class AbstractIrFactoryImpl : IrFactory { containerSource: DeserializedContainerSource?, ): IrConstructor = IrConstructorImpl( - startOffset, endOffset, origin, symbol, name, visibility, returnType, isInline, isExternal, isPrimary, isExpect, + startOffset, endOffset, origin, symbol, name, visibility, isInline, isExternal, isPrimary, isExpect, containerSource, factory = this - ) + ).apply { + if (returnType != IrUninitializedType) { + this.returnType = returnType + } + } override fun createEnumEntry( startOffset: Int, @@ -137,10 +142,14 @@ abstract class AbstractIrFactoryImpl : IrFactory { isFakeOverride: Boolean, ): IrSimpleFunction = IrFunctionImpl( - startOffset, endOffset, origin, symbol, name, visibility, modality, returnType, + startOffset, endOffset, origin, symbol, name, visibility, modality, isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, isFakeOverride, containerSource, factory = this - ) + ).apply { + if (returnType != IrUninitializedType) { + this.returnType = returnType + } + } override fun createFunctionWithLateBinding( startOffset: Int, @@ -166,7 +175,6 @@ abstract class AbstractIrFactoryImpl : IrFactory { name = name, visibility = visibility, modality = modality, - returnType = returnType, isInline = isInline, isExternal = isExternal, isTailrec = isTailrec, @@ -176,7 +184,11 @@ abstract class AbstractIrFactoryImpl : IrFactory { isExpect = isExpect, isFakeOverride = isFakeOverride, factory = this - ) + ).apply { + if (returnType != IrUninitializedType) { + this.returnType = returnType + } + } override fun createLocalDelegatedProperty( startOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt index a73486f0c39..576d8e3a315 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt @@ -32,7 +32,6 @@ class IrFunctionImpl @IrImplementationDetail constructor( override var name: Name, override var visibility: DescriptorVisibility, override var modality: Modality, - returnType: IrType, override var isInline: Boolean, override var isExternal: Boolean, override var isTailrec: Boolean, @@ -55,13 +54,6 @@ class IrFunctionImpl @IrImplementationDetail constructor( override lateinit var parent: IrDeclarationParent override var annotations: List = emptyList() - override var returnType: IrType = returnType - get() = if (field === IrUninitializedType) { - throw ReturnTypeIsNotInitializedException(this) - } else { - field - } - override var typeParameters: List = emptyList() override var dispatchReceiverParameter: IrValueParameter? = null @@ -70,6 +62,8 @@ class IrFunctionImpl @IrImplementationDetail constructor( override var contextReceiverParametersCount: Int = 0 + override lateinit var returnType: IrType + override var body: IrBody? = null override var metadata: MetadataSource? = null diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionWithLateBindingImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionWithLateBindingImpl.kt index 6d9d31eaa21..05c31c11594 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionWithLateBindingImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionWithLateBindingImpl.kt @@ -28,7 +28,6 @@ class IrFunctionWithLateBindingImpl @IrImplementationDetail constructor( override var name: Name, override var visibility: DescriptorVisibility, override var modality: Modality, - returnType: IrType, override var isInline: Boolean, override var isExternal: Boolean, override var isTailrec: Boolean, @@ -66,13 +65,6 @@ class IrFunctionWithLateBindingImpl @IrImplementationDetail constructor( override var annotations: List = emptyList() - override var returnType: IrType = returnType - get() = if (field === IrUninitializedType) { - throw ReturnTypeIsNotInitializedException(this) - } else { - field - } - override var typeParameters: List = emptyList() override var dispatchReceiverParameter: IrValueParameter? = null @@ -81,6 +73,8 @@ class IrFunctionWithLateBindingImpl @IrImplementationDetail constructor( override var contextReceiverParametersCount: Int = 0 + override lateinit var returnType: IrType + override var body: IrBody? = null override var metadata: MetadataSource? = null