diff --git a/docs/docs/reference/enums/enums.md b/docs/docs/reference/enums/enums.md index d5134b3c12cc..daa4e33de38a 100644 --- a/docs/docs/reference/enums/enums.md +++ b/docs/docs/reference/enums/enums.md @@ -89,10 +89,11 @@ object Planet { ``` ### Compatibility with Java Enums -If you want to use the Scala-defined enums as Java enums, you can do so by extending `java.lang.Enum` class as follows: +If you want to use the Scala-defined enums as Java enums, you can do so by extending +the class `java.lang.Enum`, which is imported by default, as follows: ```scala -enum Color extends java.lang.Enum[Color] { case Red, Green, Blue } +enum Color extends Enum[Color] { case Red, Green, Blue } ``` The type parameter comes from the Java enum [definition](https://docs.oracle.com/javase/8/docs/api/index.html?java/lang/Enum.html) and should be the same as the type of the enum. diff --git a/library/src/scala/Enum.scala b/library/src/scala/Enum.scala deleted file mode 100644 index d1143e042346..000000000000 --- a/library/src/scala/Enum.scala +++ /dev/null @@ -1,5 +0,0 @@ -package scala - -/** A base trait of all Scala enum definitions */ -@deprecated("scala.Enum has moved to scala.reflect.Enum", "3.0.0-M1") -type Enum = scala.reflect.Enum diff --git a/scala3doc-testcases/src/tests/annotations.scala b/scala3doc-testcases/src/tests/annotations.scala index 07c110a56dc6..37797203cd03 100644 --- a/scala3doc-testcases/src/tests/annotations.scala +++ b/scala3doc-testcases/src/tests/annotations.scala @@ -3,6 +3,8 @@ package annotations import scala.annotation.StaticAnnotation +import java.lang.{Enum => _} +import scala.reflect.Enum class SomeObject(val s: String) @@ -25,4 +27,4 @@ class AnnotatedMethods { @MyAnnotation @AnnotationWithMultiArg(2, "cda", 'a', 'b', 'c') def a: String = ??? -} \ No newline at end of file +} diff --git a/tests/pos/enum-companion-first.scala b/tests/pos/enum-companion-first.scala index c61051efa0fe..d4c1eb370031 100644 --- a/tests/pos/enum-companion-first.scala +++ b/tests/pos/enum-companion-first.scala @@ -1,7 +1,7 @@ object Planet: final val G = 6.67300E-11 -enum Planet(mass: Double, radius: Double) extends java.lang.Enum[Planet]: +enum Planet(mass: Double, radius: Double) extends Enum[Planet]: def surfaceGravity = Planet.G * mass / (radius * radius) def surfaceWeight(otherMass: Double) = otherMass * surfaceGravity diff --git a/tests/pos/t7716.scala b/tests/pos/t7716.scala index 40117051ed8c..7f3c155a3e8f 100644 --- a/tests/pos/t7716.scala +++ b/tests/pos/t7716.scala @@ -1,6 +1,6 @@ object Test { def test: Unit = { - val e: java.lang.Enum[_] = java.util.concurrent.TimeUnit.SECONDS + val e: Enum[_] = java.util.concurrent.TimeUnit.SECONDS e match { case x => println(x) } diff --git a/tests/run/enum-custom-toString.scala b/tests/run/enum-custom-toString.scala index c2f3882931f9..7432bde87ff9 100644 --- a/tests/run/enum-custom-toString.scala +++ b/tests/run/enum-custom-toString.scala @@ -6,7 +6,7 @@ enum EJ extends java.lang.Enum[EJ]: case B override def toString: String = "overridden" -trait Mixin extends Enum: +trait Mixin extends reflect.Enum: override def productPrefix: String = "noprefix" override def toString: String = "overridden" @@ -36,7 +36,7 @@ enum EQ: case J extends EQ with Mixin case K(arg: Int) extends EQ with Mixin -abstract class Tag[T] extends Enum +abstract class Tag[T] extends reflect.Enum object Tag: private final class IntTagImpl extends Tag[Int] with runtime.EnumValue: def ordinal = 0 diff --git a/tests/run/generic/Color.scala b/tests/run/generic/Color.scala index 3db940cdc94a..7db703a15280 100644 --- a/tests/run/generic/Color.scala +++ b/tests/run/generic/Color.scala @@ -8,7 +8,7 @@ import Shapes._ * case Blue * } */ -sealed trait Color extends Enum +sealed trait Color extends EnumLike object Color { diff --git a/tests/run/generic/Enum.scala b/tests/run/generic/Enum.scala index 40ce2983730b..cbab19036da0 100644 --- a/tests/run/generic/Enum.scala +++ b/tests/run/generic/Enum.scala @@ -1,11 +1,11 @@ package generic -trait Enum { +trait EnumLike { def ordinal: Int } object runtime { - class EnumValues[E <: Enum] { + class EnumValues[E <: EnumLike] { private[this] var myMap: Map[Int, E] = Map() private[this] var fromNameCache: Map[String, E] = null diff --git a/tests/run/generic/List.scala b/tests/run/generic/List.scala index b2936ab1c3a4..9e3bcf13964c 100644 --- a/tests/run/generic/List.scala +++ b/tests/run/generic/List.scala @@ -7,7 +7,7 @@ import Shapes._ * case Nil() * } */ -sealed trait List0[T] extends Enum +sealed trait List0[T] extends EnumLike object List0 { abstract case class Cons[T](hd: T, tl: List0[T]) extends List0[T] { def ordinal = 0 @@ -51,7 +51,7 @@ object List0 { * case Nil extends List[Nothing] * } */ -sealed trait List[+T] extends Enum +sealed trait List[+T] extends EnumLike object List { abstract case class Cons[T](hd: T, tl: List[T]) extends List[T] { def ordinal = 0 diff --git a/tests/run/generic/SearchResult.scala b/tests/run/generic/SearchResult.scala index bc1b4a0dd901..3dbfe9ed4fe2 100644 --- a/tests/run/generic/SearchResult.scala +++ b/tests/run/generic/SearchResult.scala @@ -9,7 +9,7 @@ import Shapes._ * case Ambiguous(alt1: SearchResult, alt2: SearchResult) * } */ -sealed trait SearchResult extends Enum +sealed trait SearchResult extends EnumLike object SearchResult { diff --git a/tests/run/generic/Test.scala b/tests/run/generic/Test.scala index ac0dc4d5aae3..06fdc3b0dafd 100644 --- a/tests/run/generic/Test.scala +++ b/tests/run/generic/Test.scala @@ -69,4 +69,4 @@ object Test { sds(data4) assert(sCount == 1, sCount) } -} \ No newline at end of file +} diff --git a/tests/run/generic/Tree.scala b/tests/run/generic/Tree.scala index 32996685fc90..dddee59beb7e 100644 --- a/tests/run/generic/Tree.scala +++ b/tests/run/generic/Tree.scala @@ -12,7 +12,7 @@ import Shapes._ * case If(cond: Boolean, thenp: Tree[T], elsep: Tree[T]) * } */ -sealed trait Tree[TR] extends Enum +sealed trait Tree[TR] extends EnumLike object Tree { diff --git a/tests/semanticdb/expect/Enums.expect.scala b/tests/semanticdb/expect/Enums.expect.scala index 1ad378177f9b..6216eb540930 100644 --- a/tests/semanticdb/expect/Enums.expect.scala +++ b/tests/semanticdb/expect/Enums.expect.scala @@ -54,7 +54,7 @@ object Enums/*<-_empty_::Enums.*/: val some1/*<-_empty_::Enums.some1.*/ = /*->_empty_::Enums.unwrap().*/Some/*->scala::Some.*//*->scala::Some.apply().*/(Some/*->scala::Some.*//*->scala::Some.apply().*/(1))/*->_empty_::Enums.`<:<`.given_T().*/.unwrap - enum Planet/*<-_empty_::Enums.Planet#*/(mass/*<-_empty_::Enums.Planet#mass.*/: Double/*->scala::Double#*/, radius/*<-_empty_::Enums.Planet#radius.*/: Double/*->scala::Double#*/) extends java.lang.Enum/*->java::lang::Enum#*/[Planet/*->_empty_::Enums.Planet#*/]/*->java::lang::Enum#``().*/: + enum Planet/*<-_empty_::Enums.Planet#*/(mass/*<-_empty_::Enums.Planet#mass.*/: Double/*->scala::Double#*/, radius/*<-_empty_::Enums.Planet#radius.*/: Double/*->scala::Double#*/) extends Enum/*->java::lang::Enum#*/[Planet/*->_empty_::Enums.Planet#*/]/*->java::lang::Enum#``().*/: private final val G/*<-_empty_::Enums.Planet#G.*/ = 6.67300E-11 def surfaceGravity/*<-_empty_::Enums.Planet#surfaceGravity().*/ = G/*->_empty_::Enums.Planet#G.*/ */*->scala::Double#`*`(+6).*/ mass/*->_empty_::Enums.Planet#mass.*/ //*->scala::Double#`::`(+6).*/ (radius/*->_empty_::Enums.Planet#radius.*/ */*->scala::Double#`*`(+6).*/ radius/*->_empty_::Enums.Planet#radius.*/) def surfaceWeight/*<-_empty_::Enums.Planet#surfaceWeight().*/(otherMass/*<-_empty_::Enums.Planet#surfaceWeight().(otherMass)*/: Double/*->scala::Double#*/) = otherMass/*->_empty_::Enums.Planet#surfaceWeight().(otherMass)*/ */*->scala::Double#`*`(+6).*/ surfaceGravity/*->_empty_::Enums.Planet#surfaceGravity().*/ diff --git a/tests/semanticdb/expect/Enums.scala b/tests/semanticdb/expect/Enums.scala index f781e0878145..408b551224fd 100644 --- a/tests/semanticdb/expect/Enums.scala +++ b/tests/semanticdb/expect/Enums.scala @@ -54,7 +54,7 @@ object Enums: val some1 = Some(Some(1)).unwrap - enum Planet(mass: Double, radius: Double) extends java.lang.Enum[Planet]: + enum Planet(mass: Double, radius: Double) extends Enum[Planet]: private final val G = 6.67300E-11 def surfaceGravity = G * mass / (radius * radius) def surfaceWeight(otherMass: Double) = otherMass * surfaceGravity diff --git a/tests/semanticdb/metac.expect b/tests/semanticdb/metac.expect index a2021ced9e36..d24bccbb37d7 100644 --- a/tests/semanticdb/metac.expect +++ b/tests/semanticdb/metac.expect @@ -642,7 +642,7 @@ Uri => Enums.scala Text => empty Language => Scala Symbols => 181 entries -Occurrences => 203 entries +Occurrences => 201 entries Symbols: _empty_/Enums. => final object Enums @@ -979,11 +979,9 @@ Occurrences: [56:20..56:26): Double -> scala/Double# [56:28..56:34): radius <- _empty_/Enums.Planet#radius. [56:36..56:42): Double -> scala/Double# -[56:52..56:56): java -> java/ -[56:57..56:61): lang -> java/lang/ -[56:62..56:66): Enum -> java/lang/Enum# -[56:67..56:73): Planet -> _empty_/Enums.Planet# -[56:74..56:74): -> java/lang/Enum#``(). +[56:52..56:56): Enum -> java/lang/Enum# +[56:57..56:63): Planet -> _empty_/Enums.Planet# +[56:64..56:64): -> java/lang/Enum#``(). [57:22..57:23): G <- _empty_/Enums.Planet#G. [58:8..58:22): surfaceGravity <- _empty_/Enums.Planet#surfaceGravity(). [58:25..58:26): G -> _empty_/Enums.Planet#G.