File tree 3 files changed +45
-0
lines changed
compiler/test/dotty/tools/dotc/reporting
docs/docs/reference/enums 3 files changed +45
-0
lines changed Original file line number Diff line number Diff line change @@ -19,6 +19,20 @@ class ErrorMessagesTests extends ErrorMessagesTest {
19
19
checkMessagesAfter(FrontEnd .name)(""" class Foo""" )
20
20
.expectNoErrors
21
21
22
+ @ Test def caseClassExtendsEnum =
23
+ checkMessagesAfter(RefChecks .name) {
24
+ """
25
+ |enum Foo {}
26
+ |case class Bar() extends Foo
27
+ """ .stripMargin
28
+ }
29
+ .expect { (ictx, messages) ⇒
30
+ implicit val ctx : Context = ictx
31
+ assertMessageCount(1 , messages)
32
+ val errorMsg = messages.head
33
+ assertEquals(" normal case class Bar in package <empty> cannot extend an enum" , errorMsg.msg)
34
+ }
35
+
22
36
@ Test def typeMismatch =
23
37
checkMessagesAfter(FrontEnd .name) {
24
38
"""
Original file line number Diff line number Diff line change @@ -88,6 +88,35 @@ object Planet {
88
88
println(s " Your weight on $p is ${p.surfaceWeight(mass)}" )
89
89
}
90
90
}
91
+ ```
92
+ ### A specific use case of enum
93
+
94
+ Two enums can be combined into a different type as shown below:
95
+
96
+ ``` scala
97
+
98
+ trait Animal
99
+ object Animal {
100
+ def enumValues : Iterable [Animal ] = Dog .enumValues ++ Cat .enumValues
101
+ def enumValueNamed = Dog .enumValueNamed ++ Cat .enumValueNamed
102
+ }
103
+
104
+ enum Dog extends Animal {
105
+ case GermanShepherd , Labrador , Boxer
106
+ }
107
+
108
+ enum Cat extends Animal {
109
+ case PersianCat , Ragdoll , ScottishFold
110
+ }
111
+
112
+ object Main {
113
+ def main (args : Array [String ]): Unit = {
114
+ val values : Iterable [Animal ] = Animal .enumValues
115
+ val boxer_dog : Animal = Animal .enumValueNamed(" Boxer" )
116
+ val ragdoll_cat : Animal = Animal .enumValueNamed(" Ragdoll" )
117
+ }
118
+ }
119
+
91
120
```
92
121
93
122
### Implementation
Original file line number Diff line number Diff line change
1
+ enum Foo {}
2
+ enum Bar extends Foo {} // error
You can’t perform that action at this time.
0 commit comments