[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) {
|
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 -> {
|
||||||
|
|||||||
+2
-4
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user