Skip to content

Commit 80a4d19

Browse files
committed
remove override flags from ordinal, enumLabel
1 parent 9c9db17 commit 80a4d19

File tree

5 files changed

+27
-16
lines changed

5 files changed

+27
-16
lines changed

compiler/src/dotty/tools/dotc/ast/DesugarEnums.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,9 @@ object DesugarEnums {
125125
/** A creation method for a value of enum type `E`, which is defined as follows:
126126
*
127127
* private def $new(_$ordinal: Int, $name: String) = new E with scala.runtime.EnumValue {
128-
* override def ordinal = _$ordinal // if `E` does not derive from `java.lang.Enum`
129-
* override def enumLabel = $name // if `E` does not derive from `java.lang.Enum`
130-
* override def enumLabel = this.name // if `E` derives from `java.lang.Enum`
128+
* def ordinal = _$ordinal // if `E` does not derive from `java.lang.Enum`
129+
* def enumLabel = $name // if `E` does not derive from `java.lang.Enum`
130+
* def enumLabel = this.name // if `E` derives from `java.lang.Enum`
131131
* $values.register(this)
132132
* }
133133
*/
@@ -274,10 +274,10 @@ object DesugarEnums {
274274
private def isJavaEnum(using Context): Boolean = ctx.owner.linkedClass.derivesFrom(defn.JavaEnumClass)
275275

276276
def ordinalMeth(body: Tree)(using Context): DefDef =
277-
DefDef(nme.ordinal, Nil, Nil, TypeTree(defn.IntType), body).withFlags(Override)
277+
DefDef(nme.ordinal, Nil, Nil, TypeTree(defn.IntType), body)
278278

279279
def enumLabelMeth(body: Tree)(using Context): DefDef =
280-
DefDef(nme.enumLabel, Nil, Nil, TypeTree(defn.StringType), body).withFlags(Override)
280+
DefDef(nme.enumLabel, Nil, Nil, TypeTree(defn.StringType), body)
281281

282282
def ordinalMethLit(ord: Int)(using Context): DefDef =
283283
ordinalMeth(Literal(Constant(ord)))

docs/docs/reference/enums/desugarEnums.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,8 @@ If `E` contains at least one simple case, its companion object will define in ad
174174
follows.
175175
```scala
176176
private def $new(_$ordinal: Int, $name: String) = new E with runtime.EnumValue {
177-
override def ordinal = _$ordinal
178-
override def enumLabel = $name
177+
def ordinal = _$ordinal
178+
def enumLabel = $name
179179
override def productPrefix = enumLabel // if not overridden in `E`
180180
override def toString = enumLabel // if not overridden in `E`
181181
$values.register(this) // register enum value so that `valueOf` and `values` can return it.

docs/docs/reference/enums/enums.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ For instance, the `Venus` value above would be defined like this:
132132
```scala
133133
val Venus: Planet =
134134
new Planet(4.869E24, 6051800.0) {
135-
override def ordinal: Int = 1
136-
override def enumLabel: String = "Venus"
135+
def ordinal: Int = 1
136+
def enumLabel: String = "Venus"
137137
override def productPrefix: String = enumLabel
138138
override def toString: String = enumLabel
139139
// internal code to register value

tests/neg/enumsLabelDef.scala

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,19 @@
11
enum Labelled {
22

3-
case A // error: cannot override final member method enumLabel in class Labelled
4-
case B(arg: Int) // error: cannot override final member method enumLabel in class Labelled
3+
case A // error overriding method enumLabel in class Labelled of type => String;
4+
case B(arg: Int) // error overriding method enumLabel in class Labelled of type => String;
55

6-
final def enumLabel: String = "nolabel"
6+
def enumLabel: String = "nolabel"
7+
}
8+
9+
trait Mixin { def enumLabel: String = "mixin" }
10+
11+
enum Mixed extends Mixin {
12+
case C // error overriding method enumLabel in trait Mixin of type => String;
13+
}
14+
15+
trait HasEnumLabel { def enumLabel: String }
16+
17+
enum MyEnum extends HasEnumLabel {
18+
case D // ok
719
}

tests/run/enum-custom-toString.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ enum EJ extends java.lang.Enum[EJ]:
77
override def toString: String = "overridden"
88

99
trait Mixin extends Enum:
10-
override def enumLabel: String = "nolabel"
1110
override def productPrefix: String = "noprefix"
1211
override def toString: String = "overridden"
1312

@@ -56,7 +55,7 @@ object Tag:
5655
assert(EJ.valueOf("B") == EJ.B, s"EJ.valueOf(B) = ${EJ.valueOf("B")}")
5756
assert(EM.C.toString == "overridden", s"EM.C.toString = ${EM.C.toString}")
5857
assert(EM.C.productPrefix == "noprefix", s"EM.C.productPrefix = ${EM.C.productPrefix}")
59-
assert(EM.C.enumLabel == "C", s"EM.C.enumLabel = ${EM.C.enumLabel}") // enumLabel override is useless
58+
assert(EM.C.enumLabel == "C", s"EM.C.enumLabel = ${EM.C.enumLabel}")
6059
assert(EM.valueOf("C") == EM.C, s"EM.valueOf(C) = ${EM.valueOf("C")}")
6160
assert(ET.D.toString == "overridden", s"ET.D.toString = ${ET.D.toString}")
6261
assert(ET.D.productPrefix == "D", s"ET.D.productPrefix = ${ET.D.productPrefix}")
@@ -80,11 +79,11 @@ object Tag:
8079
assert(EO.I(0).enumLabel == "I", s"EO.I(0).enumLabel = ${EO.I(0).enumLabel}")
8180
assert(EQ.J.toString == "overridden", s"EQ.J.toString = ${EQ.J.toString}")
8281
assert(EQ.J.productPrefix == "noprefix", s"EQ.J.productPrefix = ${EQ.J.productPrefix}")
83-
assert(EQ.J.enumLabel == "J", s"EQ.J.enumLabel = ${EQ.J.enumLabel}") // enumLabel override is useless
82+
assert(EQ.J.enumLabel == "J", s"EQ.J.enumLabel = ${EQ.J.enumLabel}")
8483
assert(EQ.valueOf("J") == EQ.J, s"EQ.valueOf(J) = ${EQ.valueOf("J")}")
8584
assert(EQ.K(0).toString == "overridden", s"EQ.K(0).toString = ${EQ.K(0).toString}")
8685
assert(EQ.K(0).productPrefix == "noprefix", s"EQ.K(0).productPrefix = ${EQ.K(0).productPrefix}")
87-
assert(EQ.K(0).enumLabel == "K", s"EQ.K(0).enumLabel = ${EQ.K(0).enumLabel}") // enumLabel override is useless
86+
assert(EQ.K(0).enumLabel == "K", s"EQ.K(0).enumLabel = ${EQ.K(0).enumLabel}")
8887
assert(Tag.IntTag.productPrefix == "", s"Tag.IntTag.productPrefix = ${Tag.IntTag.productPrefix}")
8988
assert(Tag.IntTag.enumLabel == "IntTag", s"Tag.IntTag.enumLabel = ${Tag.IntTag.enumLabel}")
9089
assert(

0 commit comments

Comments
 (0)