Skip to content

UnnecessarySemicolonAfterTypeMemberDeclaration throws Exception on on Local Class #13411

@nrmancuso

Description

@nrmancuso

I have read check documentation: https://checkstyle.sourceforge.io/checks/coding/unnecessarysemicolonaftertypememberdeclaration.html#UnnecessarySemicolonAfterTypeMemberDeclaration
I have downloaded the latest checkstyle from: https://checkstyle.org/cmdline.html#Download_and_Run
I have executed the cli and showed it below, as cli describes the problem better than 1,000 words

➜  src javac SwitchScope.java 

➜  src cat SwitchScope.java 
public class SwitchScope {
    public static void main(String[] args) {
        switch (args.length) {
        case 0:
            final int k = 12;
            class Local {
                int j = k;
            }
        case 1:
        }
    }
}
                                                                                                           
➜  src 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">
  <property name="severity" value="error"/>
  <property name="fileExtensions" value="java, properties, xml"/>
  <module name="TreeWalker">
    <module name="UnnecessarySemicolonAfterTypeMemberDeclaration"/>
 </module>
</module>

➜  src java -jar checkstyle-10.12.1-all.jar -c config.xml SwitchScope.java 
Starting audit...
com.puppycrawl.tools.checkstyle.api.CheckstyleException: Exception was thrown while processing SwitchScope.java
        at com.puppycrawl.tools.checkstyle.Checker.processFiles(Checker.java:306)
        at com.puppycrawl.tools.checkstyle.Checker.process(Checker.java:223)
        at com.puppycrawl.tools.checkstyle.Main.runCheckstyle(Main.java:415)
        at com.puppycrawl.tools.checkstyle.Main.runCli(Main.java:338)
        at com.puppycrawl.tools.checkstyle.Main.execute(Main.java:195)
        at com.puppycrawl.tools.checkstyle.Main.main(Main.java:130)
Caused by: java.lang.NullPointerException: Cannot invoke "com.puppycrawl.tools.checkstyle.api.DetailAST.getType()" because "ast" is null
        at com.puppycrawl.tools.checkstyle.checks.coding.UnnecessarySemicolonAfterTypeMemberDeclarationCheck.isSemicolon(UnnecessarySemicolonAfterTypeMemberDeclarationCheck.java:236)
        at com.puppycrawl.tools.checkstyle.checks.coding.UnnecessarySemicolonAfterTypeMemberDeclarationCheck.checkTypeDefinition(UnnecessarySemicolonAfterTypeMemberDeclarationCheck.java:196)
        at com.puppycrawl.tools.checkstyle.checks.coding.UnnecessarySemicolonAfterTypeMemberDeclarationCheck.visitToken(UnnecessarySemicolonAfterTypeMemberDeclarationCheck.java:165)
        at com.puppycrawl.tools.checkstyle.TreeWalker.notifyVisit(TreeWalker.java:335)
        at com.puppycrawl.tools.checkstyle.TreeWalker.processIter(TreeWalker.java:406)
        at com.puppycrawl.tools.checkstyle.TreeWalker.walk(TreeWalker.java:273)
        at com.puppycrawl.tools.checkstyle.TreeWalker.processFiltered(TreeWalker.java:154)
        at com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck.process(AbstractFileSetCheck.java:98)
        at com.puppycrawl.tools.checkstyle.Checker.processFile(Checker.java:334)
        at com.puppycrawl.tools.checkstyle.Checker.processFiles(Checker.java:293)
        ... 5 more
Checkstyle ends with 1 errors.

Describe what you expect in detail.

I would expect this check not to throw a Null Pointer Exception on a local class declaration within a switch statement, even if this code is unusual.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions