[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:
committed by
Space Team
parent
bb892f10f8
commit
f0f8a9728e
+5
-12
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user