[FIR2IR] Make parent of lazy declaration non-lateinit

There is no actual sense to have parent as a lateinit var, because in
  all places it is initialized right after declaration creation
This commit is contained in:
Dmitriy Novozhilov
2023-11-14 15:49:35 +02:00
committed by Space Team
parent bb892f10f8
commit f0f8a9728e
7 changed files with 40 additions and 43 deletions
@@ -30,9 +30,8 @@ class Fir2IrLazyDeclarationsGenerator(val components: Fir2IrComponents) : Fir2Ir
val isFakeOverride = fir.isFakeOverride(firContainingClass) val isFakeOverride = fir.isFakeOverride(firContainingClass)
Fir2IrLazySimpleFunction( Fir2IrLazySimpleFunction(
components, startOffset, endOffset, declarationOrigin, components, startOffset, endOffset, declarationOrigin,
fir, firContainingClass, symbol, isFakeOverride fir, firContainingClass, symbol, lazyParent, isFakeOverride
).apply { ).apply {
this.parent = lazyParent
prepareTypeParameters() prepareTypeParameters()
} }
} }
@@ -54,10 +53,8 @@ class Fir2IrLazyDeclarationsGenerator(val components: Fir2IrComponents) : Fir2Ir
val originForProperty = if (isPropertyForField) IrDeclarationOrigin.DEFINED else declarationOrigin val originForProperty = if (isPropertyForField) IrDeclarationOrigin.DEFINED else declarationOrigin
return fir.convertWithOffsets { startOffset, endOffset -> return fir.convertWithOffsets { startOffset, endOffset ->
Fir2IrLazyProperty( Fir2IrLazyProperty(
components, startOffset, endOffset, originForProperty, fir, firContainingClass, symbols, isFakeOverride components, startOffset, endOffset, originForProperty, fir, firContainingClass, symbols, lazyParent, isFakeOverride
).apply { )
this.parent = lazyParent
}
} }
} }
@@ -67,9 +64,7 @@ class Fir2IrLazyDeclarationsGenerator(val components: Fir2IrComponents) : Fir2Ir
declarationOrigin: IrDeclarationOrigin, declarationOrigin: IrDeclarationOrigin,
lazyParent: IrDeclarationParent, lazyParent: IrDeclarationParent,
): IrConstructor = fir.convertWithOffsets { startOffset, endOffset -> ): IrConstructor = fir.convertWithOffsets { startOffset, endOffset ->
Fir2IrLazyConstructor(components, startOffset, endOffset, declarationOrigin, fir, symbol).apply { Fir2IrLazyConstructor(components, startOffset, endOffset, declarationOrigin, fir, symbol, lazyParent)
parent = lazyParent
}
} }
fun createIrLazyClass( fun createIrLazyClass(
@@ -78,9 +73,7 @@ class Fir2IrLazyDeclarationsGenerator(val components: Fir2IrComponents) : Fir2Ir
symbol: IrClassSymbol symbol: IrClassSymbol
): Fir2IrLazyClass = firClass.convertWithOffsets { startOffset, endOffset -> ): Fir2IrLazyClass = firClass.convertWithOffsets { startOffset, endOffset ->
val firClassOrigin = firClass.irOrigin(session.firProvider) val firClassOrigin = firClass.irOrigin(session.firProvider)
Fir2IrLazyClass(components, startOffset, endOffset, firClassOrigin, firClass, symbol).apply { Fir2IrLazyClass(components, startOffset, endOffset, firClassOrigin, firClass, symbol, irParent)
parent = irParent
}
} }
fun createIrLazyField( fun createIrLazyField(
@@ -37,12 +37,12 @@ abstract class AbstractFir2IrLazyFunction<F : FirCallableDeclaration>(
override val endOffset: Int, override val endOffset: Int,
override var origin: IrDeclarationOrigin, override var origin: IrDeclarationOrigin,
override val symbol: IrSimpleFunctionSymbol, override val symbol: IrSimpleFunctionSymbol,
override var parent: IrDeclarationParent,
override var isFakeOverride: Boolean override var isFakeOverride: Boolean
) : AbstractIrLazyFunction(), AbstractFir2IrLazyDeclaration<F>, Fir2IrTypeParametersContainer, IrLazyFunctionBase, ) : AbstractIrLazyFunction(), AbstractFir2IrLazyDeclaration<F>, Fir2IrTypeParametersContainer, IrLazyFunctionBase,
Fir2IrComponents by components { Fir2IrComponents by components {
override lateinit var typeParameters: List<IrTypeParameter> override lateinit var typeParameters: List<IrTypeParameter>
override lateinit var parent: IrDeclarationParent
override var isTailrec: Boolean override var isTailrec: Boolean
get() = fir.isTailRec get() = fir.isTailRec
@@ -40,6 +40,7 @@ class Fir2IrLazyClass(
override var origin: IrDeclarationOrigin, override var origin: IrDeclarationOrigin,
override val fir: FirRegularClass, override val fir: FirRegularClass,
override val symbol: IrClassSymbol, override val symbol: IrClassSymbol,
override var parent: IrDeclarationParent,
) : IrClass(), AbstractFir2IrLazyDeclaration<FirRegularClass>, Fir2IrTypeParametersContainer, ) : IrClass(), AbstractFir2IrLazyDeclaration<FirRegularClass>, Fir2IrTypeParametersContainer,
IrMaybeDeserializedClass, DeserializableClass, Fir2IrComponents by components { IrMaybeDeserializedClass, DeserializableClass, Fir2IrComponents by components {
init { init {
@@ -49,7 +50,6 @@ class Fir2IrLazyClass(
override var annotations: List<IrConstructorCall> by createLazyAnnotations() override var annotations: List<IrConstructorCall> by createLazyAnnotations()
override lateinit var typeParameters: List<IrTypeParameter> override lateinit var typeParameters: List<IrTypeParameter>
override lateinit var parent: IrDeclarationParent
override val source: SourceElement override val source: SourceElement
get() = fir.sourceElement ?: SourceElement.NO_SOURCE get() = fir.sourceElement ?: SourceElement.NO_SOURCE
@@ -36,6 +36,7 @@ class Fir2IrLazyConstructor(
override var origin: IrDeclarationOrigin, override var origin: IrDeclarationOrigin,
override val fir: FirConstructor, override val fir: FirConstructor,
override val symbol: IrConstructorSymbol, override val symbol: IrConstructorSymbol,
override var parent: IrDeclarationParent
) : IrConstructor(), AbstractFir2IrLazyDeclaration<FirConstructor>, Fir2IrTypeParametersContainer, ) : IrConstructor(), AbstractFir2IrLazyDeclaration<FirConstructor>, Fir2IrTypeParametersContainer,
Fir2IrComponents by components { Fir2IrComponents by components {
init { init {
@@ -45,7 +46,6 @@ class Fir2IrLazyConstructor(
override var annotations: List<IrConstructorCall> by createLazyAnnotations() override var annotations: List<IrConstructorCall> by createLazyAnnotations()
override lateinit var typeParameters: List<IrTypeParameter> override lateinit var typeParameters: List<IrTypeParameter>
override lateinit var parent: IrDeclarationParent
override var isPrimary: Boolean override var isPrimary: Boolean
get() = fir.isPrimary get() = fir.isPrimary
@@ -39,6 +39,7 @@ class Fir2IrLazyProperty(
override val fir: FirProperty, override val fir: FirProperty,
val containingClass: FirRegularClass?, val containingClass: FirRegularClass?,
symbols: PropertySymbols, symbols: PropertySymbols,
override var parent: IrDeclarationParent,
override var isFakeOverride: Boolean override var isFakeOverride: Boolean
) : IrProperty(), AbstractFir2IrLazyDeclaration<FirProperty>, Fir2IrComponents by components { ) : IrProperty(), AbstractFir2IrLazyDeclaration<FirProperty>, Fir2IrComponents by components {
override val symbol: IrPropertySymbol = symbols.propertySymbol override val symbol: IrPropertySymbol = symbols.propertySymbol
@@ -49,7 +50,6 @@ class Fir2IrLazyProperty(
} }
override var annotations: List<IrConstructorCall> by createLazyAnnotations() override var annotations: List<IrConstructorCall> by createLazyAnnotations()
override lateinit var parent: IrDeclarationParent
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: PropertyDescriptor override val descriptor: PropertyDescriptor
@@ -172,18 +172,23 @@ class Fir2IrLazyProperty(
override var getter: IrSimpleFunction? by lazyVar(lock) { override var getter: IrSimpleFunction? by lazyVar(lock) {
Fir2IrLazyPropertyAccessor( Fir2IrLazyPropertyAccessor(
components, startOffset, endOffset, components, startOffset, endOffset,
when { origin = when {
origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB -> origin origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB -> origin
fir.delegate != null -> IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR fir.delegate != null -> IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR
origin == IrDeclarationOrigin.FAKE_OVERRIDE -> origin origin == IrDeclarationOrigin.FAKE_OVERRIDE -> origin
origin == IrDeclarationOrigin.DELEGATED_MEMBER -> origin origin == IrDeclarationOrigin.DELEGATED_MEMBER -> origin
fir.getter is FirDefaultPropertyGetter -> IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR fir.getter is FirDefaultPropertyGetter -> IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR
else -> origin else -> origin
}, },
fir.getter, isSetter = false, fir, containingClass, symbols.getterSymbol, isFakeOverride, this.symbol firAccessor = fir.getter,
).apply { isSetter = false,
parent = this@Fir2IrLazyProperty.parent firParentProperty = fir,
correspondingPropertySymbol = this@Fir2IrLazyProperty.symbol firParentClass = containingClass,
symbol = symbols.getterSymbol,
parent = this@Fir2IrLazyProperty.parent,
isFakeOverride = isFakeOverride,
correspondingPropertySymbol = this.symbol
).apply {
classifiersGenerator.setTypeParameters(this, this@Fir2IrLazyProperty.fir, ConversionTypeOrigin.DEFAULT) classifiersGenerator.setTypeParameters(this, this@Fir2IrLazyProperty.fir, ConversionTypeOrigin.DEFAULT)
} }
} }
@@ -192,7 +197,7 @@ class Fir2IrLazyProperty(
if (!fir.isVar) return@lazyVar null if (!fir.isVar) return@lazyVar null
Fir2IrLazyPropertyAccessor( Fir2IrLazyPropertyAccessor(
components, startOffset, endOffset, components, startOffset, endOffset,
when { origin = when {
origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB -> origin origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB -> origin
fir.delegate != null -> IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR fir.delegate != null -> IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR
origin == IrDeclarationOrigin.FAKE_OVERRIDE -> origin origin == IrDeclarationOrigin.FAKE_OVERRIDE -> origin
@@ -200,10 +205,14 @@ class Fir2IrLazyProperty(
fir.setter is FirDefaultPropertySetter -> IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR fir.setter is FirDefaultPropertySetter -> IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR
else -> origin else -> origin
}, },
fir.setter, isSetter = true, fir, containingClass, symbols.setterSymbol!!, isFakeOverride, this.symbol firAccessor = fir.setter, isSetter = true,
firParentProperty = fir,
firParentClass = containingClass,
symbol = symbols.setterSymbol!!,
parent = this@Fir2IrLazyProperty.parent,
isFakeOverride = isFakeOverride,
correspondingPropertySymbol = this.symbol
).apply { ).apply {
parent = this@Fir2IrLazyProperty.parent
correspondingPropertySymbol = this@Fir2IrLazyProperty.symbol
classifiersGenerator.setTypeParameters(this, this@Fir2IrLazyProperty.fir, ConversionTypeOrigin.SETTER) classifiersGenerator.setTypeParameters(this, this@Fir2IrLazyProperty.fir, ConversionTypeOrigin.SETTER)
} }
} }
@@ -12,10 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.utils.isInline import org.jetbrains.kotlin.fir.declarations.utils.isInline
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
@@ -37,9 +34,10 @@ class Fir2IrLazyPropertyAccessor(
private val firParentProperty: FirProperty, private val firParentProperty: FirProperty,
firParentClass: FirRegularClass?, firParentClass: FirRegularClass?,
symbol: IrSimpleFunctionSymbol, symbol: IrSimpleFunctionSymbol,
parent: IrDeclarationParent,
isFakeOverride: Boolean, isFakeOverride: Boolean,
override var correspondingPropertySymbol: IrPropertySymbol? override var correspondingPropertySymbol: IrPropertySymbol?
) : AbstractFir2IrLazyFunction<FirCallableDeclaration>(components, startOffset, endOffset, origin, symbol, isFakeOverride) { ) : AbstractFir2IrLazyFunction<FirCallableDeclaration>(components, startOffset, endOffset, origin, symbol, parent, isFakeOverride) {
init { init {
symbol.bind(this) symbol.bind(this)
} }
@@ -14,10 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.initialSignatureAttr import org.jetbrains.kotlin.fir.initialSignatureAttr
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
@@ -35,8 +32,9 @@ class Fir2IrLazySimpleFunction(
override val fir: FirSimpleFunction, override val fir: FirSimpleFunction,
firParent: FirRegularClass?, firParent: FirRegularClass?,
symbol: IrSimpleFunctionSymbol, symbol: IrSimpleFunctionSymbol,
parent: IrDeclarationParent,
isFakeOverride: Boolean isFakeOverride: Boolean
) : AbstractFir2IrLazyFunction<FirSimpleFunction>(components, startOffset, endOffset, origin, symbol, isFakeOverride) { ) : AbstractFir2IrLazyFunction<FirSimpleFunction>(components, startOffset, endOffset, origin, symbol, parent, isFakeOverride) {
init { init {
symbol.bind(this) symbol.bind(this)
classifierStorage.preCacheTypeParameters(fir, symbol) classifierStorage.preCacheTypeParameters(fir, symbol)
@@ -96,7 +94,6 @@ class Fir2IrLazySimpleFunction(
override var overriddenSymbols: List<IrSimpleFunctionSymbol> by lazyVar(lock) { override var overriddenSymbols: List<IrSimpleFunctionSymbol> by lazyVar(lock) {
if (firParent == null) return@lazyVar emptyList() if (firParent == null) return@lazyVar emptyList()
val parent = parent
if (isFakeOverride && parent is Fir2IrLazyClass) { if (isFakeOverride && parent is Fir2IrLazyClass) {
fakeOverrideGenerator.calcBaseSymbolsForFakeOverrideFunction( fakeOverrideGenerator.calcBaseSymbolsForFakeOverrideFunction(
firParent, this, fir.symbol firParent, this, fir.symbol