[FIR2IR] Extract logic of IR declarations generation into separate component. Part 15
Always require containing IrClass for enum entries
This commit is contained in:
committed by
Space Team
parent
eb9c732527
commit
40ae5a8e33
+3
-4
@@ -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 -> {
|
||||
|
||||
+2
-4
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user