diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 85e4d928954..c4b58c26368 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -397,16 +397,7 @@ class Fir2IrDeclarationStorage( callablesGenerator.createIrConstructor(fir, parent as IrClass, predefinedOrigin = origin) }, createIrLazyDeclaration = { signature, lazyParent, declarationOrigin -> - val symbol = Fir2IrConstructorSymbol(signature) - val irConstructor = fir.convertWithOffsets { startOffset, endOffset -> - symbolTable.declareConstructor(signature, { symbol }) { - Fir2IrLazyConstructor( - components, startOffset, endOffset, declarationOrigin, fir, symbol - ).apply { - parent = lazyParent - } - } - } + val irConstructor = lazyDeclarationsGenerator.createIrLazyConstructor(fir, signature, declarationOrigin, lazyParent) constructorCache[fir] = irConstructor // NB: this is needed to prevent recursions in case of self bounds (irConstructor as Fir2IrLazyConstructor).prepareTypeParameters() @@ -415,6 +406,7 @@ class Fir2IrDeclarationStorage( ) as IrConstructorSymbol } + // ------------------------------------ properties ------------------------------------ fun getOrCreateIrProperty( diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrLazyDeclarationsGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrLazyDeclarationsGenerator.kt index 36d9dc23ea6..665d3b050e3 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrLazyDeclarationsGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrLazyDeclarationsGenerator.kt @@ -9,17 +9,16 @@ import org.jetbrains.kotlin.fir.backend.Fir2IrComponents import org.jetbrains.kotlin.fir.backend.convertWithOffsets import org.jetbrains.kotlin.fir.backend.irOrigin import org.jetbrains.kotlin.fir.backend.isStubPropertyForPureField -import org.jetbrains.kotlin.fir.declarations.FirClass -import org.jetbrains.kotlin.fir.declarations.FirProperty -import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction +import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.dispatchReceiverClassLookupTagOrNull import org.jetbrains.kotlin.fir.isSubstitutionOrIntersectionOverride import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyClass +import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyConstructor import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyProperty import org.jetbrains.kotlin.fir.lazy.Fir2IrLazySimpleFunction import org.jetbrains.kotlin.fir.originalForSubstitutionOverride import org.jetbrains.kotlin.fir.resolve.providers.firProvider +import org.jetbrains.kotlin.fir.symbols.Fir2IrConstructorSymbol import org.jetbrains.kotlin.fir.symbols.Fir2IrPropertySymbol import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -90,6 +89,19 @@ class Fir2IrLazyDeclarationsGenerator(val components: Fir2IrComponents) : Fir2Ir return irProperty } + fun createIrLazyConstructor( + fir: FirConstructor, + signature: IdSignature, + declarationOrigin: IrDeclarationOrigin, + lazyParent: IrDeclarationParent, + ): IrConstructor = fir.convertWithOffsets { startOffset, endOffset -> + symbolTable.declareConstructor(signature, { Fir2IrConstructorSymbol(signature) }) { symbol -> + Fir2IrLazyConstructor(components, startOffset, endOffset, declarationOrigin, fir, symbol).apply { + parent = lazyParent + } + } + } + fun createIrLazyClass( firClass: FirRegularClass, irParent: IrDeclarationParent, diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt index 351117e9436..a5aee480df6 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt @@ -15,12 +15,12 @@ import org.jetbrains.kotlin.fir.declarations.utils.isExpect import org.jetbrains.kotlin.fir.declarations.utils.isExternal import org.jetbrains.kotlin.fir.declarations.utils.isInline import org.jetbrains.kotlin.fir.declarations.utils.visibility -import org.jetbrains.kotlin.fir.symbols.Fir2IrConstructorSymbol import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrConstructorCall +import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.isAnnotationClass import org.jetbrains.kotlin.ir.util.parentClassOrNull @@ -35,7 +35,7 @@ class Fir2IrLazyConstructor( override val endOffset: Int, override var origin: IrDeclarationOrigin, override val fir: FirConstructor, - override val symbol: Fir2IrConstructorSymbol, + override val symbol: IrConstructorSymbol, ) : IrConstructor(), AbstractFir2IrLazyDeclaration, Fir2IrTypeParametersContainer, Fir2IrComponents by components { init {