#14986·checkstyle

Add Check Support for Java 17 Sealed Classes: New Check UnnecessaryPermitsClause

Author: mahfouz72Created Jun 14, 2024Updated Sep 15, 2026
Labelsapprovednew module

child of #14969

sealed classes are useful if there is a need to define a strict hierarchy of extending classes. To mention all the allowed subclasses, there is a keyword permits, which subclasses' names should follow. In case when all subclasses are declared in the same file there is no need to mention them explicitly and permits clause can be omitted.


Config

xml
$ cat config.xml 
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
        "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
        "https://checkstyle.org/dtds/configuration_1_3.dtd">

<module name="Checker">
    <module name="TreeWalker">
        <module name="UnnecessaryPermitsClause"/>
    </module>
</module>

Example1

java
// violation below, 'no need for permitted types because all subclasses are in the same file'
sealed class A permits B, C, D, E {} 
final class B extends A {}
final class C extends A {}
final class D extends A {}
final class E extends A {}

Example2

java
sealed class A permits B, C, D, E {} // ok, subclass E is in another file so permits is necessary
final class B extends A {}
final class C extends A {}
final class D extends A {}

Expected Output

$ java -jar checkstyle-10.19.0-all.jar -c config.xml SealedClasses.java 
Starting audit...
[ERROR] D:\SealedClasses.java:1:1: no need for permitted types all subclasses are in the same file
Audit done.
Checkstyle ends with 1 errors.