From 40ae5a8e33400167e8e44cc439d0c5c7c69733a1 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 29 Aug 2023 15:12:16 +0300 Subject: [PATCH] [FIR2IR] Extract logic of IR declarations generation into separate component. Part 15 Always require containing IrClass for enum entries --- .../kotlin/fir/backend/Fir2IrDeclarationStorage.kt | 7 +++---- .../fir/backend/generators/Fir2IrClassifiersGenerator.kt | 6 ++---- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index c5258628e1b..85e4d928954 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -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 -> { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrClassifiersGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrClassifiersGenerator.kt index 6a1f29e4dfc..0cd0306aff1 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrClassifiersGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrClassifiersGenerator.kt @@ -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,