Skip to content

Add support for flexible constructor bodies (JEP 513) targeted for JDK25 #17052

@archiecobbs

Description

@archiecobbs

👍 I have read check documentation: https://checkstyle.org/checks/xxxxxx/nameofaffectedcheck.html
👍 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

Flexible constructor bodies (JEP 513) is targeted for JDK 25. That means it is leaving preview and will become standard Java with the release of JDK 25 this fall.

Therefore, checkstyle will need to support the new syntax. It doesn't yet:

$ javac -version
javac 25-internal
$ javac MyClass.java
# my config is google_checks.xml but it doesn't matter
$ cat MyClass.java
public class MyClass {
    public MyClass() {
        System.out.println("hello");
        super();
    }
}
$ RUN_LOCALE="-Duser.language=en -Duser.country=US"
$ java $RUN_LOCALE -jar checkstyle-10.23.1-all.jar -c google_checks.xml MyClass.java 
Starting audit...
com.puppycrawl.tools.checkstyle.api.CheckstyleException: Exception was thrown while processing MyClass.java
	at com.puppycrawl.tools.checkstyle.Checker.processFiles(Checker.java:312)
	at com.puppycrawl.tools.checkstyle.Checker.process(Checker.java:226)
	at com.puppycrawl.tools.checkstyle.Main.runCheckstyle(Main.java:424)
	at com.puppycrawl.tools.checkstyle.Main.runCli(Main.java:347)
	at com.puppycrawl.tools.checkstyle.Main.execute(Main.java:206)
	at com.puppycrawl.tools.checkstyle.Main.main(Main.java:130)
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: IllegalStateException occurred while parsing file /Users/archie/Downloads/checkstyle-bug/MyClass.java.
	at com.puppycrawl.tools.checkstyle.JavaParser.parse(JavaParser.java:104)
	at com.puppycrawl.tools.checkstyle.TreeWalker.processFiltered(TreeWalker.java:195)
	at com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck.process(AbstractFileSetCheck.java:101)
	at com.puppycrawl.tools.checkstyle.Checker.processFile(Checker.java:340)
	at com.puppycrawl.tools.checkstyle.Checker.processFiles(Checker.java:299)
	... 5 more
Caused by: java.lang.IllegalStateException: 3:26: mismatched input '(' expecting ';'
	at com.puppycrawl.tools.checkstyle.JavaParser$CheckstyleErrorListener.syntaxError(JavaParser.java:254)
	at org.antlr.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:41)
	at org.antlr.v4.runtime.Parser.notifyErrorListeners(Parser.java:544)
	at org.antlr.v4.runtime.DefaultErrorStrategy.reportInputMismatch(DefaultErrorStrategy.java:327)
	at org.antlr.v4.runtime.DefaultErrorStrategy.reportError(DefaultErrorStrategy.java:139)
	at com.puppycrawl.tools.checkstyle.CheckstyleParserErrorStrategy.recoverInline(CheckstyleParserErrorStrategy.java:38)
	at org.antlr.v4.runtime.Parser.match(Parser.java:208)
	at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.statement(JavaLanguageParser.java:7046)
	at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.blockStatement(JavaLanguageParser.java:6207)
	at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.constructorBlock(JavaLanguageParser.java:5920)
	at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.constructorDeclaration(JavaLanguageParser.java:3074)
	at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.memberDeclaration(JavaLanguageParser.java:2764)
	at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.classBodyDeclaration(JavaLanguageParser.java:2676)
	at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.classBody(JavaLanguageParser.java:2482)
	at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.classDeclaration(JavaLanguageParser.java:1101)
	at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.types(JavaLanguageParser.java:758)
	at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.typeDeclaration(JavaLanguageParser.java:672)
	at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.compilationUnit(JavaLanguageParser.java:419)
	at com.puppycrawl.tools.checkstyle.JavaParser.parse(JavaParser.java:98)
	... 9 more
Caused by: org.antlr.v4.runtime.InputMismatchException
	... 23 more
Checkstyle ends with 1 errors.

Expecting no crash.


Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions