Skip to content

OuterTypeFileName throws NPE on record definition in method #8598

@nrmancuso

Description

@nrmancuso

Check documentation: https://checkstyle.sourceforge.io/config_misc.html#OuterTypeFilename

➜  full-record-grammar /usr/lib/jvm/java-14-openjdk/bin/javac --enable-preview --source 14 TestClass.java
Note: TestClass.java uses preview language features.
Note: Recompile with -Xlint:preview for details.
➜  full-record-grammar 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="OuterTypeFilename"/>
  </module>
</module>
➜  full-record-grammar cat TestClass.java 
public class TestClass {
    class LocalRecordHelper {
        Class<?> m(int x) {
            record R76 (int x) { }
            return R76.class;
        }
    }
}
➜  full-record-grammar java $RUN_LOCALE -jar ~/IdeaProjects/checkstyle/target/checkstyle-8.36-SNAPSHOT-all.jar -c config.xml TestClass.java
Starting audit...
com.puppycrawl.tools.checkstyle.api.CheckstyleException: Exception was thrown while processing TestClass.java
	at com.puppycrawl.tools.checkstyle.Checker.processFiles(Checker.java:311)
	at com.puppycrawl.tools.checkstyle.Checker.process(Checker.java:221)
	at com.puppycrawl.tools.checkstyle.Main.runCheckstyle(Main.java:408)
	at com.puppycrawl.tools.checkstyle.Main.runCli(Main.java:331)
	at com.puppycrawl.tools.checkstyle.Main.execute(Main.java:190)
	at com.puppycrawl.tools.checkstyle.Main.main(Main.java:125)
Caused by: java.lang.NullPointerException
	at com.puppycrawl.tools.checkstyle.checks.OuterTypeFilenameCheck.visitToken(OuterTypeFilenameCheck.java:142)
	at com.puppycrawl.tools.checkstyle.TreeWalker.notifyVisit(TreeWalker.java:340)
	at com.puppycrawl.tools.checkstyle.TreeWalker.processIter(TreeWalker.java:451)
	at com.puppycrawl.tools.checkstyle.TreeWalker.walk(TreeWalker.java:278)
	at com.puppycrawl.tools.checkstyle.TreeWalker.processFiltered(TreeWalker.java:151)
	at com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck.process(AbstractFileSetCheck.java:87)
	at com.puppycrawl.tools.checkstyle.Checker.processFile(Checker.java:337)
	at com.puppycrawl.tools.checkstyle.Checker.processFiles(Checker.java:298)
	... 5 more
Checkstyle ends with 1 errors.

Relevant grammar from java.g:

// record declaration, note that you cannot have modifiers in this case
| recordDefinition[#null]

Since the modifiers AST is null when a record definition is inside of a method, a NPE is thrown here:

if (modifiers.findFirstToken(TokenTypes.LITERAL_PUBLIC) != null

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions