@@ -1046,20 +1046,26 @@ trait Checking {
10461046 ctx.error(em " $what $msg" , posd.sourcePos)
10471047 }
10481048
1049- /** Check that all case classes that extend `scala.Enum` are `enum` cases */
1049+ /** 1. Check that all case classes that extend `scala.Enum` are `enum` cases
1050+ * 2. Check that case class `enum` cases do not extend java.lang.Enum.
1051+ */
10501052 def checkEnum (cdef : untpd.TypeDef , cls : Symbol , firstParent : Symbol )(implicit ctx : Context ): Unit = {
10511053 import untpd .modsDeco
10521054 def isEnumAnonCls =
10531055 cls.isAnonymousClass &&
10541056 cls.owner.isTerm &&
10551057 (cls.owner.flagsUNSAFE.is(Case ) || cls.owner.name == nme.DOLLAR_NEW )
1056- if (! cdef.mods.isEnumCase && ! isEnumAnonCls) {
1057- // Since enums are classes and Namer checks that classes don't extend multiple classes, we only check the class
1058- // parent.
1059- //
1060- // Unlike firstParent.derivesFrom(defn.EnumClass), this test allows inheriting from `Enum` by hand;
1061- // see enum-List-control.scala.
1062- if (cls.is(Case ) || firstParent.is(Enum ))
1058+ if (! isEnumAnonCls) {
1059+ if (cdef.mods.isEnumCase) {
1060+ if (cls.derivesFrom(defn.JavaEnumClass ))
1061+ ctx.error(em " paramerized case is not allowed in an enum that extends java.lang.Enum " , cdef.sourcePos)
1062+ }
1063+ else if (cls.is(Case ) || firstParent.is(Enum ))
1064+ // Since enums are classes and Namer checks that classes don't extend multiple classes, we only check the class
1065+ // parent.
1066+ //
1067+ // Unlike firstParent.derivesFrom(defn.EnumClass), this test allows inheriting from `Enum` by hand;
1068+ // see enum-List-control.scala.
10631069 ctx.error(ClassCannotExtendEnum (cls, firstParent), cdef.sourcePos)
10641070 }
10651071 }
0 commit comments