FIR2IR: extract 'enumClassModality'

This commit is contained in:
Mikhail Glukhikh
2020-03-04 16:01:36 +03:00
parent 76ccaf13ba
commit 0c9da6d715
@@ -236,6 +236,20 @@ class Fir2IrDeclarationStorage(
}
}
private fun FirRegularClass.enumClassModality(): Modality {
return when {
declarations.any { it is FirCallableMemberDeclaration<*> && it.modality == Modality.ABSTRACT } -> {
Modality.ABSTRACT
}
declarations.any { it is FirEnumEntry && it.initializer != null } -> {
Modality.OPEN
}
else -> {
Modality.FINAL
}
}
}
private fun createIrClass(klass: FirClass<*>): IrClass {
// NB: klass can be either FirRegularClass or FirAnonymousObject
if (klass is FirAnonymousObject) {
@@ -247,17 +261,7 @@ class Fir2IrDeclarationStorage(
val origin = IrDeclarationOrigin.DEFINED
val visibility = regularClass.visibility
val modality = if (regularClass.classKind == ClassKind.ENUM_CLASS) {
when {
regularClass.declarations.any { it is FirCallableMemberDeclaration<*> && it.modality == Modality.ABSTRACT } -> {
Modality.ABSTRACT
}
regularClass.declarations.any { it is FirEnumEntry && it.initializer != null } -> {
Modality.OPEN
}
else -> {
Modality.FINAL
}
}
regularClass.enumClassModality()
} else {
regularClass.modality ?: Modality.FINAL
}