[FIR2IR] Extract logic of IR declarations generation into separate component. Part 15

Always require containing IrClass for enum entries
This commit is contained in:
Dmitriy Novozhilov
2023-08-29 15:12:16 +03:00
committed by Space Team
parent eb9c732527
commit 40ae5a8e33
2 changed files with 5 additions and 8 deletions
@@ -795,16 +795,15 @@ class Fir2IrDeclarationStorage(
return when (val firDeclaration = firVariableSymbol.fir) {
is FirEnumEntry -> {
classifierStorage.getCachedIrEnumEntry(firDeclaration)?.let { return it.symbol }
val irParentClass = firDeclaration.containingClassLookupTag()?.let { classifierStorage.findIrClass(it) }
val irParentClass = firDeclaration.containingClassLookupTag()?.let { classifierStorage.findIrClass(it) }!!
val firProviderForSymbol = firVariableSymbol.moduleData.session.firProvider
val containingFile = firProviderForSymbol.getFirCallableContainerFile(firVariableSymbol)
classifierStorage.createIrEnumEntry(
classifierStorage.getIrEnumEntry(
firDeclaration,
irParent = irParentClass,
predefinedOrigin = if (containingFile != null) IrDeclarationOrigin.DEFINED else
irParentClass?.origin ?: IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB
predefinedOrigin = if (containingFile != null) IrDeclarationOrigin.DEFINED else irParentClass.origin
).symbol
}
is FirValueParameter -> {
@@ -385,7 +385,7 @@ class Fir2IrClassifiersGenerator(val components: Fir2IrComponents) : Fir2IrCompo
fun createIrEnumEntry(
enumEntry: FirEnumEntry,
irParent: IrClass?,
irParent: IrClass,
predefinedOrigin: IrDeclarationOrigin? = null,
): IrEnumEntry {
return enumEntry.convertWithOffsets { startOffset, endOffset ->
@@ -400,9 +400,7 @@ class Fir2IrClassifiersGenerator(val components: Fir2IrComponents) : Fir2IrCompo
symbol = symbol,
).apply {
declarationStorage.enterScope(this.symbol)
if (irParent != null) {
this.parent = irParent
}
this.parent = irParent
if (isEnumEntryWhichRequiresSubclass(enumEntry)) {
// An enum entry with its own members requires an anonymous object generated.
// Otherwise, this is a default-ish enum entry whose initializer would be a delegating constructor call,