diff --git a/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java b/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java index c7cacfed991d..054767e3300f 100644 --- a/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java +++ b/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java @@ -131,7 +131,8 @@ public enum ErrorMessageID { MatchCaseOnlyNullWarningID, ImportRenamedTwiceID, TypeTestAlwaysSucceedsID, - TermMemberNeedsNeedsResultTypeForImplicitSearchID + TermMemberNeedsNeedsResultTypeForImplicitSearchID, + CaseClassCannotExtendEnumID ; public int errorNumber() { diff --git a/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala b/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala index 1c988606b9f9..32c0c18ad493 100644 --- a/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala +++ b/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala @@ -2120,4 +2120,10 @@ object messages { |To avoid this error, give `$cycleSym` an explicit type. |""".stripMargin } + + case class CaseClassCannotExtendEnum(cls: Symbol)(implicit ctx: Context) extends Message(CaseClassCannotExtendEnumID) { + override def kind: String = "Syntax" + override def msg: String = hl"""normal case $cls in ${cls.owner} cannot extend an enum""" + override def explanation: String = "" + } } diff --git a/compiler/src/dotty/tools/dotc/typer/Checking.scala b/compiler/src/dotty/tools/dotc/typer/Checking.scala index 9f6793760017..ad195514d8d5 100644 --- a/compiler/src/dotty/tools/dotc/typer/Checking.scala +++ b/compiler/src/dotty/tools/dotc/typer/Checking.scala @@ -853,7 +853,7 @@ trait Checking { cls.owner.isTerm && (cls.owner.flagsUNSAFE.is(Case) || cls.owner.name == nme.DOLLAR_NEW) if (!cdef.mods.isEnumCase && !isEnumAnonCls) - ctx.error(em"normal case $cls in ${cls.owner} cannot extend an enum", cdef.pos) + ctx.error(CaseClassCannotExtendEnum(cls), cdef.pos) } /** Check that all references coming from enum cases in an enum companion object diff --git a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala index 8678a6b2a94b..b592ebc7e37b 100644 --- a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala +++ b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala @@ -30,7 +30,9 @@ class ErrorMessagesTests extends ErrorMessagesTest { implicit val ctx: Context = ictx assertMessageCount(1, messages) val errorMsg = messages.head - assertEquals("normal case class Bar in package cannot extend an enum", errorMsg.msg) + val CaseClassCannotExtendEnum(cls) :: Nil = messages + assertEquals("Bar", cls.name.show) + assertEquals("", cls.owner.name.show) } @Test def typeMismatch =