[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) { return when (val firDeclaration = firVariableSymbol.fir) {
is FirEnumEntry -> { is FirEnumEntry -> {
classifierStorage.getCachedIrEnumEntry(firDeclaration)?.let { return it.symbol } 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 firProviderForSymbol = firVariableSymbol.moduleData.session.firProvider
val containingFile = firProviderForSymbol.getFirCallableContainerFile(firVariableSymbol) val containingFile = firProviderForSymbol.getFirCallableContainerFile(firVariableSymbol)
classifierStorage.createIrEnumEntry( classifierStorage.getIrEnumEntry(
firDeclaration, firDeclaration,
irParent = irParentClass, irParent = irParentClass,
predefinedOrigin = if (containingFile != null) IrDeclarationOrigin.DEFINED else predefinedOrigin = if (containingFile != null) IrDeclarationOrigin.DEFINED else irParentClass.origin
irParentClass?.origin ?: IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB
).symbol ).symbol
} }
is FirValueParameter -> { is FirValueParameter -> {
@@ -385,7 +385,7 @@ class Fir2IrClassifiersGenerator(val components: Fir2IrComponents) : Fir2IrCompo
fun createIrEnumEntry( fun createIrEnumEntry(
enumEntry: FirEnumEntry, enumEntry: FirEnumEntry,
irParent: IrClass?, irParent: IrClass,
predefinedOrigin: IrDeclarationOrigin? = null, predefinedOrigin: IrDeclarationOrigin? = null,
): IrEnumEntry { ): IrEnumEntry {
return enumEntry.convertWithOffsets { startOffset, endOffset -> return enumEntry.convertWithOffsets { startOffset, endOffset ->
@@ -400,9 +400,7 @@ class Fir2IrClassifiersGenerator(val components: Fir2IrComponents) : Fir2IrCompo
symbol = symbol, symbol = symbol,
).apply { ).apply {
declarationStorage.enterScope(this.symbol) declarationStorage.enterScope(this.symbol)
if (irParent != null) { this.parent = irParent
this.parent = irParent
}
if (isEnumEntryWhichRequiresSubclass(enumEntry)) { if (isEnumEntryWhichRequiresSubclass(enumEntry)) {
// An enum entry with its own members requires an anonymous object generated. // 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, // Otherwise, this is a default-ish enum entry whose initializer would be a delegating constructor call,