Skip to content

Support Java 21 string template syntax #13830

Closed
@nandorholozsnyak

Description

I have executed the cli and showed it below, as cli describes the problem better than 1,000 words

❯ javac --enable-preview --release 21 src/main/java/HelloWorld.java
Note: src/main/java/HelloWorld.java uses preview features of Java SE 21.
Note: Recompile with -Xlint:preview for details.

/var/tmp $ 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="NewlineAtEndOfFile">
        <property name="lineSeparator" value="lf"/>
    </module>

    <module name="TreeWalker">
        <module name="UnusedImports"/>
    </module>
</module>


/var/tmp $ cat YOUR_FILE.java
public class HelloWorld {
    public static void main(String[] args) {
        int x = 10;
        int y = 20;
        String result = STR."\{x} + \{y} = \{x + y}";
        System.out.println(result);
    }
}

/var/tmp $ RUN_LOCALE="-Duser.language=en -Duser.country=US"
/var/tmp $ java $RUN_LOCALE -jar checkstyle-X.XX-all.jar -c config.xml YOUR_FILE.java
> java $RUN_LOCALE -jar checkstyle-10.12.4-all.jar -c checkstyle.xml src/main/java/HelloWorld.java 

Starting audit...
com.puppycrawl.tools.checkstyle.api.CheckstyleException: Exception was thrown while processing src/main/java/HelloWorld.java
        at com.puppycrawl.tools.checkstyle.Checker.processFiles(Checker.java:309)
        at com.puppycrawl.tools.checkstyle.Checker.process(Checker.java:226)
        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: com.puppycrawl.tools.checkstyle.api.CheckstyleException: IllegalStateException occurred while parsing file /home/xxx/VCS/own/checkstyle-java21-reproducer/src/main/java/HelloWorld.java.
        at com.puppycrawl.tools.checkstyle.JavaParser.parse(JavaParser.java:105)
        at com.puppycrawl.tools.checkstyle.TreeWalker.processFiltered(TreeWalker.java:152)
        at com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck.process(AbstractFileSetCheck.java:101)
        at com.puppycrawl.tools.checkstyle.Checker.processFile(Checker.java:337)
        at com.puppycrawl.tools.checkstyle.Checker.processFiles(Checker.java:296)
        ... 5 more
Caused by: java.lang.IllegalStateException: 6:32: mismatched input '}' expecting ';'
        at com.puppycrawl.tools.checkstyle.JavaParser$CheckstyleErrorListener.syntaxError(JavaParser.java:255)
        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.blockStatement(JavaLanguageParser.java:6190)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.block(JavaLanguageParser.java:6101)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.methodBody(JavaLanguageParser.java:2940)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.methodDeclaration(JavaLanguageParser.java:2898)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.memberDeclaration(JavaLanguageParser.java:2745)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.classBodyDeclaration(JavaLanguageParser.java:2671)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.classBody(JavaLanguageParser.java:2477)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.classDeclaration(JavaLanguageParser.java:1096)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.types(JavaLanguageParser.java:753)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.typeDeclaration(JavaLanguageParser.java:667)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.compilationUnit(JavaLanguageParser.java:414)
        at com.puppycrawl.tools.checkstyle.JavaParser.parse(JavaParser.java:99)
        ... 9 more
Caused by: org.antlr.v4.runtime.InputMismatchException
        ... 23 more
Checkstyle ends with 1 errors.

in place of the last 2 commands above.


Java 21 is out, and it has the new String Templates as a preview feature. I did not really go deeper but if the configuration is having TreeWalker module, with at least one entry, then the build fails with the above-mentioned error, and if it happens inside a Maven build it just fails. It fails at the following line: String result = STR."\{x} + \{y} = \{x + y}";

If the TreeWalker is not present or empty, it finishes successfuly. Will the Java 21 based preview features be supported in upcoming releases?


Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions