Skip to content

Commit 7963aad

Browse files
committed
Forbid redundant/illegal object flags
Fix scala#4936.
1 parent 61cba97 commit 7963aad

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,16 @@ object desugar {
652652
val impl = mdef.impl
653653
val mods = mdef.mods
654654
def isEnumCase = mods.isEnumCase
655+
656+
def flagPos(flag: FlagSet) = mods.mods.find(_.flags == flag).get.pos
657+
658+
if (mods is Abstract)
659+
ctx.error(hl"""${"abstract"} modifier cannot be used for objects""", flagPos(Abstract))
660+
for (flag <- List(Sealed, Final)) {
661+
if (mods is flag)
662+
ctx.warning(hl"""${flag.toString} modifier is redundant for objects""", flagPos(flag))
663+
}
664+
655665
if (mods is Package)
656666
PackageDef(Ident(moduleName), cpy.ModuleDef(mdef)(nme.PACKAGE, impl).withMods(mods &~ Package) :: Nil)
657667
else if (isEnumCase)

tests/neg/i4936.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
abstract object Foo // error
2+
sealed final abstract case object Bar // error
3+
4+
abstract override object Baz // error

0 commit comments

Comments
 (0)