@@ -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