Skip to content

Commit d397946

Browse files
authored
Merge pull request #5051 from skvithalani/ReplaceErrorStringWithMessage
Update the error message for 'CaseClassCannotExtendEnum' to include enum name
2 parents 1d24eaa + 35db524 commit d397946

File tree

4 files changed

+11
-7
lines changed

4 files changed

+11
-7
lines changed

compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2121,9 +2121,9 @@ object messages {
21212121
|""".stripMargin
21222122
}
21232123

2124-
case class CaseClassCannotExtendEnum(cls: Symbol)(implicit ctx: Context) extends Message(CaseClassCannotExtendEnumID) {
2124+
case class CaseClassCannotExtendEnum(cls: Symbol, parent: Symbol)(implicit ctx: Context) extends Message(CaseClassCannotExtendEnumID) {
21252125
override def kind: String = "Syntax"
2126-
override def msg: String = hl"""normal case $cls in ${cls.owner} cannot extend an enum"""
2126+
override def msg: String = hl"""normal case class cannot extend an enum. case $cls in ${cls.owner} is extending enum ${parent.name}."""
21272127
override def explanation: String = ""
21282128
}
21292129
}

compiler/src/dotty/tools/dotc/typer/Checking.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -853,14 +853,14 @@ trait Checking {
853853
ctx.error(em"$what can only be used in a rewrite method", pos)
854854

855855
/** Check that all case classes that extend `scala.Enum` are `enum` cases */
856-
def checkEnum(cdef: untpd.TypeDef, cls: Symbol)(implicit ctx: Context): Unit = {
856+
def checkEnum(cdef: untpd.TypeDef, cls: Symbol, parent: Symbol)(implicit ctx: Context): Unit = {
857857
import untpd.modsDeco
858858
def isEnumAnonCls =
859859
cls.isAnonymousClass &&
860860
cls.owner.isTerm &&
861861
(cls.owner.flagsUNSAFE.is(Case) || cls.owner.name == nme.DOLLAR_NEW)
862862
if (!cdef.mods.isEnumCase && !isEnumAnonCls)
863-
ctx.error(CaseClassCannotExtendEnum(cls), cdef.pos)
863+
ctx.error(CaseClassCannotExtendEnum(cls, parent), cdef.pos)
864864
}
865865

866866
/** Check that all references coming from enum cases in an enum companion object
@@ -938,7 +938,7 @@ trait Checking {
938938

939939
trait ReChecking extends Checking {
940940
import tpd._
941-
override def checkEnum(cdef: untpd.TypeDef, cls: Symbol)(implicit ctx: Context): Unit = ()
941+
override def checkEnum(cdef: untpd.TypeDef, cls: Symbol, parent: Symbol)(implicit ctx: Context): Unit = ()
942942
override def checkRefsLegal(tree: tpd.Tree, badOwner: Symbol, allowed: (Name, Symbol) => Boolean, where: String)(implicit ctx: Context): Unit = ()
943943
override def checkEnumCompanions(stats: List[Tree], enumContexts: collection.Map[Symbol, Context])(implicit ctx: Context): List[Tree] = stats
944944
}

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1578,7 +1578,10 @@ class Typer extends Namer
15781578
.withType(dummy.termRef)
15791579
if (!cls.is(AbstractOrTrait) && !ctx.isAfterTyper)
15801580
checkRealizableBounds(cls, cdef.namePos)
1581-
if (cls.is(Case) && cls.derivesFrom(defn.EnumClass)) checkEnum(cdef, cls)
1581+
if (cls.is(Case) && cls.derivesFrom(defn.EnumClass)) {
1582+
val firstParent = parents1.head.tpe.dealias.typeSymbol
1583+
checkEnum(cdef, cls, firstParent)
1584+
}
15821585
val cdef1 = assignType(cpy.TypeDef(cdef)(name, impl1), cls)
15831586
checkVariance(cdef1)
15841587
if (ctx.phase.isTyper && cdef1.tpe.derivesFrom(defn.DynamicClass) && !ctx.dynamicsEnabled) {

compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ class ErrorMessagesTests extends ErrorMessagesTest {
3030
implicit val ctx: Context = ictx
3131
assertMessageCount(1, messages)
3232
val errorMsg = messages.head
33-
val CaseClassCannotExtendEnum(cls) :: Nil = messages
33+
val CaseClassCannotExtendEnum(cls, parent) :: Nil = messages
3434
assertEquals("Bar", cls.name.show)
35+
assertEquals("Foo", parent.name.show)
3536
assertEquals("<empty>", cls.owner.name.show)
3637
}
3738

0 commit comments

Comments
 (0)