FIR2IR: Introduce and use declarationStorage.getOrCreateIrConstructor
It's necessary because constructors of LazyIrClass annotations may be referenced before members are processed
This commit is contained in:
@@ -123,7 +123,7 @@ class Fir2IrConverter(
|
|||||||
irClass: IrClass = classifierStorage.getCachedIrClass(regularClass)!!
|
irClass: IrClass = classifierStorage.getCachedIrClass(regularClass)!!
|
||||||
): IrClass {
|
): IrClass {
|
||||||
val irConstructor = regularClass.getPrimaryConstructorIfAny()?.let {
|
val irConstructor = regularClass.getPrimaryConstructorIfAny()?.let {
|
||||||
declarationStorage.createIrConstructor(it, irClass, isLocal = regularClass.isLocal)
|
declarationStorage.getOrCreateIrConstructor(it, irClass, isLocal = regularClass.isLocal)
|
||||||
}
|
}
|
||||||
if (irConstructor != null) {
|
if (irConstructor != null) {
|
||||||
irClass.declarations += irConstructor
|
irClass.declarations += irConstructor
|
||||||
@@ -219,7 +219,7 @@ class Fir2IrConverter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
is FirConstructor -> if (!declaration.isPrimary) {
|
is FirConstructor -> if (!declaration.isPrimary) {
|
||||||
declarationStorage.createIrConstructor(
|
declarationStorage.getOrCreateIrConstructor(
|
||||||
declaration, parent as IrClass, isLocal = isLocal
|
declaration, parent as IrClass, isLocal = isLocal
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -544,6 +544,16 @@ class Fir2IrDeclarationStorage(
|
|||||||
return created
|
return created
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getOrCreateIrConstructor(
|
||||||
|
constructor: FirConstructor,
|
||||||
|
irParent: IrClass,
|
||||||
|
origin: IrDeclarationOrigin = IrDeclarationOrigin.DEFINED,
|
||||||
|
isLocal: Boolean = false
|
||||||
|
): IrConstructor {
|
||||||
|
getCachedIrConstructor(constructor)?.let { return it }
|
||||||
|
return createIrConstructor(constructor, irParent, origin, isLocal)
|
||||||
|
}
|
||||||
|
|
||||||
private fun declareIrAccessor(
|
private fun declareIrAccessor(
|
||||||
signature: IdSignature?,
|
signature: IdSignature?,
|
||||||
containerSource: DeserializedContainerSource?,
|
containerSource: DeserializedContainerSource?,
|
||||||
|
|||||||
Reference in New Issue
Block a user