@@ -95,7 +95,7 @@ object RefChecks {
9595 * and required classes. Also check that only `enum` constructs extend
9696 * `java.lang.Enum`.
9797 */
98- private def checkParents (cls : Symbol )(using Context ): Unit = cls.info match {
98+ private def checkParents (cls : Symbol , parentTrees : List [ Tree ] )(using Context ): Unit = cls.info match {
9999 case cinfo : ClassInfo =>
100100 def checkSelfConforms (other : ClassSymbol , category : String , relation : String ) = {
101101 val otherSelf = other.declaredSelfTypeAsSeenFrom(cls.thisType)
@@ -109,12 +109,25 @@ object RefChecks {
109109 for (reqd <- cinfo.cls.givenSelfType.classSymbols)
110110 checkSelfConforms(reqd, " missing requirement" , " required" )
111111
112+ def illegalEnumFlags = ! cls.isOneOf(Enum | Trait )
113+ def isJavaEnum = parents.exists(_.classSymbol == defn.JavaEnumClass )
114+
112115 // Prevent wrong `extends` of java.lang.Enum
113- if ! migrateTo3 &&
114- ! cls.isOneOf(Enum | Trait ) &&
115- parents.exists(_.classSymbol == defn.JavaEnumClass )
116- then
116+ if ! migrateTo3 && illegalEnumFlags && isJavaEnum then
117117 report.error(CannotExtendJavaEnum (cls), cls.sourcePos)
118+ else if illegalEnumFlags && isJavaEnum then
119+ val javaEnumCtor = defn.JavaEnumClass .primaryConstructor
120+ parentTrees.exists(parent =>
121+ parent.tpe.typeSymbol == defn.JavaEnumClass
122+ && (
123+ parent match
124+ case tpd.Apply (tpd.TypeApply (fn, _), _) if fn.tpe.termSymbol eq javaEnumCtor =>
125+ // here we are simulating the error for missing arguments to a constructor.
126+ report.error(JavaEnumParentArgs (parent.tpe), cls.sourcePos)
127+ true
128+ case _ =>
129+ false
130+ ))
118131
119132 case _ =>
120133 }
@@ -1089,7 +1102,7 @@ class RefChecks extends MiniPhase { thisPhase =>
10891102 override def transformTemplate (tree : Template )(using Context ): Tree = try {
10901103 val cls = ctx.owner.asClass
10911104 checkOverloadedRestrictions(cls)
1092- checkParents(cls)
1105+ checkParents(cls, tree.parents )
10931106 if (cls.is(Trait )) tree.parents.foreach(checkParentPrefix(cls, _))
10941107 checkCompanionNameClashes(cls)
10951108 checkAllOverrides(cls)
0 commit comments