User: joe Date: 14 Apr 26 11:02 Revision: 4cc13acf50a5b8ea34fd5b792cd60a6b3d68ad10 Summary: Never generate abstract shadows for enums regardless of circumstances TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=10522&personal=false Index: src/main/kotlin/platform/mixin/action/GenerateShadowAction.kt =================================================================== --- src/main/kotlin/platform/mixin/action/GenerateShadowAction.kt (revision a88ba10c4208e9b05853969b19acd56f91d661cd) +++ src/main/kotlin/platform/mixin/action/GenerateShadowAction.kt (revision 4cc13acf50a5b8ea34fd5b792cd60a6b3d68ad10) @@ -197,15 +197,23 @@ } private fun canMakeAbstract(psiClass: PsiClass, method: PsiMethod): Boolean { + // If the method to shadow is already abstract, then keep it abstract if (method.hasModifierProperty(PsiModifier.ABSTRACT)) { return true } + + // Static or native methods can't be abstract if (method.hasModifierProperty(PsiModifier.STATIC) || method.hasModifierProperty(PsiModifier.NATIVE)) { return false } - if (psiClass.isEnum && psiClass.hasModifierProperty(PsiModifier.FINAL)) { + + // Don't generate abstract methods for enums if the method to shadow isn't already abstract. If the enum mixin isn't + // already abstract, it will require the enum to be abstract which is bad. If it is already abstract, then it will + // require all enum values to override this shadow method which we also don't want. + if (psiClass.isEnum) { return false } + return true }