@@ -810,11 +810,12 @@ object JavaParsers {
810
810
List ()
811
811
812
812
813
- def permittedSubclassesOpt () : List [Tree ] =
813
+ def permittedSubclassesOpt (isSealed : Boolean ) : List [Tree ] =
814
814
if in.token == PERMITS then
815
815
in.nextToken()
816
816
repsep(() => typ(), COMMA )
817
817
else
818
+ if isSealed then syntaxError(em " sealed class must have subclasses " , false )
818
819
Nil
819
820
820
821
def classDecl (start : Offset , mods : Modifiers ): List [Tree ] = {
@@ -830,7 +831,7 @@ object JavaParsers {
830
831
else
831
832
javaLangObject()
832
833
val interfaces = interfacesOpt()
833
- val permittedSubclasses = permittedSubclassesOpt()
834
+ val permittedSubclasses = permittedSubclassesOpt(mods is Flags . Sealed )
834
835
val (statics, body) = typeBody(CLASS , name, tparams)
835
836
val cls = atSpan(start, nameOffset) {
836
837
TypeDef (name, makeTemplate(superclass :: interfaces, body, tparams, true )).withMods(mods)
@@ -895,7 +896,7 @@ object JavaParsers {
895
896
}
896
897
else
897
898
List (javaLangObject())
898
- val permittedSubclasses = permittedSubclassesOpt()
899
+ val permittedSubclasses = permittedSubclassesOpt(mods is Flags . Sealed )
899
900
val (statics, body) = typeBody(INTERFACE , name, tparams)
900
901
val iface = atSpan(start, nameOffset) {
901
902
TypeDef (
0 commit comments