File tree 2 files changed +27
-5
lines changed
compiler/src/dotty/tools/dotc/typer
2 files changed +27
-5
lines changed Original file line number Diff line number Diff line change @@ -1088,12 +1088,14 @@ trait Checking {
1088
1088
&& cls.owner.isTerm
1089
1089
&& (cls.owner.flagsUNSAFE.isAllOf(EnumCase )
1090
1090
|| ((cls.owner.name eq nme.DOLLAR_NEW ) && cls.owner.flagsUNSAFE.isAllOf(Private | Synthetic )))
1091
- if (! isEnumAnonCls)
1092
- if (cdef.mods.isEnumCase) {
1093
- if (cls.derivesFrom(defn.JavaEnumClass ))
1091
+ val isJavaEnum = cls.derivesFrom(defn.JavaEnumClass )
1092
+ if isJavaEnum && cdef.mods.isEnumClass && ! cls.isStatic then
1093
+ report.error(em " An enum extending java.lang.Enum must be declared in a static scope " , cdef.srcPos)
1094
+ if ! isEnumAnonCls then
1095
+ if cdef.mods.isEnumCase then
1096
+ if isJavaEnum then
1094
1097
report.error(em " paramerized case is not allowed in an enum that extends java.lang.Enum " , cdef.srcPos)
1095
- }
1096
- else if (cls.is(Case ) || firstParent.is(Enum ))
1098
+ else if cls.is(Case ) || firstParent.is(Enum ) then
1097
1099
// Since enums are classes and Namer checks that classes don't extend multiple classes, we only check the class
1098
1100
// parent.
1099
1101
//
Original file line number Diff line number Diff line change
1
+ import java .{lang => jl }
2
+
3
+ object TestSuite :
4
+ def test (op : => Unit ): Unit = op
5
+ test {
6
+ enum E extends jl.Enum [E ] { case A } // error: enum extending java.lang.Enum must be declared in a static scope
7
+ }
8
+
9
+ class Container :
10
+ enum E extends jl.Enum [E ] { case A } // error: enum extending java.lang.Enum must be declared in a static scope
11
+
12
+ object Wrap :
13
+ def force =
14
+ enum E extends jl.Enum [E ] { case A } // error: enum extending java.lang.Enum must be declared in a static scope
15
+
16
+ trait Universe :
17
+ enum E extends jl.Enum [E ] { case A } // error: enum extending java.lang.Enum must be declared in a static scope
18
+
19
+ object Static :
20
+ enum E extends jl.Enum [E ] { case A } // ok
You can’t perform that action at this time.
0 commit comments