Skip to content

Commit b9b2c09

Browse files
committed
[JEP-409] Force sealed classes to have a clause
1 parent 2335a91 commit b9b2c09

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

compiler/src/dotty/tools/dotc/parsing/JavaParsers.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -810,11 +810,12 @@ object JavaParsers {
810810
List()
811811

812812

813-
def permittedSubclassesOpt() : List[Tree] =
813+
def permittedSubclassesOpt(isSealed: Boolean) : List[Tree] =
814814
if in.token == PERMITS then
815815
in.nextToken()
816816
repsep(() => typ(), COMMA)
817817
else
818+
if isSealed then syntaxError(em"sealed class must have subclasses", false)
818819
Nil
819820

820821
def classDecl(start: Offset, mods: Modifiers): List[Tree] = {
@@ -830,7 +831,7 @@ object JavaParsers {
830831
else
831832
javaLangObject()
832833
val interfaces = interfacesOpt()
833-
val permittedSubclasses = permittedSubclassesOpt()
834+
val permittedSubclasses = permittedSubclassesOpt(mods is Flags.Sealed)
834835
val (statics, body) = typeBody(CLASS, name, tparams)
835836
val cls = atSpan(start, nameOffset) {
836837
TypeDef(name, makeTemplate(superclass :: interfaces, body, tparams, true)).withMods(mods)
@@ -895,7 +896,7 @@ object JavaParsers {
895896
}
896897
else
897898
List(javaLangObject())
898-
val permittedSubclasses = permittedSubclassesOpt()
899+
val permittedSubclasses = permittedSubclassesOpt(mods is Flags.Sealed)
899900
val (statics, body) = typeBody(INTERFACE, name, tparams)
900901
val iface = atSpan(start, nameOffset) {
901902
TypeDef(

0 commit comments

Comments
 (0)