[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)
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user