KT-29340 Provide effective modality for enum class in IR
* if enum class has abstract members, then it is ABSTRACT * otherwise, if enum class has entries with members, then it is OPEN * otherwise, it is FINAL.
This commit is contained in:
@@ -53,12 +53,14 @@ class IrClassImpl(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
symbol: IrClassSymbol
|
||||
symbol: IrClassSymbol,
|
||||
modality: Modality = symbol.descriptor.modality
|
||||
) :
|
||||
this(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
symbol.descriptor.name, symbol.descriptor.kind,
|
||||
symbol.descriptor.visibility, symbol.descriptor.modality,
|
||||
symbol.descriptor.visibility,
|
||||
modality = modality,
|
||||
isCompanion = symbol.descriptor.isCompanionObject,
|
||||
isInner = symbol.descriptor.isInner,
|
||||
isData = symbol.descriptor.isData,
|
||||
@@ -70,17 +72,19 @@ class IrClassImpl(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
descriptor: ClassDescriptor
|
||||
descriptor: ClassDescriptor,
|
||||
modality: Modality = descriptor.modality
|
||||
) :
|
||||
this(startOffset, endOffset, origin, IrClassSymbolImpl(descriptor))
|
||||
this(startOffset, endOffset, origin, IrClassSymbolImpl(descriptor), modality)
|
||||
|
||||
constructor(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
descriptor: ClassDescriptor,
|
||||
members: List<IrDeclaration>
|
||||
) : this(startOffset, endOffset, origin, descriptor) {
|
||||
modality: Modality = descriptor.modality,
|
||||
members: List<IrDeclaration> = emptyList()
|
||||
) : this(startOffset, endOffset, origin, descriptor, modality) {
|
||||
addAll(members)
|
||||
}
|
||||
|
||||
|
||||
@@ -92,6 +92,7 @@ open class DeepCopyIrTree : IrElementTransformerVoid() {
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
mapClassDeclaration(declaration.descriptor),
|
||||
declaration.modality,
|
||||
declaration.declarations.map { it.transform() }
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
|
||||
@@ -232,7 +232,8 @@ open class SymbolTable : ReferenceSymbolTable {
|
||||
|
||||
fun declareClass(
|
||||
startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor,
|
||||
classFactory: (IrClassSymbol) -> IrClass = { IrClassImpl(startOffset, endOffset, origin, it) }
|
||||
modality: Modality = descriptor.modality,
|
||||
classFactory: (IrClassSymbol) -> IrClass = { IrClassImpl(startOffset, endOffset, origin, it, modality) }
|
||||
): IrClass {
|
||||
return classSymbolTable.declare(
|
||||
descriptor,
|
||||
|
||||
Reference in New Issue
Block a user