File tree Expand file tree Collapse file tree 2 files changed +27
-5
lines changed
compiler/src/dotty/tools/dotc/typer Expand file tree Collapse file tree 2 files changed +27
-5
lines changed Original file line number Diff line number Diff line change @@ -1088,12 +1088,14 @@ trait Checking {
10881088 && cls.owner.isTerm
10891089 && (cls.owner.flagsUNSAFE.isAllOf(EnumCase )
10901090 || ((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
10941097 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
10971099 // Since enums are classes and Namer checks that classes don't extend multiple classes, we only check the class
10981100 // parent.
10991101 //
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