Enum class is 'abstract' if it contains abstract members.
This commit is contained in:
+17
-7
@@ -128,8 +128,12 @@ class ClassCodegen private constructor(val irClass: IrClass, val context: JvmBac
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun ClassDescriptor.calculateClassFlags(): Int {
|
fun ClassDescriptor.calculateClassFlags(): Int {
|
||||||
return (if (DescriptorUtils.isInterface(this)) Opcodes.ACC_INTERFACE else Opcodes.ACC_SUPER).
|
var flags = 0
|
||||||
or(calcModalityFlag()).or(AsmUtil.getVisibilityAccessFlagForClass(this))
|
flags = flags or if (DescriptorUtils.isInterface(this)) Opcodes.ACC_INTERFACE else Opcodes.ACC_SUPER
|
||||||
|
flags = flags or calcModalityFlag()
|
||||||
|
flags = flags or AsmUtil.getVisibilityAccessFlagForClass(this)
|
||||||
|
flags = flags or if (kind == ClassKind.ENUM_CLASS) Opcodes.ACC_ENUM else 0
|
||||||
|
return flags
|
||||||
}
|
}
|
||||||
|
|
||||||
fun MemberDescriptor.calculateCommonFlags(): Int {
|
fun MemberDescriptor.calculateCommonFlags(): Int {
|
||||||
@@ -158,7 +162,7 @@ fun MemberDescriptor.calculateCommonFlags(): Int {
|
|||||||
|
|
||||||
private fun MemberDescriptor.calcModalityFlag(): Int {
|
private fun MemberDescriptor.calcModalityFlag(): Int {
|
||||||
var flags = 0
|
var flags = 0
|
||||||
when (modality) {
|
when (effectiveModality) {
|
||||||
Modality.ABSTRACT -> {
|
Modality.ABSTRACT -> {
|
||||||
flags = flags.or(Opcodes.ACC_ABSTRACT)
|
flags = flags.or(Opcodes.ACC_ABSTRACT)
|
||||||
}
|
}
|
||||||
@@ -181,10 +185,16 @@ private fun MemberDescriptor.calcModalityFlag(): Int {
|
|||||||
return flags
|
return flags
|
||||||
}
|
}
|
||||||
|
|
||||||
//val MemberDescriptor.effectiveModality: Modality
|
val MemberDescriptor.effectiveModality: Modality
|
||||||
// get() {
|
get() {
|
||||||
//
|
if (this is ClassDescriptor && kind == ClassKind.ENUM_CLASS) {
|
||||||
// }
|
if (JvmCodegenUtil.hasAbstractMembers(this)) {
|
||||||
|
return Modality.ABSTRACT
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return modality
|
||||||
|
}
|
||||||
|
|
||||||
val DeclarationDescriptorWithSource.psiElement: PsiElement?
|
val DeclarationDescriptorWithSource.psiElement: PsiElement?
|
||||||
get() = (source as? PsiSourceElement)?.psi
|
get() = (source as? PsiSourceElement)?.psi
|
||||||
|
|||||||
Reference in New Issue
Block a user