[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)
Fir2IrLazySimpleFunction(
components, startOffset, endOffset, declarationOrigin,
fir, firContainingClass, symbol, isFakeOverride
fir, firContainingClass, symbol, lazyParent, isFakeOverride
).apply {
this.parent = lazyParent
prepareTypeParameters()
}
}
@@ -54,10 +53,8 @@ class Fir2IrLazyDeclarationsGenerator(val components: Fir2IrComponents) : Fir2Ir
val originForProperty = if (isPropertyForField) IrDeclarationOrigin.DEFINED else declarationOrigin
return fir.convertWithOffsets { startOffset, endOffset ->
Fir2IrLazyProperty(
components, startOffset, endOffset, originForProperty, fir, firContainingClass, symbols, isFakeOverride
).apply {
this.parent = lazyParent
}
components, startOffset, endOffset, originForProperty, fir, firContainingClass, symbols, lazyParent, isFakeOverride
)
}
}
@@ -67,9 +64,7 @@ class Fir2IrLazyDeclarationsGenerator(val components: Fir2IrComponents) : Fir2Ir
declarationOrigin: IrDeclarationOrigin,
lazyParent: IrDeclarationParent,
): IrConstructor = fir.convertWithOffsets { startOffset, endOffset ->
Fir2IrLazyConstructor(components, startOffset, endOffset, declarationOrigin, fir, symbol).apply {
parent = lazyParent
}
Fir2IrLazyConstructor(components, startOffset, endOffset, declarationOrigin, fir, symbol, lazyParent)
}
fun createIrLazyClass(
@@ -78,9 +73,7 @@ class Fir2IrLazyDeclarationsGenerator(val components: Fir2IrComponents) : Fir2Ir
symbol: IrClassSymbol
): Fir2IrLazyClass = firClass.convertWithOffsets { startOffset, endOffset ->
val firClassOrigin = firClass.irOrigin(session.firProvider)
Fir2IrLazyClass(components, startOffset, endOffset, firClassOrigin, firClass, symbol).apply {
parent = irParent
}
Fir2IrLazyClass(components, startOffset, endOffset, firClassOrigin, firClass, symbol, irParent)
}
fun createIrLazyField(
@@ -37,12 +37,12 @@ abstract class AbstractFir2IrLazyFunction<F : FirCallableDeclaration>(
override val endOffset: Int,
override var origin: IrDeclarationOrigin,
override val symbol: IrSimpleFunctionSymbol,
override var parent: IrDeclarationParent,
override var isFakeOverride: Boolean
) : AbstractIrLazyFunction(), AbstractFir2IrLazyDeclaration<F>, Fir2IrTypeParametersContainer, IrLazyFunctionBase,
Fir2IrComponents by components {
override lateinit var typeParameters: List<IrTypeParameter>
override lateinit var parent: IrDeclarationParent
override var isTailrec: Boolean
get() = fir.isTailRec
@@ -40,6 +40,7 @@ class Fir2IrLazyClass(
override var origin: IrDeclarationOrigin,
override val fir: FirRegularClass,
override val symbol: IrClassSymbol,
override var parent: IrDeclarationParent,
) : IrClass(), AbstractFir2IrLazyDeclaration<FirRegularClass>, Fir2IrTypeParametersContainer,
IrMaybeDeserializedClass, DeserializableClass, Fir2IrComponents by components {
init {
@@ -49,7 +50,6 @@ class Fir2IrLazyClass(
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
override lateinit var typeParameters: List<IrTypeParameter>
override lateinit var parent: IrDeclarationParent
override val source: SourceElement
get() = fir.sourceElement ?: SourceElement.NO_SOURCE
@@ -36,6 +36,7 @@ class Fir2IrLazyConstructor(
override var origin: IrDeclarationOrigin,
override val fir: FirConstructor,
override val symbol: IrConstructorSymbol,
override var parent: IrDeclarationParent
) : IrConstructor(), AbstractFir2IrLazyDeclaration<FirConstructor>, Fir2IrTypeParametersContainer,
Fir2IrComponents by components {
init {
@@ -45,7 +46,6 @@ class Fir2IrLazyConstructor(
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
override lateinit var typeParameters: List<IrTypeParameter>
override lateinit var parent: IrDeclarationParent
override var isPrimary: Boolean
get() = fir.isPrimary
@@ -39,6 +39,7 @@ class Fir2IrLazyProperty(
override val fir: FirProperty,
val containingClass: FirRegularClass?,
symbols: PropertySymbols,
override var parent: IrDeclarationParent,
override var isFakeOverride: Boolean
) : IrProperty(), AbstractFir2IrLazyDeclaration<FirProperty>, Fir2IrComponents by components {
override val symbol: IrPropertySymbol = symbols.propertySymbol
@@ -49,7 +50,6 @@ class Fir2IrLazyProperty(
}
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
override lateinit var parent: IrDeclarationParent
@ObsoleteDescriptorBasedAPI
override val descriptor: PropertyDescriptor
@@ -172,18 +172,23 @@ class Fir2IrLazyProperty(
override var getter: IrSimpleFunction? by lazyVar(lock) {
Fir2IrLazyPropertyAccessor(
components, startOffset, endOffset,
when {
origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB -> origin
fir.delegate != null -> IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR
origin == IrDeclarationOrigin.FAKE_OVERRIDE -> origin
origin == IrDeclarationOrigin.DELEGATED_MEMBER -> origin
fir.getter is FirDefaultPropertyGetter -> IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR
else -> origin
},
fir.getter, isSetter = false, fir, containingClass, symbols.getterSymbol, isFakeOverride, this.symbol
).apply {
parent = this@Fir2IrLazyProperty.parent
correspondingPropertySymbol = this@Fir2IrLazyProperty.symbol
origin = when {
origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB -> origin
fir.delegate != null -> IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR
origin == IrDeclarationOrigin.FAKE_OVERRIDE -> origin
origin == IrDeclarationOrigin.DELEGATED_MEMBER -> origin
fir.getter is FirDefaultPropertyGetter -> IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR
else -> origin
},
firAccessor = fir.getter,
isSetter = false,
firParentProperty = fir,
firParentClass = containingClass,
symbol = symbols.getterSymbol,
parent = this@Fir2IrLazyProperty.parent,
isFakeOverride = isFakeOverride,
correspondingPropertySymbol = this.symbol
).apply {
classifiersGenerator.setTypeParameters(this, this@Fir2IrLazyProperty.fir, ConversionTypeOrigin.DEFAULT)
}
}
@@ -192,7 +197,7 @@ class Fir2IrLazyProperty(
if (!fir.isVar) return@lazyVar null
Fir2IrLazyPropertyAccessor(
components, startOffset, endOffset,
when {
origin = when {
origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB -> origin
fir.delegate != null -> IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR
origin == IrDeclarationOrigin.FAKE_OVERRIDE -> origin
@@ -200,10 +205,14 @@ class Fir2IrLazyProperty(
fir.setter is FirDefaultPropertySetter -> IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR
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 {
parent = this@Fir2IrLazyProperty.parent
correspondingPropertySymbol = this@Fir2IrLazyProperty.symbol
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.synthetic.FirSyntheticPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.utils.isInline
import org.jetbrains.kotlin.ir.declarations.IrClass
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.*
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
@@ -37,9 +34,10 @@ class Fir2IrLazyPropertyAccessor(
private val firParentProperty: FirProperty,
firParentClass: FirRegularClass?,
symbol: IrSimpleFunctionSymbol,
parent: IrDeclarationParent,
isFakeOverride: Boolean,
override var correspondingPropertySymbol: IrPropertySymbol?
) : AbstractFir2IrLazyFunction<FirCallableDeclaration>(components, startOffset, endOffset, origin, symbol, isFakeOverride) {
) : AbstractFir2IrLazyFunction<FirCallableDeclaration>(components, startOffset, endOffset, origin, symbol, parent, isFakeOverride) {
init {
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.FirSimpleFunction
import org.jetbrains.kotlin.fir.initialSignatureAttr
import org.jetbrains.kotlin.ir.declarations.IrClass
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.*
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
@@ -35,8 +32,9 @@ class Fir2IrLazySimpleFunction(
override val fir: FirSimpleFunction,
firParent: FirRegularClass?,
symbol: IrSimpleFunctionSymbol,
parent: IrDeclarationParent,
isFakeOverride: Boolean
) : AbstractFir2IrLazyFunction<FirSimpleFunction>(components, startOffset, endOffset, origin, symbol, isFakeOverride) {
) : AbstractFir2IrLazyFunction<FirSimpleFunction>(components, startOffset, endOffset, origin, symbol, parent, isFakeOverride) {
init {
symbol.bind(this)
classifierStorage.preCacheTypeParameters(fir, symbol)
@@ -96,7 +94,6 @@ class Fir2IrLazySimpleFunction(
override var overriddenSymbols: List<IrSimpleFunctionSymbol> by lazyVar(lock) {
if (firParent == null) return@lazyVar emptyList()
val parent = parent
if (isFakeOverride && parent is Fir2IrLazyClass) {
fakeOverrideGenerator.calcBaseSymbolsForFakeOverrideFunction(
firParent, this, fir.symbol