Repository: checkstyle/checkstyle

Problem statement:
Remove Support for String Template Syntax
We always take a risk supporting preview features, and try to wait until second/third/final preview to add support for new syntax, to improve the chance that a given feature will become a part of the language permanently. Of course, this is also driven by user demand.

Unfortunately, String Templates have been completely removed from JDK 23 (they are not even a preview feature). Since we have really only begun to implement them (text block templates are not supported, and no checks have really been updated), it is better to remove support completely now, than to end up supporting syntax that is not valid and updating a bunch of checks to only have to rewrite the grammar, build the AST, and update the checks all over again once the syntax is finalized.

**Enabling us to start with a clear slate when the new syntax is revealed will help us to deliver support much faster.**

It is doubtful that whatever the new (post JDK 23) String Template syntax will look the same, so we will have to break compatibility with the JDK 22 String Template syntax regardless.

From  https://mail.openjdk.org/pipermail/amber-spec-experts/2024-April/004106.html:

>So, to be clear: there will be no string template feature, even with --enable-preview, in JDK 23.



Hints:

Patch:
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/JavaAstVisitor.java b/src/main/java/com/puppycrawl/tools/checkstyle/JavaAstVisitor.java
--- a/src/main/java/com/puppycrawl/tools/checkstyle/JavaAstVisitor.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/JavaAstVisitor.java
@@ -23,7 +23,6 @@
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Objects;
 import java.util.Optional;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
@@ -104,9 +103,6 @@ public final class JavaAstVisitor extends JavaLanguageParserBaseVisitor<DetailAs
     /** String representation of the right shift operator. */
     private static final String RIGHT_SHIFT = ">>";
 
-    /** String representation of the double quote character. */
-    private static final String QUOTE = "\"";
-
     /**
      * The tokens here are technically expressions, but should
      * not return an EXPR token as their root.
@@ -1537,14 +1533,6 @@ public DetailAstImpl visitPrimaryExp(JavaLanguageParser.PrimaryExpContext ctx) {
         return flattenedTree(ctx);
     }
 
-    @Override
-    public DetailAstImpl visitTemplateExp(JavaLanguageParser.TemplateExpContext ctx) {
-        final DetailAstImpl dot = create(ctx.DOT());
-        dot.addChild(visit(ctx.expr()));
-        dot.addChild(visit(ctx.templateArgument()));
-        return dot;
-    }
-
     @Override
     public DetailAstImpl visitPostfix(JavaLanguageParser.PostfixContext ctx) {
         final DetailAstImpl postfix;
@@ -1754,137 +1742,6 @@ public DetailAstImpl visitPrimitivePrimary(JavaLanguageParser.PrimitivePrimaryCo
         return dot;
     }
 
-    @Override
-    public DetailAstImpl visitTemplateArgument(JavaLanguageParser.TemplateArgumentContext ctx) {
-        return Objects.requireNonNullElseGet(visit(ctx.template()),
-                () -> buildSimpleStringTemplateArgument(ctx));
-    }
-
-    /**
-     * Builds a simple string template argument AST, which basically means that we
-     * transform a string literal into a string template AST because it is a
-     * string template argument.
-     *
-     * @param ctx the TemplateArgumentContext to build AST from
-     * @return DetailAstImpl of string template argument
-     */
-    private static DetailAstImpl buildSimpleStringTemplateArgument(
-            JavaLanguageParser.TemplateArgumentContext ctx) {
-        final int startColumn = ctx.start.getCharPositionInLine();
-        final int endColumn = startColumn + ctx.getText().length() - 1;
-        final int lineNumber = ctx.start.getLine();
-
-        final DetailAstImpl templateArgument = createImaginary(
-                TokenTypes.STRING_TEMPLATE_BEGIN, QUOTE,
-                lineNumber, startColumn
-        );
-
-        final int quoteLength = QUOTE.length();
-        final int tokenTextLength = ctx.getText().length();
-
-        final String actualContent = ctx.getText()
-                    .substring(quoteLength, tokenTextLength - quoteLength);
-
-        final DetailAstImpl content = createImaginary(
-                TokenTypes.STRING_TEMPLATE_CONTENT, actualContent,
-                lineNumber, startColumn + quoteLength
-        );
-        templateArgument.addChild(content);
-
-        final DetailAstImpl end = createImaginary(
-                TokenTypes.STRING_TEMPLATE_END, QUOTE,
-                lineNumber, endColumn
-        );
-        templateArgument.addChild(end);
-
-        return templateArgument;
-    }
-
-    @Override
-    public DetailAstImpl visitStringTemplate(JavaLanguageParser.StringTemplateContext ctx) {
-        final DetailAstImpl stringTemplateBegin = visit(ctx.stringTemplateBegin());
-
-        final Optional<DetailAstImpl> expression = Optional.ofNullable(ctx.expr())
-                .map(this::visit);
-
-        if (expression.isPresent()) {
-            final DetailAstImpl imaginaryExpression =
-                    createImaginary(TokenTypes.EMBEDDED_EXPRESSION);
-            imaginaryExpression.addChild(expression.orElseThrow());
-            stringTemplateBegin.addChild(imaginaryExpression);
-        }
-
-        ctx.stringTemplateMiddle().stream()
-                .map(this::buildStringTemplateMiddle)
-                .forEach(stringTemplateBegin::addChild);
-
-        final DetailAstImpl stringTemplateEnd = visit(ctx.stringTemplateEnd());
-        stringTemplateBegin.addChild(stringTemplateEnd);
-        return stringTemplateBegin;
-    }
-
-    /**
-     * Builds a string template middle AST.
-     *
-     * @param ctx the StringTemplateMiddleContext to build AST from
-     * @return DetailAstImpl of string template middle
-     */
-    private DetailAstImpl buildStringTemplateMiddle(
-            JavaLanguageParser.StringTemplateMiddleContext ctx) {
-        final DetailAstImpl stringTemplateMiddle =
-                visit(ctx.stringTemplateMid());
-
-        final Optional<DetailAstImpl> expression = Optional.ofNullable(ctx.expr())
-                .map(this::visit);
-
-        if (expression.isPresent()) {
-            final DetailAstImpl imaginaryExpression =
-                    createImaginary(TokenTypes.EMBEDDED_EXPRESSION);
-            imaginaryExpression.addChild(expression.orElseThrow());
-            addLastSibling(stringTemplateMiddle, imaginaryExpression);
-        }
-
-        return stringTemplateMiddle;
-    }
-
-    @Override
-    public DetailAstImpl visitStringTemplateBegin(
-            JavaLanguageParser.StringTemplateBeginContext ctx) {
-        final DetailAstImpl stringTemplateBegin =
-                create(ctx.STRING_TEMPLATE_BEGIN());
-        final Optional<DetailAstImpl> stringTemplateContent =
-                Optional.ofNullable(ctx.STRING_TEMPLATE_CONTENT())
-                        .map(this::create);
-        stringTemplateContent.ifPresent(stringTemplateBegin::addChild);
-        final DetailAstImpl embeddedExpressionBegin = create(ctx.EMBEDDED_EXPRESSION_BEGIN());
-        stringTemplateBegin.addChild(embeddedExpressionBegin);
-        return stringTemplateBegin;
-    }
-
-    @Override
-    public DetailAstImpl visitStringTemplateMid(JavaLanguageParser.StringTemplateMidContext ctx) {
-        final DetailAstImpl embeddedExpressionEnd = create(ctx.EMBEDDED_EXPRESSION_END());
-        final Optional<DetailAstImpl> stringTemplateContent =
-                Optional.ofNullable(ctx.STRING_TEMPLATE_CONTENT())
-                        .map(this::create);
-        stringTemplateContent.ifPresent(self -> addLastSibling(embeddedExpressionEnd, self));
-        final DetailAstImpl embeddedExpressionBegin = create(ctx.EMBEDDED_EXPRESSION_BEGIN());
-        addLastSibling(embeddedExpressionEnd, embeddedExpressionBegin);
-        return embeddedExpressionEnd;
-    }
-
-    @Override
-    public DetailAstImpl visitStringTemplateEnd(JavaLanguageParser.StringTemplateEndContext ctx) {
-        final DetailAstImpl embeddedExpressionEnd = create(ctx.EMBEDDED_EXPRESSION_END());
-        final Optional<DetailAstImpl> stringTemplateContent =
-                Optional.ofNullable(ctx.STRING_TEMPLATE_CONTENT())
-                        .map(this::create);
-        stringTemplateContent.ifPresent(self -> addLastSibling(embeddedExpressionEnd, self));
-        final DetailAstImpl stringTemplateEnd = create(ctx.STRING_TEMPLATE_END());
-        addLastSibling(embeddedExpressionEnd, stringTemplateEnd);
-        return embeddedExpressionEnd;
-    }
-
     @Override
     public DetailAstImpl visitCreator(JavaLanguageParser.CreatorContext ctx) {
         return flattenedTree(ctx);
@@ -2252,39 +2109,6 @@ private static DetailAstImpl createImaginary(int tokenType) {
         return detailAst;
     }
 
-    /**
-     * Create a DetailAstImpl from a given token type and text. This method
-     * should be used for imaginary nodes only, i.e. 'OBJBLOCK -&gt; OBJBLOCK',
-     * where the text on the RHS matches the text on the LHS.
-     *
-     * @param tokenType the token type of this DetailAstImpl
-     * @param text the text of this DetailAstImpl
-     * @return new DetailAstImpl of given type
-     */
-    private static DetailAstImpl createImaginary(int tokenType, String text) {
-        final DetailAstImpl imaginary = new DetailAstImpl();
-        imaginary.setType(tokenType);
-        imaginary.setText(text);
-        return imaginary;
-    }
-
-    /**
-     * Creates an imaginary DetailAstImpl with the given token details.
-     *
-     * @param tokenType the token type of this DetailAstImpl
-     * @param text the text of this DetailAstImpl
-     * @param lineNumber the line number of this DetailAstImpl
-     * @param columnNumber the column number of this DetailAstImpl
-     * @return imaginary DetailAstImpl from given details
-     */
-    private static DetailAstImpl createImaginary(
-            int tokenType, String text, int lineNumber, int columnNumber) {
-        final DetailAstImpl imaginary = createImaginary(tokenType, text);
-        imaginary.setLineNo(lineNumber);
-        imaginary.setColumnNo(columnNumber);
-        return imaginary;
-    }
-
     /**
      * Create a DetailAstImpl from a given token and token type. This method
      * should be used for literal nodes only, i.e. 'PACKAGE_DEF -&gt; package'.
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/JavaParser.java b/src/main/java/com/puppycrawl/tools/checkstyle/JavaParser.java
--- a/src/main/java/com/puppycrawl/tools/checkstyle/JavaParser.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/JavaParser.java
@@ -40,7 +40,6 @@
 import com.puppycrawl.tools.checkstyle.api.FileContents;
 import com.puppycrawl.tools.checkstyle.api.FileText;
 import com.puppycrawl.tools.checkstyle.api.TokenTypes;
-import com.puppycrawl.tools.checkstyle.grammar.CompositeLexerContextCache;
 import com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageLexer;
 import com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser;
 import com.puppycrawl.tools.checkstyle.utils.ParserUtil;
@@ -85,9 +84,7 @@ public static DetailAST parse(FileContents contents)
         final String fullText = contents.getText().getFullText().toString();
         final CharStream codePointCharStream = CharStreams.fromString(fullText);
         final JavaLanguageLexer lexer = new JavaLanguageLexer(codePointCharStream, true);
-        final CompositeLexerContextCache contextCache = new CompositeLexerContextCache(lexer);
         lexer.setCommentListener(contents);
-        lexer.setContextCache(contextCache);
 
         final CommonTokenStream tokenStream = new CommonTokenStream(lexer);
         final JavaLanguageParser parser =
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/api/TokenTypes.java b/src/main/java/com/puppycrawl/tools/checkstyle/api/TokenTypes.java
--- a/src/main/java/com/puppycrawl/tools/checkstyle/api/TokenTypes.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/api/TokenTypes.java
@@ -6461,288 +6461,6 @@ public final class TokenTypes {
     public static final int RECORD_PATTERN_COMPONENTS =
             JavaLanguageLexer.RECORD_PATTERN_COMPONENTS;
 
-    /**
-     * A string template opening delimiter. This element ({@code "}) appears
-     * at the beginning of a string template.
-     * <p>For example:</p>
-     * <pre>
-     *     String s = STR."Hello, \{firstName + " " + lastName}!";
-     * </pre>
-     * <p>parses as:</p>
-     * <pre>
-     * VARIABLE_DEF -&gt; VARIABLE_DEF
-     *  |--MODIFIERS -&gt; MODIFIERS
-     *  |--TYPE -&gt; TYPE
-     *  |   `--IDENT -&gt; String
-     *  |--IDENT -&gt; s
-     *  `--ASSIGN -&gt; =
-     *      `--EXPR -&gt; EXPR
-     *          `--DOT -&gt; .
-     *              |--IDENT -&gt; STR
-     *              `--STRING_TEMPLATE_BEGIN -&gt; "
-     *                  |--STRING_TEMPLATE_CONTENT -&gt; Hello,
-     *                  |--EMBEDDED_EXPRESSION_BEGIN -&gt; \{
-     *                  |--EMBEDDED_EXPRESSION -&gt; EMBEDDED_EXPRESSION
-     *                  |   `--PLUS -&gt; +
-     *                  |       |--PLUS -&gt; +
-     *                  |       |   |--IDENT -&gt; firstName
-     *                  |       |   `--STRING_LITERAL -&gt; " "
-     *                  |       `--IDENT -&gt; lastName
-     *                  |--EMBEDDED_EXPRESSION_END -&gt; }
-     *                  |--STRING_TEMPLATE_CONTENT -&gt; !
-     *                  `--STRING_TEMPLATE_END -&gt; "
-     * </pre>
-     *
-     * @see #STRING_TEMPLATE_END
-     * @see #STRING_TEMPLATE_CONTENT
-     * @see #EMBEDDED_EXPRESSION_BEGIN
-     * @see #EMBEDDED_EXPRESSION
-     * @see #EMBEDDED_EXPRESSION_END
-     * @see #STRING_LITERAL
-     *
-     * @since 10.13.0
-     */
-    public static final int STRING_TEMPLATE_BEGIN =
-            JavaLanguageLexer.STRING_TEMPLATE_BEGIN;
-
-    /**
-     * A string template closing delimiter. This element ({@code "}) appears
-     * at the end of a string template.
-     * <p>For example:</p>
-     * <pre>
-     *     String s = STR."Hello, \{firstName + " " + lastName}!";
-     * </pre>
-     * <p>parses as:</p>
-     * <pre>
-     * VARIABLE_DEF -&gt; VARIABLE_DEF
-     *  |--MODIFIERS -&gt; MODIFIERS
-     *  |--TYPE -&gt; TYPE
-     *  |   `--IDENT -&gt; String
-     *  |--IDENT -&gt; s
-     *  `--ASSIGN -&gt; =
-     *      `--EXPR -&gt; EXPR
-     *          `--DOT -&gt; .
-     *              |--IDENT -&gt; STR
-     *              `--STRING_TEMPLATE_BEGIN -&gt; "
-     *                  |--STRING_TEMPLATE_CONTENT -&gt; Hello,
-     *                  |--EMBEDDED_EXPRESSION_BEGIN -&gt; \{
-     *                  |--EMBEDDED_EXPRESSION -&gt; EMBEDDED_EXPRESSION
-     *                  |   `--PLUS -&gt; +
-     *                  |       |--PLUS -&gt; +
-     *                  |       |   |--IDENT -&gt; firstName
-     *                  |       |   `--STRING_LITERAL -&gt; " "
-     *                  |       `--IDENT -&gt; lastName
-     *                  |--EMBEDDED_EXPRESSION_END -&gt; }
-     *                  |--STRING_TEMPLATE_CONTENT -&gt; !
-     *                  `--STRING_TEMPLATE_END -&gt; "
-     * </pre>
-     *
-     * @see #STRING_TEMPLATE_END
-     * @see #STRING_TEMPLATE_CONTENT
-     * @see #EMBEDDED_EXPRESSION_BEGIN
-     * @see #EMBEDDED_EXPRESSION
-     * @see #EMBEDDED_EXPRESSION_END
-     * @see #STRING_LITERAL
-     *
-     * @since 10.13.0
-     */
-    public static final int STRING_TEMPLATE_END =
-            JavaLanguageLexer.STRING_TEMPLATE_END;
-
-    /**
-     * The (possibly empty) content of a string template. A given string
-     * template may have more than one node of this type.
-     * <p>For example:</p>
-     * <pre>
-     *     String s = STR."Hello, \{firstName + " " + lastName}";
-     * </pre>
-     * <p>parses as:</p>
-     * <pre>
-     * VARIABLE_DEF -&gt; VARIABLE_DEF
-     *  |--MODIFIERS -&gt; MODIFIERS
-     *  |--TYPE -&gt; TYPE
-     *  |   `--IDENT -&gt; String
-     *  |--IDENT -&gt; s
-     *  `--ASSIGN -&gt; =
-     *      `--EXPR -&gt; EXPR
-     *          `--DOT -&gt; .
-     *              |--IDENT -&gt; STR
-     *              `--STRING_TEMPLATE_BEGIN -&gt; "
-     *                  |--STRING_TEMPLATE_CONTENT -&gt; Hello,
-     *                  |--EMBEDDED_EXPRESSION_BEGIN -&gt; \{
-     *                  |--EMBEDDED_EXPRESSION -&gt; EMBEDDED_EXPRESSION
-     *                  |   `--PLUS -&gt; +
-     *                  |       |--PLUS -&gt; +
-     *                  |       |   |--IDENT -&gt; firstName
-     *                  |       |   `--STRING_LITERAL -&gt; " "
-     *                  |       `--IDENT -&gt; lastName
-     *                  |--EMBEDDED_EXPRESSION_END -&gt; }
-     *                  `--STRING_TEMPLATE_END -&gt; "
-     * </pre>
-     *
-     * @see #STRING_TEMPLATE_END
-     * @see #STRING_TEMPLATE_CONTENT
-     * @see #EMBEDDED_EXPRESSION_BEGIN
-     * @see #EMBEDDED_EXPRESSION
-     * @see #EMBEDDED_EXPRESSION_END
-     * @see #STRING_LITERAL
-     *
-     * @since 10.13.0
-     */
-    public static final int STRING_TEMPLATE_CONTENT =
-            JavaLanguageLexer.STRING_TEMPLATE_CONTENT;
-
-    /**
-     * The opening delimiter of an embedded expression within a string template.
-     * <p>For example:</p>
-     * <pre>
-     *     String s = STR."Hello, \{getName("Mr. ", firstName, lastName)}!";
-     * </pre>
-     * <p>parses as:</p>
-     * <pre>
-     * VARIABLE_DEF -&gt; VARIABLE_DEF
-     *  |--MODIFIERS -&gt; MODIFIERS
-     *  |--TYPE -&gt; TYPE
-     *  |   `--IDENT -&gt; String
-     *  |--IDENT -&gt; s
-     *  `--ASSIGN -&gt; =
-     *      `--EXPR -&gt; EXPR
-     *          `--DOT -&gt; .
-     *              |--IDENT -&gt; STR
-     *              `--STRING_TEMPLATE_BEGIN -&gt; "
-     *                  |--STRING_TEMPLATE_CONTENT -&gt; Hello,
-     *                  |--EMBEDDED_EXPRESSION_BEGIN -&gt; \{
-     *                  |--EMBEDDED_EXPRESSION -&gt; EMBEDDED_EXPRESSION
-     *                  |   `--METHOD_CALL -&gt; (
-     *                  |       |--IDENT -&gt; getName
-     *                  |       |--ELIST -&gt; ELIST
-     *                  |       |   |--EXPR -&gt; EXPR
-     *                  |       |   |   `--STRING_LITERAL -&gt; "Mr. "
-     *                  |       |   |--COMMA -&gt; ,
-     *                  |       |   |--EXPR -&gt; EXPR
-     *                  |       |   |   `--IDENT -&gt; firstName
-     *                  |       |   |--COMMA -&gt; ,
-     *                  |       |   `--EXPR -&gt; EXPR
-     *                  |       |       `--IDENT -&gt; lastName
-     *                  |       `--RPAREN -&gt; )
-     *                  |--EMBEDDED_EXPRESSION_END -&gt; }
-     *                  |--STRING_TEMPLATE_CONTENT -&gt; !
-     *                  `--STRING_TEMPLATE_END -&gt; "
-     * </pre>
-     *
-     * @see #STRING_TEMPLATE_END
-     * @see #STRING_TEMPLATE_CONTENT
-     * @see #EMBEDDED_EXPRESSION_BEGIN
-     * @see #EMBEDDED_EXPRESSION
-     * @see #EMBEDDED_EXPRESSION_END
-     * @see #STRING_LITERAL
-     *
-     * @since 10.13.0
-     */
-    public static final int EMBEDDED_EXPRESSION_BEGIN =
-            JavaLanguageLexer.EMBEDDED_EXPRESSION_BEGIN;
-
-    /**
-     * An expression embedded within a string template.
-     * <p>For example:</p>
-     * <pre>
-     *     String s = STR."Hello, \{getName("Mr. ", firstName, lastName)}!";
-     * </pre>
-     * <p>parses as:</p>
-     * <pre>
-     * VARIABLE_DEF -&gt; VARIABLE_DEF
-     *  |--MODIFIERS -&gt; MODIFIERS
-     *  |--TYPE -&gt; TYPE
-     *  |   `--IDENT -&gt; String
-     *  |--IDENT -&gt; s
-     *  `--ASSIGN -&gt; =
-     *      `--EXPR -&gt; EXPR
-     *          `--DOT -&gt; .
-     *              |--IDENT -&gt; STR
-     *              `--STRING_TEMPLATE_BEGIN -&gt; "
-     *                  |--STRING_TEMPLATE_CONTENT -&gt; Hello,
-     *                  |--EMBEDDED_EXPRESSION_BEGIN -&gt; \{
-     *                  |--EMBEDDED_EXPRESSION -&gt; EMBEDDED_EXPRESSION
-     *                  |   `--METHOD_CALL -&gt; (
-     *                  |       |--IDENT -&gt; getName
-     *                  |       |--ELIST -&gt; ELIST
-     *                  |       |   |--EXPR -&gt; EXPR
-     *                  |       |   |   `--STRING_LITERAL -&gt; "Mr. "
-     *                  |       |   |--COMMA -&gt; ,
-     *                  |       |   |--EXPR -&gt; EXPR
-     *                  |       |   |   `--IDENT -&gt; firstName
-     *                  |       |   |--COMMA -&gt; ,
-     *                  |       |   `--EXPR -&gt; EXPR
-     *                  |       |       `--IDENT -&gt; lastName
-     *                  |       `--RPAREN -&gt; )
-     *                  |--EMBEDDED_EXPRESSION_END -&gt; }
-     *                  |--STRING_TEMPLATE_CONTENT -&gt; !
-     *                  `--STRING_TEMPLATE_END -&gt; "
-     * </pre>
-     *
-     * @see #STRING_TEMPLATE_END
-     * @see #STRING_TEMPLATE_CONTENT
-     * @see #EMBEDDED_EXPRESSION_BEGIN
-     * @see #EMBEDDED_EXPRESSION
-     * @see #EMBEDDED_EXPRESSION_END
-     * @see #STRING_LITERAL
-     *
-     * @since 10.13.0
-     */
-    public static final int EMBEDDED_EXPRESSION =
-            JavaLanguageLexer.EMBEDDED_EXPRESSION;
-
-    /**
-     * The closing delimiter of an embedded expression within a string
-     * template.
-     * <p>For example:</p>
-     * <pre>
-     *     String s = STR."Hello, \{getName("Mr. ", firstName, lastName)}!";
-     * </pre>
-     * <p>parses as:</p>
-     * <pre>
-     * VARIABLE_DEF -&gt; VARIABLE_DEF
-     *  |--MODIFIERS -&gt; MODIFIERS
-     *  |--TYPE -&gt; TYPE
-     *  |   `--IDENT -&gt; String
-     *  |--IDENT -&gt; s
-     *  `--ASSIGN -&gt; =
-     *      `--EXPR -&gt; EXPR
-     *          `--DOT -&gt; .
-     *              |--IDENT -&gt; STR
-     *              `--STRING_TEMPLATE_BEGIN -&gt; "
-     *                  |--STRING_TEMPLATE_CONTENT -&gt; Hello,
-     *                  |--EMBEDDED_EXPRESSION_BEGIN -&gt; \{
-     *                  |--EMBEDDED_EXPRESSION -&gt; EMBEDDED_EXPRESSION
-     *                  |   `--METHOD_CALL -&gt; (
-     *                  |       |--IDENT -&gt; getName
-     *                  |       |--ELIST -&gt; ELIST
-     *                  |       |   |--EXPR -&gt; EXPR
-     *                  |       |   |   `--STRING_LITERAL -&gt; "Mr. "
-     *                  |       |   |--COMMA -&gt; ,
-     *                  |       |   |--EXPR -&gt; EXPR
-     *                  |       |   |   `--IDENT -&gt; firstName
-     *                  |       |   |--COMMA -&gt; ,
-     *                  |       |   `--EXPR -&gt; EXPR
-     *                  |       |       `--IDENT -&gt; lastName
-     *                  |       `--RPAREN -&gt; )
-     *                  |--EMBEDDED_EXPRESSION_END -&gt; }
-     *                  |--STRING_TEMPLATE_CONTENT -&gt; !
-     *                  `--STRING_TEMPLATE_END -&gt; "
-     * </pre>
-     *
-     * @see #STRING_TEMPLATE_END
-     * @see #STRING_TEMPLATE_CONTENT
-     * @see #EMBEDDED_EXPRESSION_BEGIN
-     * @see #EMBEDDED_EXPRESSION
-     * @see #EMBEDDED_EXPRESSION_END
-     * @see #STRING_LITERAL
-     *
-     * @since 10.13.0
-     */
-    public static final int EMBEDDED_EXPRESSION_END =
-            JavaLanguageLexer.EMBEDDED_EXPRESSION_END;
-
     /**
      * An unnamed pattern variable definition. Appears as part of a pattern definition.
      * <p>For example:</p>
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/grammar/CompositeLexerContextCache.java b/src/main/java/com/puppycrawl/tools/checkstyle/grammar/CompositeLexerContextCache.java
deleted file mode 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/grammar/CompositeLexerContextCache.java
+++ /dev/null
@@ -1,163 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////
-// checkstyle: Checks Java source code and other text files for adherence to a set of rules.
-// Copyright (C) 2001-2024 the original author or authors.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-///////////////////////////////////////////////////////////////////////////////////////////////
-
-package com.puppycrawl.tools.checkstyle.grammar;
-
-import java.util.ArrayDeque;
-import java.util.Deque;
-
-import org.antlr.v4.runtime.Lexer;
-
-import com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageLexer;
-
-/**
- * This class is used to keep track of the lexer context to help us determine
- * when to switch lexer modes.
- */
-public final class CompositeLexerContextCache {
-
-    /** Stack for tracking string template contexts. */
-    private final Deque<StringTemplateContext> stringTemplateContextStack;
-
-    /** The lexer to use. */
-    private final Lexer lexer;
-
-    /**
-     * Creates a new CompositeLexerContextCache instance.
-     *
-     * @param lexer the lexer to use
-     */
-    public CompositeLexerContextCache(Lexer lexer) {
-        stringTemplateContextStack = new ArrayDeque<>();
-        this.lexer = lexer;
-    }
-
-    /**
-     * Enter a string template context.
-     *
-     * @param mode the lexer mode to enter
-     */
-    public void enterTemplateContext(int mode) {
-        final StringTemplateContext newContext =
-                new StringTemplateContext(mode, 0);
-        stringTemplateContextStack.push(newContext);
-        lexer.pushMode(mode);
-    }
-
-    /**
-     * Exit a string template context.
-     */
-    public void exitTemplateContext() {
-        stringTemplateContextStack.pop();
-        lexer.popMode();
-    }
-
-    /**
-     * Update the left curly brace context if we are in a string template.
-     */
-    public void updateLeftCurlyBraceContext() {
-        if (isInStringTemplateContext()) {
-            final StringTemplateContext currentContext = stringTemplateContextStack.pop();
-            final StringTemplateContext newContext = new StringTemplateContext(
-                    currentContext.getMode(),
-                    currentContext.getCurlyBraceDepth() + 1
-            );
-            stringTemplateContextStack.push(newContext);
-        }
-    }
-
-    /**
-     * Update the right curly brace context if we are in a string template.
-     */
-    public void updateRightCurlyBraceContext() {
-        if (isInStringTemplateContext()) {
-            final StringTemplateContext currentContext = stringTemplateContextStack.pop();
-            if (currentContext.getCurlyBraceDepth() == 0) {
-                // This right curly brace is the start delimiter
-                // of a template middle or end. We consume
-                // the right curly brace to be used as the first token
-                // in the appropriate lexer mode rule, enter
-                // the corresponding lexer mode, and keep consuming
-                // the rest of the template middle or end.
-                stringTemplateContextStack.push(currentContext);
-                lexer.setType(JavaLanguageLexer.EMBEDDED_EXPRESSION_END);
-                lexer.pushMode(currentContext.getMode());
-            }
-            else {
-                // We've consumed a right curly brace within an embedded expression.
-                final StringTemplateContext newContext = new StringTemplateContext(
-                        currentContext.getMode(),
-                        currentContext.getCurlyBraceDepth() - 1
-                );
-                stringTemplateContextStack.push(newContext);
-            }
-        }
-    }
-
-    /**
-     * Check if we are in a string template context.
-     *
-     * @return true if we are in a string template context
-     */
-    private boolean isInStringTemplateContext() {
-        return !stringTemplateContextStack.isEmpty();
-    }
-
-    /**
-     * A class to represent the context of a string template.
-     */
-    private static final class StringTemplateContext {
-
-        /** The lexer mode of this context. */
-        private final int mode;
-
-        /** The depth of this context. */
-        private final int curlyBraceDepth;
-
-        /**
-         * Creates a new TemplateContext instance.
-         *
-         * @param mode the lexer mode of this context
-         * @param curlyBraceDepth the depth of this context
-         */
-        private StringTemplateContext(int mode, int curlyBraceDepth) {
-            this.mode = mode;
-            this.curlyBraceDepth = curlyBraceDepth;
-        }
-
-        /**
-         * Get the lexer mode of this context.
-         *
-         * @return current lexer mode
-         */
-        public int getMode() {
-            return mode;
-        }
-
-        /**
-         * Current depth of this context.
-         *
-         * @return current depth
-         */
-        public int getCurlyBraceDepth() {
-            return curlyBraceDepth;
-        }
-    }
-
-}


Test patch:
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/JavaAstVisitorTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/JavaAstVisitorTest.java
--- a/src/test/java/com/puppycrawl/tools/checkstyle/JavaAstVisitorTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/JavaAstVisitorTest.java
@@ -41,7 +41,6 @@
 import com.puppycrawl.tools.checkstyle.api.FileContents;
 import com.puppycrawl.tools.checkstyle.api.FileText;
 import com.puppycrawl.tools.checkstyle.api.TokenTypes;
-import com.puppycrawl.tools.checkstyle.grammar.CompositeLexerContextCache;
 import com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageLexer;
 import com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser;
 import com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParserBaseVisitor;
@@ -89,12 +88,7 @@ public class JavaAstVisitorTest extends AbstractModuleTestSupport {
             "visitClassType",
             "visitClassOrInterfaceTypeExtended",
             "visitQualifiedNameExtended",
-            "visitGuard",
-
-            // until removal in https://github.com/checkstyle/checkstyle/issues/14805
-            "visitTemplate",
-            // handled as a list in the parent rule
-            "visitStringTemplateMiddle"
+            "visitGuard"
     );
 
     @Override
@@ -186,7 +180,7 @@ public void countExprUsagesInParserGrammar() throws IOException {
 
         // Any time we update this count, we should question why we are not building an imaginary
         // 'EXPR' node.
-        final int expectedExprCount = 45;
+        final int expectedExprCount = 44;
 
         assertWithMessage("The 'expr' parser rule does not build an imaginary"
                 + " 'EXPR' node. Any usage of this rule should be questioned.")
@@ -279,9 +273,7 @@ public void testNoStackOverflowOnDeepStringConcat() throws Exception {
         final String fullText = contents.getText().getFullText().toString();
         final CharStream codePointCharStream = CharStreams.fromString(fullText);
         final JavaLanguageLexer lexer = new JavaLanguageLexer(codePointCharStream, true);
-        final CompositeLexerContextCache contextCache = new CompositeLexerContextCache(lexer);
         lexer.setCommentListener(contents);
-        lexer.setContextCache(contextCache);
 
         final CommonTokenStream tokenStream = new CommonTokenStream(lexer);
         final JavaLanguageParser parser = new JavaLanguageParser(tokenStream);
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenTextCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenTextCheckTest.java
--- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenTextCheckTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenTextCheckTest.java
@@ -161,7 +161,7 @@ public void testOrderOfProperties() {
 
     @Test
     public void testAcceptableTokensMakeSense() {
-        final int expectedTokenTypesTotalNumber = 195;
+        final int expectedTokenTypesTotalNumber = 189;
         assertWithMessage("Total number of TokenTypes has changed, acceptable tokens in"
                 + " IllegalTokenTextCheck need to be reconsidered.")
             .that(TokenUtil.getTokenTypesTotalNumber())
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/grammar/GeneratedJavaTokenTypesTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/grammar/GeneratedJavaTokenTypesTest.java
--- a/src/test/java/com/puppycrawl/tools/checkstyle/grammar/GeneratedJavaTokenTypesTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/grammar/GeneratedJavaTokenTypesTest.java
@@ -736,27 +736,6 @@ public void testTokenNumbering() {
         assertWithMessage(message)
              .that(JavaLanguageLexer.RECORD_PATTERN_COMPONENTS)
              .isEqualTo(216);
-        assertWithMessage(message)
-            .that(JavaLanguageLexer.STRING_TEMPLATE_BEGIN)
-            .isEqualTo(217);
-        assertWithMessage(message)
-            .that(JavaLanguageLexer.STRING_TEMPLATE_MID)
-            .isEqualTo(218);
-        assertWithMessage(message)
-            .that(JavaLanguageLexer.STRING_TEMPLATE_END)
-            .isEqualTo(219);
-        assertWithMessage(message)
-            .that(JavaLanguageLexer.STRING_TEMPLATE_CONTENT)
-            .isEqualTo(220);
-        assertWithMessage(message)
-            .that(JavaLanguageLexer.EMBEDDED_EXPRESSION_BEGIN)
-            .isEqualTo(221);
-        assertWithMessage(message)
-            .that(JavaLanguageLexer.EMBEDDED_EXPRESSION)
-            .isEqualTo(222);
-        assertWithMessage(message)
-            .that(JavaLanguageLexer.EMBEDDED_EXPRESSION_END)
-            .isEqualTo(223);
         assertWithMessage(message)
             .that(JavaLanguageLexer.LITERAL_UNDERSCORE)
             .isEqualTo(224);
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/grammar/java21/Java21AstRegressionTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/grammar/java21/Java21AstRegressionTest.java
--- a/src/test/java/com/puppycrawl/tools/checkstyle/grammar/java21/Java21AstRegressionTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/grammar/java21/Java21AstRegressionTest.java
@@ -37,48 +37,6 @@ protected String getPackageLocation() {
         return "com/puppycrawl/tools/checkstyle/grammar/java21";
     }
 
-    @Test
-    public void testBasicStringTemplate() throws Exception {
-        verifyAst(
-                getNonCompilablePath(
-                        "ExpectedStringTemplateBasic.txt"),
-                getNonCompilablePath(
-                        "InputStringTemplateBasic.java"));
-    }
-
-    /**
-     * The purpose of this test is to exercise the
-     * {@link com.puppycrawl.tools.checkstyle.grammar.CompositeLexerContextCache}:
-     * getting some curly brace contexts on the stack, making sure that each
-     * element in the stack has some depth. This ensures that we can handle
-     * many nested curly braces within an embedded template expression.
-     *
-     * @throws Exception upon failure
-     */
-    @Test
-    public void testStringTemplateNested() throws Exception {
-        verifyAst(
-                getNonCompilablePath(
-                        "ExpectedStringTemplateNested.txt"),
-                getNonCompilablePath(
-                        "InputStringTemplateNested.java"));
-    }
-
-    /**
-     * Test for tabs instead of spaces in the input file.
-     * All node columns are -3 when compared to the above test. This is
-     * because the input file has tabs instead of spaces. '\t' is
-     * one character vs. four spaces.
-     */
-    @Test
-    public void testBasicStringTemplateWithTabs() throws Exception {
-        verifyAst(
-                getNonCompilablePath(
-                        "ExpectedStringTemplateBasicWithTabs.txt"),
-                getNonCompilablePath(
-                        "InputStringTemplateBasicWithTabs.java"));
-    }
-
     @Test
     public void testUnnamedVariableBasic() throws Exception {
         verifyAst(
@@ -106,17 +64,6 @@ public void testTextBlockConsecutiveEscapes() throws Exception {
                         "InputTextBlockConsecutiveEscapes.java"));
     }
 
-    @Test
-    public void testStringTemplateMultiLineWithComments() throws Exception {
-        verifyAst(
-                getNonCompilablePath(
-                        "ExpectedStringTemplateMultiLineWithComments.txt"),
-                getNonCompilablePath(
-                        "InputStringTemplateMultiLineWithComments.java"),
-                JavaParser.Options.WITH_COMMENTS
-        );
-    }
-
     /**
      * Unusual test case, but important to prevent regressions. We need to
      * make sure that we only consume legal escapes in text blocks, and
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/utils/TokenUtilTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/utils/TokenUtilTest.java
--- a/src/test/java/com/puppycrawl/tools/checkstyle/utils/TokenUtilTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/utils/TokenUtilTest.java
@@ -228,7 +228,7 @@ public void testGetTokenTypesTotalNumber() {
 
         assertWithMessage("Invalid token total number")
             .that(tokenTypesTotalNumber)
-            .isEqualTo(195);
+            .isEqualTo(189);
     }
 
     @Test
@@ -238,10 +238,10 @@ public void testGetAllTokenIds() {
 
         assertWithMessage("Invalid token length")
             .that(allTokenIds.length)
-            .isEqualTo(195);
+            .isEqualTo(189);
         assertWithMessage("invalid sum")
             .that(sum)
-            .isEqualTo(21142);
+            .isEqualTo(19820);
     }
 
     @Test
diff --git a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/ExpectedStringTemplateBasic.txt b/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/ExpectedStringTemplateBasic.txt
deleted file mode 100644
--- a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/ExpectedStringTemplateBasic.txt
+++ /dev/null
@@ -1,564 +0,0 @@
-COMPILATION_UNIT -> COMPILATION_UNIT [2:0]
-|--PACKAGE_DEF -> package [2:0]
-|   |--ANNOTATIONS -> ANNOTATIONS [2:47]
-|   |--DOT -> . [2:47]
-|   |   |--DOT -> . [2:39]
-|   |   |   |--DOT -> . [2:28]
-|   |   |   |   |--DOT -> . [2:22]
-|   |   |   |   |   |--DOT -> . [2:11]
-|   |   |   |   |   |   |--IDENT -> com [2:8]
-|   |   |   |   |   |   `--IDENT -> puppycrawl [2:12]
-|   |   |   |   |   `--IDENT -> tools [2:23]
-|   |   |   |   `--IDENT -> checkstyle [2:29]
-|   |   |   `--IDENT -> grammar [2:40]
-|   |   `--IDENT -> java21 [2:48]
-|   `--SEMI -> ; [2:54]
-|--IMPORT -> import [4:0]
-|   |--DOT -> . [4:16]
-|   |   |--DOT -> . [4:11]
-|   |   |   |--IDENT -> java [4:7]
-|   |   |   `--IDENT -> util [4:12]
-|   |   `--IDENT -> List [4:17]
-|   `--SEMI -> ; [4:21]
-`--CLASS_DEF -> CLASS_DEF [6:0]
-    |--MODIFIERS -> MODIFIERS [6:0]
-    |   `--LITERAL_PUBLIC -> public [6:0]
-    |--LITERAL_CLASS -> class [6:7]
-    |--IDENT -> InputStringTemplateBasic [6:13]
-    `--OBJBLOCK -> OBJBLOCK [6:38]
-        |--LCURLY -> { [6:38]
-        |--VARIABLE_DEF -> VARIABLE_DEF [7:4]
-        |   |--MODIFIERS -> MODIFIERS [7:4]
-        |   |--TYPE -> TYPE [7:4]
-        |   |   `--LITERAL_INT -> int [7:4]
-        |   |--IDENT -> x [7:8]
-        |   |--ASSIGN -> = [7:10]
-        |   |   `--EXPR -> EXPR [7:12]
-        |   |       `--NUM_INT -> 10 [7:12]
-        |   `--SEMI -> ; [7:14]
-        |--VARIABLE_DEF -> VARIABLE_DEF [8:4]
-        |   |--MODIFIERS -> MODIFIERS [8:4]
-        |   |--TYPE -> TYPE [8:4]
-        |   |   `--LITERAL_INT -> int [8:4]
-        |   |--IDENT -> y [8:8]
-        |   |--ASSIGN -> = [8:10]
-        |   |   `--EXPR -> EXPR [8:12]
-        |   |       `--NUM_INT -> 20 [8:12]
-        |   `--SEMI -> ; [8:14]
-        |--VARIABLE_DEF -> VARIABLE_DEF [11:4]
-        |   |--MODIFIERS -> MODIFIERS [11:4]
-        |   |--TYPE -> TYPE [11:4]
-        |   |   `--IDENT -> String [11:4]
-        |   |--IDENT -> result1 [11:11]
-        |   |--ASSIGN -> = [11:19]
-        |   |   `--EXPR -> EXPR [11:24]
-        |   |       `--DOT -> . [11:24]
-        |   |           |--IDENT -> STR [11:21]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [11:25]
-        |   |               |--STRING_TEMPLATE_CONTENT ->  [11:26]
-        |   |               `--STRING_TEMPLATE_END -> " [11:26]
-        |   `--SEMI -> ; [11:27]
-        |--VARIABLE_DEF -> VARIABLE_DEF [13:4]
-        |   |--MODIFIERS -> MODIFIERS [13:4]
-        |   |--TYPE -> TYPE [13:4]
-        |   |   `--IDENT -> String [13:4]
-        |   |--IDENT -> result1_1 [13:11]
-        |   |--ASSIGN -> = [13:21]
-        |   |   `--EXPR -> EXPR [13:26]
-        |   |       `--DOT -> . [13:26]
-        |   |           |--IDENT -> STR [13:23]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [13:27]
-        |   |               |--STRING_TEMPLATE_CONTENT -> Hello world! [13:28]
-        |   |               `--STRING_TEMPLATE_END -> " [13:40]
-        |   `--SEMI -> ; [13:41]
-        |--VARIABLE_DEF -> VARIABLE_DEF [16:4]
-        |   |--MODIFIERS -> MODIFIERS [16:4]
-        |   |--TYPE -> TYPE [16:4]
-        |   |   `--IDENT -> String [16:4]
-        |   |--IDENT -> result1_2 [16:11]
-        |   |--ASSIGN -> = [16:21]
-        |   |   `--EXPR -> EXPR [16:26]
-        |   |       `--DOT -> . [16:26]
-        |   |           |--IDENT -> STR [16:23]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [16:27]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [16:28]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [16:32]
-        |   |               `--STRING_TEMPLATE_END -> " [16:33]
-        |   `--SEMI -> ; [16:34]
-        |--VARIABLE_DEF -> VARIABLE_DEF [19:4]
-        |   |--MODIFIERS -> MODIFIERS [19:4]
-        |   |--TYPE -> TYPE [19:4]
-        |   |   `--IDENT -> String [19:4]
-        |   |--IDENT -> result2 [19:11]
-        |   |--ASSIGN -> = [19:19]
-        |   |   `--EXPR -> EXPR [19:24]
-        |   |       `--DOT -> . [19:24]
-        |   |           |--IDENT -> STR [19:21]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [19:26]
-        |   |               |--STRING_TEMPLATE_CONTENT -> x [19:27]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [19:28]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [19:31]
-        |   |               |   `--IDENT -> x [19:31]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [19:33]
-        |   |               |--STRING_TEMPLATE_CONTENT -> x [19:34]
-        |   |               `--STRING_TEMPLATE_END -> " [19:35]
-        |   `--SEMI -> ; [19:36]
-        |--VARIABLE_DEF -> VARIABLE_DEF [22:4]
-        |   |--MODIFIERS -> MODIFIERS [22:4]
-        |   |--TYPE -> TYPE [22:4]
-        |   |   `--IDENT -> String [22:4]
-        |   |--IDENT -> result3 [22:11]
-        |   |--ASSIGN -> = [22:19]
-        |   |   `--EXPR -> EXPR [22:24]
-        |   |       `--DOT -> . [22:24]
-        |   |           |--IDENT -> STR [22:21]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [22:26]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [22:27]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [22:31]
-        |   |               |   `--METHOD_CALL -> ( [22:31]
-        |   |               |       |--IDENT -> y [22:30]
-        |   |               |       |--ELIST -> ELIST [22:33]
-        |   |               |       |   `--EXPR -> EXPR [22:33]
-        |   |               |       |       `--METHOD_CALL -> ( [22:33]
-        |   |               |       |           |--IDENT -> y [22:32]
-        |   |               |       |           |--ELIST -> ELIST [22:34]
-        |   |               |       |           |   `--EXPR -> EXPR [22:34]
-        |   |               |       |           |       `--STRING_LITERAL -> "y" [22:34]
-        |   |               |       |           `--RPAREN -> ) [22:37]
-        |   |               |       `--RPAREN -> ) [22:38]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [22:40]
-        |   |               `--STRING_TEMPLATE_END -> " [22:41]
-        |   `--SEMI -> ; [22:42]
-        |--VARIABLE_DEF -> VARIABLE_DEF [25:4]
-        |   |--MODIFIERS -> MODIFIERS [25:4]
-        |   |--TYPE -> TYPE [25:4]
-        |   |   `--IDENT -> String [25:4]
-        |   |--IDENT -> result4 [25:11]
-        |   |--ASSIGN -> = [25:19]
-        |   |   `--EXPR -> EXPR [25:36]
-        |   |       `--PLUS -> + [25:36]
-        |   |           |--DOT -> . [25:24]
-        |   |           |   |--IDENT -> STR [25:21]
-        |   |           |   `--STRING_TEMPLATE_BEGIN -> " [25:26]
-        |   |           |       |--EMBEDDED_EXPRESSION_BEGIN -> \{ [25:27]
-        |   |           |       |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [25:30]
-        |   |           |       |   `--IDENT -> x [25:30]
-        |   |           |       |--EMBEDDED_EXPRESSION_END -> } [25:32]
-        |   |           |       `--STRING_TEMPLATE_END -> " [25:33]
-        |   |           `--DOT -> . [25:41]
-        |   |               |--IDENT -> STR [25:38]
-        |   |               `--STRING_TEMPLATE_BEGIN -> " [25:43]
-        |   |                   |--EMBEDDED_EXPRESSION_BEGIN -> \{ [25:44]
-        |   |                   |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [25:47]
-        |   |                   |   `--IDENT -> y [25:47]
-        |   |                   |--EMBEDDED_EXPRESSION_END -> } [25:49]
-        |   |                   `--STRING_TEMPLATE_END -> " [25:50]
-        |   `--SEMI -> ; [25:51]
-        |--VARIABLE_DEF -> VARIABLE_DEF [28:4]
-        |   |--MODIFIERS -> MODIFIERS [28:4]
-        |   |--TYPE -> TYPE [28:4]
-        |   |   `--IDENT -> String [28:4]
-        |   |--IDENT -> result5 [28:11]
-        |   |--ASSIGN -> = [28:19]
-        |   |   `--EXPR -> EXPR [28:44]
-        |   |       `--PLUS -> + [28:44]
-        |   |           |--DOT -> . [28:24]
-        |   |           |   |--IDENT -> STR [28:21]
-        |   |           |   `--STRING_TEMPLATE_BEGIN -> " [28:26]
-        |   |           |       |--EMBEDDED_EXPRESSION_BEGIN -> \{ [28:27]
-        |   |           |       |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [28:31]
-        |   |           |       |   `--METHOD_CALL -> ( [28:31]
-        |   |           |       |       |--IDENT -> y [28:30]
-        |   |           |       |       |--ELIST -> ELIST [28:33]
-        |   |           |       |       |   `--EXPR -> EXPR [28:33]
-        |   |           |       |       |       `--METHOD_CALL -> ( [28:33]
-        |   |           |       |       |           |--IDENT -> y [28:32]
-        |   |           |       |       |           |--ELIST -> ELIST [28:34]
-        |   |           |       |       |           |   `--EXPR -> EXPR [28:34]
-        |   |           |       |       |           |       `--STRING_LITERAL -> "y" [28:34]
-        |   |           |       |       |           `--RPAREN -> ) [28:37]
-        |   |           |       |       `--RPAREN -> ) [28:38]
-        |   |           |       |--EMBEDDED_EXPRESSION_END -> } [28:40]
-        |   |           |       `--STRING_TEMPLATE_END -> " [28:41]
-        |   |           `--DOT -> . [28:49]
-        |   |               |--IDENT -> STR [28:46]
-        |   |               `--STRING_TEMPLATE_BEGIN -> " [28:51]
-        |   |                   |--EMBEDDED_EXPRESSION_BEGIN -> \{ [28:52]
-        |   |                   |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [28:56]
-        |   |                   |   `--METHOD_CALL -> ( [28:56]
-        |   |                   |       |--IDENT -> y [28:55]
-        |   |                   |       |--ELIST -> ELIST [28:58]
-        |   |                   |       |   `--EXPR -> EXPR [28:58]
-        |   |                   |       |       `--METHOD_CALL -> ( [28:58]
-        |   |                   |       |           |--IDENT -> y [28:57]
-        |   |                   |       |           |--ELIST -> ELIST [28:59]
-        |   |                   |       |           |   `--EXPR -> EXPR [28:59]
-        |   |                   |       |           |       `--STRING_LITERAL -> "y" [28:59]
-        |   |                   |       |           `--RPAREN -> ) [28:62]
-        |   |                   |       `--RPAREN -> ) [28:63]
-        |   |                   |--EMBEDDED_EXPRESSION_END -> } [28:65]
-        |   |                   `--STRING_TEMPLATE_END -> " [28:66]
-        |   `--SEMI -> ; [28:67]
-        |--VARIABLE_DEF -> VARIABLE_DEF [31:4]
-        |   |--MODIFIERS -> MODIFIERS [31:4]
-        |   |--TYPE -> TYPE [31:4]
-        |   |   `--IDENT -> String [31:4]
-        |   |--IDENT -> result6 [31:11]
-        |   |--ASSIGN -> = [31:19]
-        |   |   `--EXPR -> EXPR [31:36]
-        |   |       `--PLUS -> + [31:36]
-        |   |           |--DOT -> . [31:24]
-        |   |           |   |--IDENT -> STR [31:21]
-        |   |           |   `--STRING_TEMPLATE_BEGIN -> " [31:26]
-        |   |           |       |--EMBEDDED_EXPRESSION_BEGIN -> \{ [31:27]
-        |   |           |       |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [31:30]
-        |   |           |       |   `--IDENT -> x [31:30]
-        |   |           |       |--EMBEDDED_EXPRESSION_END -> } [31:32]
-        |   |           |       `--STRING_TEMPLATE_END -> " [31:33]
-        |   |           `--DOT -> . [31:41]
-        |   |               |--IDENT -> STR [31:38]
-        |   |               `--STRING_TEMPLATE_BEGIN -> " [31:43]
-        |   |                   |--EMBEDDED_EXPRESSION_BEGIN -> \{ [31:44]
-        |   |                   |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [31:47]
-        |   |                   |   `--IDENT -> y [31:47]
-        |   |                   |--EMBEDDED_EXPRESSION_END -> } [31:49]
-        |   |                   `--STRING_TEMPLATE_END -> " [31:50]
-        |   `--SEMI -> ; [31:51]
-        |--VARIABLE_DEF -> VARIABLE_DEF [34:4]
-        |   |--MODIFIERS -> MODIFIERS [34:4]
-        |   |--TYPE -> TYPE [34:4]
-        |   |   `--IDENT -> String [34:4]
-        |   |--IDENT -> result7 [34:11]
-        |   |--ASSIGN -> = [34:19]
-        |   |   `--EXPR -> EXPR [34:24]
-        |   |       `--DOT -> . [34:24]
-        |   |           |--IDENT -> STR [34:21]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [34:26]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [34:27]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [34:32]
-        |   |               |   `--PLUS -> + [34:32]
-        |   |               |       |--IDENT -> x [34:30]
-        |   |               |       `--IDENT -> y [34:34]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [34:36]
-        |   |               `--STRING_TEMPLATE_END -> " [34:37]
-        |   `--SEMI -> ; [34:38]
-        |--VARIABLE_DEF -> VARIABLE_DEF [37:4]
-        |   |--MODIFIERS -> MODIFIERS [37:4]
-        |   |--TYPE -> TYPE [37:4]
-        |   |   `--IDENT -> String [37:4]
-        |   |--IDENT -> result8 [37:11]
-        |   |--ASSIGN -> = [37:19]
-        |   |   `--EXPR -> EXPR [37:24]
-        |   |       `--DOT -> . [37:24]
-        |   |           |--IDENT -> STR [37:21]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [37:26]
-        |   |               |--STRING_TEMPLATE_CONTENT -> hey  [37:27]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [37:31]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [37:44]
-        |   |               |   `--PLUS -> + [37:44]
-        |   |               |       |--METHOD_CALL -> ( [37:35]
-        |   |               |       |   |--IDENT -> y [37:34]
-        |   |               |       |   |--ELIST -> ELIST [37:37]
-        |   |               |       |   |   `--EXPR -> EXPR [37:37]
-        |   |               |       |   |       `--METHOD_CALL -> ( [37:37]
-        |   |               |       |   |           |--IDENT -> y [37:36]
-        |   |               |       |   |           |--ELIST -> ELIST [37:38]
-        |   |               |       |   |           |   `--EXPR -> EXPR [37:38]
-        |   |               |       |   |           |       `--STRING_LITERAL -> "y" [37:38]
-        |   |               |       |   |           `--RPAREN -> ) [37:41]
-        |   |               |       |   `--RPAREN -> ) [37:42]
-        |   |               |       `--METHOD_CALL -> ( [37:47]
-        |   |               |           |--IDENT -> y [37:46]
-        |   |               |           |--ELIST -> ELIST [37:49]
-        |   |               |           |   `--EXPR -> EXPR [37:49]
-        |   |               |           |       `--METHOD_CALL -> ( [37:49]
-        |   |               |           |           |--IDENT -> y [37:48]
-        |   |               |           |           |--ELIST -> ELIST [37:50]
-        |   |               |           |           |   `--EXPR -> EXPR [37:50]
-        |   |               |           |           |       `--STRING_LITERAL -> "y" [37:50]
-        |   |               |           |           `--RPAREN -> ) [37:53]
-        |   |               |           `--RPAREN -> ) [37:54]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [37:56]
-        |   |               |--STRING_TEMPLATE_CONTENT ->  there [37:57]
-        |   |               `--STRING_TEMPLATE_END -> " [37:63]
-        |   `--SEMI -> ; [37:64]
-        |--VARIABLE_DEF -> VARIABLE_DEF [40:4]
-        |   |--MODIFIERS -> MODIFIERS [40:4]
-        |   |--TYPE -> TYPE [40:4]
-        |   |   `--IDENT -> String [40:4]
-        |   |--IDENT -> result9 [40:11]
-        |   |--ASSIGN -> = [40:19]
-        |   |   `--EXPR -> EXPR [40:24]
-        |   |       `--DOT -> . [40:24]
-        |   |           |--IDENT -> STR [40:21]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [40:26]
-        |   |               |--STRING_TEMPLATE_CONTENT -> hey  [40:27]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [40:31]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [41:22]
-        |   |               |   `--PLUS -> + [41:22]
-        |   |               |       |--METHOD_CALL -> ( [41:13]
-        |   |               |       |   |--IDENT -> y [41:12]
-        |   |               |       |   |--ELIST -> ELIST [41:15]
-        |   |               |       |   |   `--EXPR -> EXPR [41:15]
-        |   |               |       |   |       `--METHOD_CALL -> ( [41:15]
-        |   |               |       |   |           |--IDENT -> y [41:14]
-        |   |               |       |   |           |--ELIST -> ELIST [41:16]
-        |   |               |       |   |           |   `--EXPR -> EXPR [41:16]
-        |   |               |       |   |           |       `--STRING_LITERAL -> "y" [41:16]
-        |   |               |       |   |           `--RPAREN -> ) [41:19]
-        |   |               |       |   `--RPAREN -> ) [41:20]
-        |   |               |       `--METHOD_CALL -> ( [41:25]
-        |   |               |           |--IDENT -> y [41:24]
-        |   |               |           |--ELIST -> ELIST [41:27]
-        |   |               |           |   `--EXPR -> EXPR [41:27]
-        |   |               |           |       `--METHOD_CALL -> ( [41:27]
-        |   |               |           |           |--IDENT -> y [41:26]
-        |   |               |           |           |--ELIST -> ELIST [41:28]
-        |   |               |           |           |   `--EXPR -> EXPR [41:28]
-        |   |               |           |           |       `--STRING_LITERAL -> "y" [41:28]
-        |   |               |           |           `--RPAREN -> ) [41:31]
-        |   |               |           `--RPAREN -> ) [41:32]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [42:12]
-        |   |               |--STRING_TEMPLATE_CONTENT ->  there [42:13]
-        |   |               `--STRING_TEMPLATE_END -> " [42:19]
-        |   `--SEMI -> ; [42:20]
-        |--VARIABLE_DEF -> VARIABLE_DEF [45:4]
-        |   |--MODIFIERS -> MODIFIERS [45:4]
-        |   |--TYPE -> TYPE [45:4]
-        |   |   `--IDENT -> String [45:4]
-        |   |--IDENT -> result10 [45:11]
-        |   |--ASSIGN -> = [45:20]
-        |   |   `--EXPR -> EXPR [45:25]
-        |   |       `--DOT -> . [45:25]
-        |   |           |--IDENT -> STR [45:22]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [45:27]
-        |   |               |--STRING_TEMPLATE_CONTENT -> hey  [45:28]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [45:32]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [46:22]
-        |   |               |   `--PLUS -> + [46:22]
-        |   |               |       |--METHOD_CALL -> ( [46:13]
-        |   |               |       |   |--IDENT -> y [46:12]
-        |   |               |       |   |--ELIST -> ELIST [46:15]
-        |   |               |       |   |   `--EXPR -> EXPR [46:15]
-        |   |               |       |   |       `--METHOD_CALL -> ( [46:15]
-        |   |               |       |   |           |--IDENT -> y [46:14]
-        |   |               |       |   |           |--ELIST -> ELIST [46:16]
-        |   |               |       |   |           |   `--EXPR -> EXPR [46:16]
-        |   |               |       |   |           |       `--STRING_LITERAL -> "y" [46:16]
-        |   |               |       |   |           `--RPAREN -> ) [46:19]
-        |   |               |       |   `--RPAREN -> ) [46:20]
-        |   |               |       `--METHOD_CALL -> ( [46:25]
-        |   |               |           |--IDENT -> y [46:24]
-        |   |               |           |--ELIST -> ELIST [46:27]
-        |   |               |           |   `--EXPR -> EXPR [46:27]
-        |   |               |           |       `--METHOD_CALL -> ( [46:27]
-        |   |               |           |           |--IDENT -> y [46:26]
-        |   |               |           |           |--ELIST -> ELIST [46:28]
-        |   |               |           |           |   `--EXPR -> EXPR [46:28]
-        |   |               |           |           |       `--STRING_LITERAL -> "y" [46:28]
-        |   |               |           |           `--RPAREN -> ) [46:31]
-        |   |               |           `--RPAREN -> ) [46:32]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [47:12]
-        |   |               |--STRING_TEMPLATE_CONTENT ->  there  [47:13]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [47:20]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [49:12]
-        |   |               |   `--PLUS -> + [49:12]
-        |   |               |       |--PLUS -> + [48:22]
-        |   |               |       |   |--METHOD_CALL -> ( [48:13]
-        |   |               |       |   |   |--IDENT -> y [48:12]
-        |   |               |       |   |   |--ELIST -> ELIST [48:15]
-        |   |               |       |   |   |   `--EXPR -> EXPR [48:15]
-        |   |               |       |   |   |       `--METHOD_CALL -> ( [48:15]
-        |   |               |       |   |   |           |--IDENT -> y [48:14]
-        |   |               |       |   |   |           |--ELIST -> ELIST [48:16]
-        |   |               |       |   |   |           |   `--EXPR -> EXPR [48:16]
-        |   |               |       |   |   |           |       `--STRING_LITERAL -> "y" [48:16]
-        |   |               |       |   |   |           `--RPAREN -> ) [48:19]
-        |   |               |       |   |   `--RPAREN -> ) [48:20]
-        |   |               |       |   `--METHOD_CALL -> ( [48:25]
-        |   |               |       |       |--IDENT -> y [48:24]
-        |   |               |       |       |--ELIST -> ELIST [48:27]
-        |   |               |       |       |   `--EXPR -> EXPR [48:27]
-        |   |               |       |       |       `--METHOD_CALL -> ( [48:27]
-        |   |               |       |       |           |--IDENT -> y [48:26]
-        |   |               |       |       |           |--ELIST -> ELIST [48:28]
-        |   |               |       |       |           |   `--EXPR -> EXPR [48:28]
-        |   |               |       |       |           |       `--STRING_LITERAL -> "y" [48:28]
-        |   |               |       |       |           `--RPAREN -> ) [48:31]
-        |   |               |       |       `--RPAREN -> ) [48:32]
-        |   |               |       `--DOT -> . [49:17]
-        |   |               |           |--IDENT -> STR [49:14]
-        |   |               |           `--STRING_TEMPLATE_BEGIN -> " [49:18]
-        |   |               |               |--STRING_TEMPLATE_CONTENT -> x [49:19]
-        |   |               |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [49:20]
-        |   |               |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [49:23]
-        |   |               |               |   `--IDENT -> x [49:23]
-        |   |               |               |--EMBEDDED_EXPRESSION_END -> } [49:25]
-        |   |               |               |--STRING_TEMPLATE_CONTENT -> x [49:26]
-        |   |               |               `--STRING_TEMPLATE_END -> " [49:27]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [50:12]
-        |   |               `--STRING_TEMPLATE_END -> " [50:13]
-        |   `--SEMI -> ; [50:14]
-        |--VARIABLE_DEF -> VARIABLE_DEF [52:4]
-        |   |--MODIFIERS -> MODIFIERS [52:4]
-        |   |--TYPE -> TYPE [52:4]
-        |   |   `--IDENT -> String [52:4]
-        |   |--IDENT -> name [52:11]
-        |   |--ASSIGN -> = [52:16]
-        |   |   `--EXPR -> EXPR [52:18]
-        |   |       `--STRING_LITERAL -> "world" [52:18]
-        |   `--SEMI -> ; [52:25]
-        |--VARIABLE_DEF -> VARIABLE_DEF [53:4]
-        |   |--MODIFIERS -> MODIFIERS [53:4]
-        |   |--TYPE -> TYPE [53:4]
-        |   |   `--IDENT -> String [53:4]
-        |   |--IDENT -> s [53:11]
-        |   |--ASSIGN -> = [53:13]
-        |   |   `--EXPR -> EXPR [53:18]
-        |   |       `--DOT -> . [53:18]
-        |   |           |--IDENT -> STR [53:15]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [53:19]
-        |   |               |--STRING_TEMPLATE_CONTENT -> Hello,  [53:20]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [53:27]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [53:30]
-        |   |               |   `--IDENT -> name [53:30]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [53:35]
-        |   |               |--STRING_TEMPLATE_CONTENT -> ! [53:36]
-        |   |               `--STRING_TEMPLATE_END -> " [53:37]
-        |   `--SEMI -> ; [53:38]
-        |--METHOD_DEF -> METHOD_DEF [55:4]
-        |   |--MODIFIERS -> MODIFIERS [55:4]
-        |   |   |--LITERAL_PRIVATE -> private [55:4]
-        |   |   `--LITERAL_STATIC -> static [55:12]
-        |   |--TYPE -> TYPE [55:19]
-        |   |   `--IDENT -> String [55:19]
-        |   |--IDENT -> y [55:26]
-        |   |--LPAREN -> ( [55:27]
-        |   |--PARAMETERS -> PARAMETERS [55:28]
-        |   |   `--PARAMETER_DEF -> PARAMETER_DEF [55:28]
-        |   |       |--MODIFIERS -> MODIFIERS [55:28]
-        |   |       |--TYPE -> TYPE [55:28]
-        |   |       |   `--IDENT -> String [55:28]
-        |   |       `--IDENT -> y [55:35]
-        |   |--RPAREN -> ) [55:36]
-        |   `--SLIST -> { [55:38]
-        |       |--LITERAL_RETURN -> return [56:8]
-        |       |   |--EXPR -> EXPR [56:15]
-        |       |   |   `--STRING_LITERAL -> "y" [56:15]
-        |       |   `--SEMI -> ; [56:18]
-        |       `--RCURLY -> } [57:4]
-        |--METHOD_DEF -> METHOD_DEF [60:4]
-        |   |--MODIFIERS -> MODIFIERS [60:4]
-        |   |--TYPE -> TYPE [60:4]
-        |   |   `--LITERAL_VOID -> void [60:4]
-        |   |--IDENT -> x [60:9]
-        |   |--LPAREN -> ( [60:10]
-        |   |--PARAMETERS -> PARAMETERS [60:11]
-        |   |   `--PARAMETER_DEF -> PARAMETER_DEF [60:11]
-        |   |       |--MODIFIERS -> MODIFIERS [60:11]
-        |   |       |--TYPE -> TYPE [60:11]
-        |   |       |   |--IDENT -> List [60:11]
-        |   |       |   `--TYPE_ARGUMENTS -> TYPE_ARGUMENTS [60:15]
-        |   |       |       |--GENERIC_START -> < [60:15]
-        |   |       |       |--TYPE_ARGUMENT -> TYPE_ARGUMENT [60:16]
-        |   |       |       |   |--WILDCARD_TYPE -> ? [60:16]
-        |   |       |       |   `--TYPE_UPPER_BOUNDS -> extends [60:18]
-        |   |       |       |       `--DOT -> . [60:40]
-        |   |       |       |           |--IDENT -> StringTemplate [60:26]
-        |   |       |       |           |--IDENT -> Processor [60:41]
-        |   |       |       |           `--TYPE_ARGUMENTS -> TYPE_ARGUMENTS [60:50]
-        |   |       |       |               |--GENERIC_START -> < [60:50]
-        |   |       |       |               |--TYPE_ARGUMENT -> TYPE_ARGUMENT [60:51]
-        |   |       |       |               |   `--IDENT -> String [60:51]
-        |   |       |       |               |--COMMA -> , [60:57]
-        |   |       |       |               |--TYPE_ARGUMENT -> TYPE_ARGUMENT [60:59]
-        |   |       |       |               |   `--IDENT -> RuntimeException [60:59]
-        |   |       |       |               `--GENERIC_END -> > [60:75]
-        |   |       |       `--GENERIC_END -> > [60:76]
-        |   |       `--IDENT -> list [60:78]
-        |   |--RPAREN -> ) [60:82]
-        |   `--SLIST -> { [60:84]
-        |       |--EXPR -> EXPR [61:19]
-        |       |   `--DOT -> . [61:19]
-        |       |       |--METHOD_CALL -> ( [61:16]
-        |       |       |   |--DOT -> . [61:12]
-        |       |       |   |   |--IDENT -> list [61:8]
-        |       |       |   |   `--IDENT -> get [61:13]
-        |       |       |   |--ELIST -> ELIST [61:17]
-        |       |       |   |   `--EXPR -> EXPR [61:17]
-        |       |       |   |       `--NUM_INT -> 0 [61:17]
-        |       |       |   `--RPAREN -> ) [61:18]
-        |       |       `--STRING_TEMPLATE_BEGIN -> " [61:20]
-        |       |           |--STRING_TEMPLATE_CONTENT ->  [61:21]
-        |       |           `--STRING_TEMPLATE_END -> " [61:21]
-        |       |--SEMI -> ; [61:22]
-        |       |--EXPR -> EXPR [62:19]
-        |       |   `--DOT -> . [62:19]
-        |       |       |--METHOD_CALL -> ( [62:16]
-        |       |       |   |--DOT -> . [62:12]
-        |       |       |   |   |--IDENT -> list [62:8]
-        |       |       |   |   `--IDENT -> get [62:13]
-        |       |       |   |--ELIST -> ELIST [62:17]
-        |       |       |   |   `--EXPR -> EXPR [62:17]
-        |       |       |   |       `--NUM_INT -> 0 [62:17]
-        |       |       |   `--RPAREN -> ) [62:18]
-        |       |       `--STRING_TEMPLATE_BEGIN -> " [62:20]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [62:21]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [62:25]
-        |       |           `--STRING_TEMPLATE_END -> " [62:26]
-        |       |--SEMI -> ; [62:27]
-        |       |--EXPR -> EXPR [63:19]
-        |       |   `--DOT -> . [63:19]
-        |       |       |--METHOD_CALL -> ( [63:16]
-        |       |       |   |--DOT -> . [63:12]
-        |       |       |   |   |--IDENT -> list [63:8]
-        |       |       |   |   `--IDENT -> get [63:13]
-        |       |       |   |--ELIST -> ELIST [63:17]
-        |       |       |   |   `--EXPR -> EXPR [63:17]
-        |       |       |   |       `--NUM_INT -> 0 [63:17]
-        |       |       |   `--RPAREN -> ) [63:18]
-        |       |       `--STRING_TEMPLATE_BEGIN -> " [63:21]
-        |       |           |--STRING_TEMPLATE_CONTENT -> x [63:22]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [63:23]
-        |       |           |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [63:26]
-        |       |           |   `--IDENT -> x [63:26]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [63:28]
-        |       |           |--STRING_TEMPLATE_CONTENT -> x [63:29]
-        |       |           `--STRING_TEMPLATE_END -> " [63:30]
-        |       |--SEMI -> ; [63:31]
-        |       |--EXPR -> EXPR [64:19]
-        |       |   `--DOT -> . [64:19]
-        |       |       |--METHOD_CALL -> ( [64:16]
-        |       |       |   |--DOT -> . [64:12]
-        |       |       |   |   |--IDENT -> list [64:8]
-        |       |       |   |   `--IDENT -> get [64:13]
-        |       |       |   |--ELIST -> ELIST [64:17]
-        |       |       |   |   `--EXPR -> EXPR [64:17]
-        |       |       |   |       `--NUM_INT -> 0 [64:17]
-        |       |       |   `--RPAREN -> ) [64:18]
-        |       |       `--STRING_TEMPLATE_BEGIN -> " [64:21]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:22]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:23]
-        |       |           |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [64:26]
-        |       |           |   `--IDENT -> x [64:26]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:28]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:29]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:30]
-        |       |           |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [64:33]
-        |       |           |   `--IDENT -> y [64:33]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:35]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:36]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:37]
-        |       |           |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [64:40]
-        |       |           |   `--IDENT -> x [64:40]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:42]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:43]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:44]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:46]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:47]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:48]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:50]
-        |       |           `--STRING_TEMPLATE_END -> " [64:51]
-        |       |--SEMI -> ; [64:52]
-        |       `--RCURLY -> } [65:4]
-        `--RCURLY -> } [66:0]
diff --git a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/ExpectedStringTemplateBasicWithTabs.txt b/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/ExpectedStringTemplateBasicWithTabs.txt
deleted file mode 100644
--- a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/ExpectedStringTemplateBasicWithTabs.txt
+++ /dev/null
@@ -1,564 +0,0 @@
-COMPILATION_UNIT -> COMPILATION_UNIT [2:0]
-|--PACKAGE_DEF -> package [2:0]
-|   |--ANNOTATIONS -> ANNOTATIONS [2:47]
-|   |--DOT -> . [2:47]
-|   |   |--DOT -> . [2:39]
-|   |   |   |--DOT -> . [2:28]
-|   |   |   |   |--DOT -> . [2:22]
-|   |   |   |   |   |--DOT -> . [2:11]
-|   |   |   |   |   |   |--IDENT -> com [2:8]
-|   |   |   |   |   |   `--IDENT -> puppycrawl [2:12]
-|   |   |   |   |   `--IDENT -> tools [2:23]
-|   |   |   |   `--IDENT -> checkstyle [2:29]
-|   |   |   `--IDENT -> grammar [2:40]
-|   |   `--IDENT -> java21 [2:48]
-|   `--SEMI -> ; [2:54]
-|--IMPORT -> import [4:0]
-|   |--DOT -> . [4:16]
-|   |   |--DOT -> . [4:11]
-|   |   |   |--IDENT -> java [4:7]
-|   |   |   `--IDENT -> util [4:12]
-|   |   `--IDENT -> List [4:17]
-|   `--SEMI -> ; [4:21]
-`--CLASS_DEF -> CLASS_DEF [6:0]
-    |--MODIFIERS -> MODIFIERS [6:0]
-    |   `--LITERAL_PUBLIC -> public [6:0]
-    |--LITERAL_CLASS -> class [6:7]
-    |--IDENT -> InputStringTemplateBasicWithTabs [6:13]
-    `--OBJBLOCK -> OBJBLOCK [6:46]
-        |--LCURLY -> { [6:46]
-        |--VARIABLE_DEF -> VARIABLE_DEF [7:1]
-        |   |--MODIFIERS -> MODIFIERS [7:1]
-        |   |--TYPE -> TYPE [7:1]
-        |   |   `--LITERAL_INT -> int [7:1]
-        |   |--IDENT -> x [7:5]
-        |   |--ASSIGN -> = [7:7]
-        |   |   `--EXPR -> EXPR [7:9]
-        |   |       `--NUM_INT -> 10 [7:9]
-        |   `--SEMI -> ; [7:11]
-        |--VARIABLE_DEF -> VARIABLE_DEF [8:1]
-        |   |--MODIFIERS -> MODIFIERS [8:1]
-        |   |--TYPE -> TYPE [8:1]
-        |   |   `--LITERAL_INT -> int [8:1]
-        |   |--IDENT -> y [8:5]
-        |   |--ASSIGN -> = [8:7]
-        |   |   `--EXPR -> EXPR [8:9]
-        |   |       `--NUM_INT -> 20 [8:9]
-        |   `--SEMI -> ; [8:11]
-        |--VARIABLE_DEF -> VARIABLE_DEF [11:1]
-        |   |--MODIFIERS -> MODIFIERS [11:1]
-        |   |--TYPE -> TYPE [11:1]
-        |   |   `--IDENT -> String [11:1]
-        |   |--IDENT -> result1 [11:8]
-        |   |--ASSIGN -> = [11:16]
-        |   |   `--EXPR -> EXPR [11:21]
-        |   |       `--DOT -> . [11:21]
-        |   |           |--IDENT -> STR [11:18]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [11:22]
-        |   |               |--STRING_TEMPLATE_CONTENT ->  [11:23]
-        |   |               `--STRING_TEMPLATE_END -> " [11:23]
-        |   `--SEMI -> ; [11:24]
-        |--VARIABLE_DEF -> VARIABLE_DEF [13:1]
-        |   |--MODIFIERS -> MODIFIERS [13:1]
-        |   |--TYPE -> TYPE [13:1]
-        |   |   `--IDENT -> String [13:1]
-        |   |--IDENT -> result1_1 [13:8]
-        |   |--ASSIGN -> = [13:18]
-        |   |   `--EXPR -> EXPR [13:23]
-        |   |       `--DOT -> . [13:23]
-        |   |           |--IDENT -> STR [13:20]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [13:24]
-        |   |               |--STRING_TEMPLATE_CONTENT -> Hello world! [13:25]
-        |   |               `--STRING_TEMPLATE_END -> " [13:37]
-        |   `--SEMI -> ; [13:38]
-        |--VARIABLE_DEF -> VARIABLE_DEF [16:1]
-        |   |--MODIFIERS -> MODIFIERS [16:1]
-        |   |--TYPE -> TYPE [16:1]
-        |   |   `--IDENT -> String [16:1]
-        |   |--IDENT -> result1_2 [16:8]
-        |   |--ASSIGN -> = [16:18]
-        |   |   `--EXPR -> EXPR [16:23]
-        |   |       `--DOT -> . [16:23]
-        |   |           |--IDENT -> STR [16:20]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [16:24]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [16:25]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [16:29]
-        |   |               `--STRING_TEMPLATE_END -> " [16:30]
-        |   `--SEMI -> ; [16:31]
-        |--VARIABLE_DEF -> VARIABLE_DEF [19:1]
-        |   |--MODIFIERS -> MODIFIERS [19:1]
-        |   |--TYPE -> TYPE [19:1]
-        |   |   `--IDENT -> String [19:1]
-        |   |--IDENT -> result2 [19:8]
-        |   |--ASSIGN -> = [19:16]
-        |   |   `--EXPR -> EXPR [19:21]
-        |   |       `--DOT -> . [19:21]
-        |   |           |--IDENT -> STR [19:18]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [19:23]
-        |   |               |--STRING_TEMPLATE_CONTENT -> x [19:24]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [19:25]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [19:28]
-        |   |               |   `--IDENT -> x [19:28]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [19:30]
-        |   |               |--STRING_TEMPLATE_CONTENT -> x [19:31]
-        |   |               `--STRING_TEMPLATE_END -> " [19:32]
-        |   `--SEMI -> ; [19:33]
-        |--VARIABLE_DEF -> VARIABLE_DEF [22:1]
-        |   |--MODIFIERS -> MODIFIERS [22:1]
-        |   |--TYPE -> TYPE [22:1]
-        |   |   `--IDENT -> String [22:1]
-        |   |--IDENT -> result3 [22:8]
-        |   |--ASSIGN -> = [22:16]
-        |   |   `--EXPR -> EXPR [22:21]
-        |   |       `--DOT -> . [22:21]
-        |   |           |--IDENT -> STR [22:18]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [22:23]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [22:24]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [22:28]
-        |   |               |   `--METHOD_CALL -> ( [22:28]
-        |   |               |       |--IDENT -> y [22:27]
-        |   |               |       |--ELIST -> ELIST [22:30]
-        |   |               |       |   `--EXPR -> EXPR [22:30]
-        |   |               |       |       `--METHOD_CALL -> ( [22:30]
-        |   |               |       |           |--IDENT -> y [22:29]
-        |   |               |       |           |--ELIST -> ELIST [22:31]
-        |   |               |       |           |   `--EXPR -> EXPR [22:31]
-        |   |               |       |           |       `--STRING_LITERAL -> "y" [22:31]
-        |   |               |       |           `--RPAREN -> ) [22:34]
-        |   |               |       `--RPAREN -> ) [22:35]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [22:37]
-        |   |               `--STRING_TEMPLATE_END -> " [22:38]
-        |   `--SEMI -> ; [22:39]
-        |--VARIABLE_DEF -> VARIABLE_DEF [25:1]
-        |   |--MODIFIERS -> MODIFIERS [25:1]
-        |   |--TYPE -> TYPE [25:1]
-        |   |   `--IDENT -> String [25:1]
-        |   |--IDENT -> result4 [25:8]
-        |   |--ASSIGN -> = [25:16]
-        |   |   `--EXPR -> EXPR [25:33]
-        |   |       `--PLUS -> + [25:33]
-        |   |           |--DOT -> . [25:21]
-        |   |           |   |--IDENT -> STR [25:18]
-        |   |           |   `--STRING_TEMPLATE_BEGIN -> " [25:23]
-        |   |           |       |--EMBEDDED_EXPRESSION_BEGIN -> \{ [25:24]
-        |   |           |       |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [25:27]
-        |   |           |       |   `--IDENT -> x [25:27]
-        |   |           |       |--EMBEDDED_EXPRESSION_END -> } [25:29]
-        |   |           |       `--STRING_TEMPLATE_END -> " [25:30]
-        |   |           `--DOT -> . [25:38]
-        |   |               |--IDENT -> STR [25:35]
-        |   |               `--STRING_TEMPLATE_BEGIN -> " [25:40]
-        |   |                   |--EMBEDDED_EXPRESSION_BEGIN -> \{ [25:41]
-        |   |                   |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [25:44]
-        |   |                   |   `--IDENT -> y [25:44]
-        |   |                   |--EMBEDDED_EXPRESSION_END -> } [25:46]
-        |   |                   `--STRING_TEMPLATE_END -> " [25:47]
-        |   `--SEMI -> ; [25:48]
-        |--VARIABLE_DEF -> VARIABLE_DEF [28:1]
-        |   |--MODIFIERS -> MODIFIERS [28:1]
-        |   |--TYPE -> TYPE [28:1]
-        |   |   `--IDENT -> String [28:1]
-        |   |--IDENT -> result5 [28:8]
-        |   |--ASSIGN -> = [28:16]
-        |   |   `--EXPR -> EXPR [28:41]
-        |   |       `--PLUS -> + [28:41]
-        |   |           |--DOT -> . [28:21]
-        |   |           |   |--IDENT -> STR [28:18]
-        |   |           |   `--STRING_TEMPLATE_BEGIN -> " [28:23]
-        |   |           |       |--EMBEDDED_EXPRESSION_BEGIN -> \{ [28:24]
-        |   |           |       |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [28:28]
-        |   |           |       |   `--METHOD_CALL -> ( [28:28]
-        |   |           |       |       |--IDENT -> y [28:27]
-        |   |           |       |       |--ELIST -> ELIST [28:30]
-        |   |           |       |       |   `--EXPR -> EXPR [28:30]
-        |   |           |       |       |       `--METHOD_CALL -> ( [28:30]
-        |   |           |       |       |           |--IDENT -> y [28:29]
-        |   |           |       |       |           |--ELIST -> ELIST [28:31]
-        |   |           |       |       |           |   `--EXPR -> EXPR [28:31]
-        |   |           |       |       |           |       `--STRING_LITERAL -> "y" [28:31]
-        |   |           |       |       |           `--RPAREN -> ) [28:34]
-        |   |           |       |       `--RPAREN -> ) [28:35]
-        |   |           |       |--EMBEDDED_EXPRESSION_END -> } [28:37]
-        |   |           |       `--STRING_TEMPLATE_END -> " [28:38]
-        |   |           `--DOT -> . [28:46]
-        |   |               |--IDENT -> STR [28:43]
-        |   |               `--STRING_TEMPLATE_BEGIN -> " [28:48]
-        |   |                   |--EMBEDDED_EXPRESSION_BEGIN -> \{ [28:49]
-        |   |                   |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [28:53]
-        |   |                   |   `--METHOD_CALL -> ( [28:53]
-        |   |                   |       |--IDENT -> y [28:52]
-        |   |                   |       |--ELIST -> ELIST [28:55]
-        |   |                   |       |   `--EXPR -> EXPR [28:55]
-        |   |                   |       |       `--METHOD_CALL -> ( [28:55]
-        |   |                   |       |           |--IDENT -> y [28:54]
-        |   |                   |       |           |--ELIST -> ELIST [28:56]
-        |   |                   |       |           |   `--EXPR -> EXPR [28:56]
-        |   |                   |       |           |       `--STRING_LITERAL -> "y" [28:56]
-        |   |                   |       |           `--RPAREN -> ) [28:59]
-        |   |                   |       `--RPAREN -> ) [28:60]
-        |   |                   |--EMBEDDED_EXPRESSION_END -> } [28:62]
-        |   |                   `--STRING_TEMPLATE_END -> " [28:63]
-        |   `--SEMI -> ; [28:64]
-        |--VARIABLE_DEF -> VARIABLE_DEF [31:1]
-        |   |--MODIFIERS -> MODIFIERS [31:1]
-        |   |--TYPE -> TYPE [31:1]
-        |   |   `--IDENT -> String [31:1]
-        |   |--IDENT -> result6 [31:8]
-        |   |--ASSIGN -> = [31:16]
-        |   |   `--EXPR -> EXPR [31:33]
-        |   |       `--PLUS -> + [31:33]
-        |   |           |--DOT -> . [31:21]
-        |   |           |   |--IDENT -> STR [31:18]
-        |   |           |   `--STRING_TEMPLATE_BEGIN -> " [31:23]
-        |   |           |       |--EMBEDDED_EXPRESSION_BEGIN -> \{ [31:24]
-        |   |           |       |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [31:27]
-        |   |           |       |   `--IDENT -> x [31:27]
-        |   |           |       |--EMBEDDED_EXPRESSION_END -> } [31:29]
-        |   |           |       `--STRING_TEMPLATE_END -> " [31:30]
-        |   |           `--DOT -> . [31:38]
-        |   |               |--IDENT -> STR [31:35]
-        |   |               `--STRING_TEMPLATE_BEGIN -> " [31:40]
-        |   |                   |--EMBEDDED_EXPRESSION_BEGIN -> \{ [31:41]
-        |   |                   |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [31:44]
-        |   |                   |   `--IDENT -> y [31:44]
-        |   |                   |--EMBEDDED_EXPRESSION_END -> } [31:46]
-        |   |                   `--STRING_TEMPLATE_END -> " [31:47]
-        |   `--SEMI -> ; [31:48]
-        |--VARIABLE_DEF -> VARIABLE_DEF [34:1]
-        |   |--MODIFIERS -> MODIFIERS [34:1]
-        |   |--TYPE -> TYPE [34:1]
-        |   |   `--IDENT -> String [34:1]
-        |   |--IDENT -> result7 [34:8]
-        |   |--ASSIGN -> = [34:16]
-        |   |   `--EXPR -> EXPR [34:21]
-        |   |       `--DOT -> . [34:21]
-        |   |           |--IDENT -> STR [34:18]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [34:23]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [34:24]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [34:29]
-        |   |               |   `--PLUS -> + [34:29]
-        |   |               |       |--IDENT -> x [34:27]
-        |   |               |       `--IDENT -> y [34:31]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [34:33]
-        |   |               `--STRING_TEMPLATE_END -> " [34:34]
-        |   `--SEMI -> ; [34:35]
-        |--VARIABLE_DEF -> VARIABLE_DEF [37:1]
-        |   |--MODIFIERS -> MODIFIERS [37:1]
-        |   |--TYPE -> TYPE [37:1]
-        |   |   `--IDENT -> String [37:1]
-        |   |--IDENT -> result8 [37:8]
-        |   |--ASSIGN -> = [37:16]
-        |   |   `--EXPR -> EXPR [37:21]
-        |   |       `--DOT -> . [37:21]
-        |   |           |--IDENT -> STR [37:18]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [37:23]
-        |   |               |--STRING_TEMPLATE_CONTENT -> hey  [37:24]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [37:28]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [37:41]
-        |   |               |   `--PLUS -> + [37:41]
-        |   |               |       |--METHOD_CALL -> ( [37:32]
-        |   |               |       |   |--IDENT -> y [37:31]
-        |   |               |       |   |--ELIST -> ELIST [37:34]
-        |   |               |       |   |   `--EXPR -> EXPR [37:34]
-        |   |               |       |   |       `--METHOD_CALL -> ( [37:34]
-        |   |               |       |   |           |--IDENT -> y [37:33]
-        |   |               |       |   |           |--ELIST -> ELIST [37:35]
-        |   |               |       |   |           |   `--EXPR -> EXPR [37:35]
-        |   |               |       |   |           |       `--STRING_LITERAL -> "y" [37:35]
-        |   |               |       |   |           `--RPAREN -> ) [37:38]
-        |   |               |       |   `--RPAREN -> ) [37:39]
-        |   |               |       `--METHOD_CALL -> ( [37:44]
-        |   |               |           |--IDENT -> y [37:43]
-        |   |               |           |--ELIST -> ELIST [37:46]
-        |   |               |           |   `--EXPR -> EXPR [37:46]
-        |   |               |           |       `--METHOD_CALL -> ( [37:46]
-        |   |               |           |           |--IDENT -> y [37:45]
-        |   |               |           |           |--ELIST -> ELIST [37:47]
-        |   |               |           |           |   `--EXPR -> EXPR [37:47]
-        |   |               |           |           |       `--STRING_LITERAL -> "y" [37:47]
-        |   |               |           |           `--RPAREN -> ) [37:50]
-        |   |               |           `--RPAREN -> ) [37:51]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [37:53]
-        |   |               |--STRING_TEMPLATE_CONTENT ->  there [37:54]
-        |   |               `--STRING_TEMPLATE_END -> " [37:60]
-        |   `--SEMI -> ; [37:61]
-        |--VARIABLE_DEF -> VARIABLE_DEF [40:1]
-        |   |--MODIFIERS -> MODIFIERS [40:1]
-        |   |--TYPE -> TYPE [40:1]
-        |   |   `--IDENT -> String [40:1]
-        |   |--IDENT -> result9 [40:8]
-        |   |--ASSIGN -> = [40:16]
-        |   |   `--EXPR -> EXPR [40:21]
-        |   |       `--DOT -> . [40:21]
-        |   |           |--IDENT -> STR [40:18]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [40:23]
-        |   |               |--STRING_TEMPLATE_CONTENT -> hey  [40:24]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [40:28]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [41:13]
-        |   |               |   `--PLUS -> + [41:13]
-        |   |               |       |--METHOD_CALL -> ( [41:4]
-        |   |               |       |   |--IDENT -> y [41:3]
-        |   |               |       |   |--ELIST -> ELIST [41:6]
-        |   |               |       |   |   `--EXPR -> EXPR [41:6]
-        |   |               |       |   |       `--METHOD_CALL -> ( [41:6]
-        |   |               |       |   |           |--IDENT -> y [41:5]
-        |   |               |       |   |           |--ELIST -> ELIST [41:7]
-        |   |               |       |   |           |   `--EXPR -> EXPR [41:7]
-        |   |               |       |   |           |       `--STRING_LITERAL -> "y" [41:7]
-        |   |               |       |   |           `--RPAREN -> ) [41:10]
-        |   |               |       |   `--RPAREN -> ) [41:11]
-        |   |               |       `--METHOD_CALL -> ( [41:16]
-        |   |               |           |--IDENT -> y [41:15]
-        |   |               |           |--ELIST -> ELIST [41:18]
-        |   |               |           |   `--EXPR -> EXPR [41:18]
-        |   |               |           |       `--METHOD_CALL -> ( [41:18]
-        |   |               |           |           |--IDENT -> y [41:17]
-        |   |               |           |           |--ELIST -> ELIST [41:19]
-        |   |               |           |           |   `--EXPR -> EXPR [41:19]
-        |   |               |           |           |       `--STRING_LITERAL -> "y" [41:19]
-        |   |               |           |           `--RPAREN -> ) [41:22]
-        |   |               |           `--RPAREN -> ) [41:23]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [42:3]
-        |   |               |--STRING_TEMPLATE_CONTENT ->  there [42:4]
-        |   |               `--STRING_TEMPLATE_END -> " [42:10]
-        |   `--SEMI -> ; [42:11]
-        |--VARIABLE_DEF -> VARIABLE_DEF [45:1]
-        |   |--MODIFIERS -> MODIFIERS [45:1]
-        |   |--TYPE -> TYPE [45:1]
-        |   |   `--IDENT -> String [45:1]
-        |   |--IDENT -> result10 [45:8]
-        |   |--ASSIGN -> = [45:17]
-        |   |   `--EXPR -> EXPR [45:22]
-        |   |       `--DOT -> . [45:22]
-        |   |           |--IDENT -> STR [45:19]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [45:24]
-        |   |               |--STRING_TEMPLATE_CONTENT -> hey  [45:25]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [45:29]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [46:13]
-        |   |               |   `--PLUS -> + [46:13]
-        |   |               |       |--METHOD_CALL -> ( [46:4]
-        |   |               |       |   |--IDENT -> y [46:3]
-        |   |               |       |   |--ELIST -> ELIST [46:6]
-        |   |               |       |   |   `--EXPR -> EXPR [46:6]
-        |   |               |       |   |       `--METHOD_CALL -> ( [46:6]
-        |   |               |       |   |           |--IDENT -> y [46:5]
-        |   |               |       |   |           |--ELIST -> ELIST [46:7]
-        |   |               |       |   |           |   `--EXPR -> EXPR [46:7]
-        |   |               |       |   |           |       `--STRING_LITERAL -> "y" [46:7]
-        |   |               |       |   |           `--RPAREN -> ) [46:10]
-        |   |               |       |   `--RPAREN -> ) [46:11]
-        |   |               |       `--METHOD_CALL -> ( [46:16]
-        |   |               |           |--IDENT -> y [46:15]
-        |   |               |           |--ELIST -> ELIST [46:18]
-        |   |               |           |   `--EXPR -> EXPR [46:18]
-        |   |               |           |       `--METHOD_CALL -> ( [46:18]
-        |   |               |           |           |--IDENT -> y [46:17]
-        |   |               |           |           |--ELIST -> ELIST [46:19]
-        |   |               |           |           |   `--EXPR -> EXPR [46:19]
-        |   |               |           |           |       `--STRING_LITERAL -> "y" [46:19]
-        |   |               |           |           `--RPAREN -> ) [46:22]
-        |   |               |           `--RPAREN -> ) [46:23]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [47:3]
-        |   |               |--STRING_TEMPLATE_CONTENT ->  there  [47:4]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [47:11]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [49:3]
-        |   |               |   `--PLUS -> + [49:3]
-        |   |               |       |--PLUS -> + [48:13]
-        |   |               |       |   |--METHOD_CALL -> ( [48:4]
-        |   |               |       |   |   |--IDENT -> y [48:3]
-        |   |               |       |   |   |--ELIST -> ELIST [48:6]
-        |   |               |       |   |   |   `--EXPR -> EXPR [48:6]
-        |   |               |       |   |   |       `--METHOD_CALL -> ( [48:6]
-        |   |               |       |   |   |           |--IDENT -> y [48:5]
-        |   |               |       |   |   |           |--ELIST -> ELIST [48:7]
-        |   |               |       |   |   |           |   `--EXPR -> EXPR [48:7]
-        |   |               |       |   |   |           |       `--STRING_LITERAL -> "y" [48:7]
-        |   |               |       |   |   |           `--RPAREN -> ) [48:10]
-        |   |               |       |   |   `--RPAREN -> ) [48:11]
-        |   |               |       |   `--METHOD_CALL -> ( [48:16]
-        |   |               |       |       |--IDENT -> y [48:15]
-        |   |               |       |       |--ELIST -> ELIST [48:18]
-        |   |               |       |       |   `--EXPR -> EXPR [48:18]
-        |   |               |       |       |       `--METHOD_CALL -> ( [48:18]
-        |   |               |       |       |           |--IDENT -> y [48:17]
-        |   |               |       |       |           |--ELIST -> ELIST [48:19]
-        |   |               |       |       |           |   `--EXPR -> EXPR [48:19]
-        |   |               |       |       |           |       `--STRING_LITERAL -> "y" [48:19]
-        |   |               |       |       |           `--RPAREN -> ) [48:22]
-        |   |               |       |       `--RPAREN -> ) [48:23]
-        |   |               |       `--DOT -> . [49:8]
-        |   |               |           |--IDENT -> STR [49:5]
-        |   |               |           `--STRING_TEMPLATE_BEGIN -> " [49:9]
-        |   |               |               |--STRING_TEMPLATE_CONTENT -> x [49:10]
-        |   |               |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [49:11]
-        |   |               |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [49:14]
-        |   |               |               |   `--IDENT -> x [49:14]
-        |   |               |               |--EMBEDDED_EXPRESSION_END -> } [49:16]
-        |   |               |               |--STRING_TEMPLATE_CONTENT -> x [49:17]
-        |   |               |               `--STRING_TEMPLATE_END -> " [49:18]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [50:3]
-        |   |               `--STRING_TEMPLATE_END -> " [50:4]
-        |   `--SEMI -> ; [50:5]
-        |--VARIABLE_DEF -> VARIABLE_DEF [52:1]
-        |   |--MODIFIERS -> MODIFIERS [52:1]
-        |   |--TYPE -> TYPE [52:1]
-        |   |   `--IDENT -> String [52:1]
-        |   |--IDENT -> name [52:8]
-        |   |--ASSIGN -> = [52:13]
-        |   |   `--EXPR -> EXPR [52:15]
-        |   |       `--STRING_LITERAL -> "world" [52:15]
-        |   `--SEMI -> ; [52:22]
-        |--VARIABLE_DEF -> VARIABLE_DEF [53:1]
-        |   |--MODIFIERS -> MODIFIERS [53:1]
-        |   |--TYPE -> TYPE [53:1]
-        |   |   `--IDENT -> String [53:1]
-        |   |--IDENT -> s [53:8]
-        |   |--ASSIGN -> = [53:10]
-        |   |   `--EXPR -> EXPR [53:15]
-        |   |       `--DOT -> . [53:15]
-        |   |           |--IDENT -> STR [53:12]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [53:16]
-        |   |               |--STRING_TEMPLATE_CONTENT -> Hello,  [53:17]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [53:24]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [53:27]
-        |   |               |   `--IDENT -> name [53:27]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [53:32]
-        |   |               |--STRING_TEMPLATE_CONTENT -> ! [53:33]
-        |   |               `--STRING_TEMPLATE_END -> " [53:34]
-        |   `--SEMI -> ; [53:35]
-        |--METHOD_DEF -> METHOD_DEF [55:1]
-        |   |--MODIFIERS -> MODIFIERS [55:1]
-        |   |   |--LITERAL_PRIVATE -> private [55:1]
-        |   |   `--LITERAL_STATIC -> static [55:9]
-        |   |--TYPE -> TYPE [55:16]
-        |   |   `--IDENT -> String [55:16]
-        |   |--IDENT -> y [55:23]
-        |   |--LPAREN -> ( [55:24]
-        |   |--PARAMETERS -> PARAMETERS [55:25]
-        |   |   `--PARAMETER_DEF -> PARAMETER_DEF [55:25]
-        |   |       |--MODIFIERS -> MODIFIERS [55:25]
-        |   |       |--TYPE -> TYPE [55:25]
-        |   |       |   `--IDENT -> String [55:25]
-        |   |       `--IDENT -> y [55:32]
-        |   |--RPAREN -> ) [55:33]
-        |   `--SLIST -> { [55:35]
-        |       |--LITERAL_RETURN -> return [56:2]
-        |       |   |--EXPR -> EXPR [56:9]
-        |       |   |   `--STRING_LITERAL -> "y" [56:9]
-        |       |   `--SEMI -> ; [56:12]
-        |       `--RCURLY -> } [57:1]
-        |--METHOD_DEF -> METHOD_DEF [60:1]
-        |   |--MODIFIERS -> MODIFIERS [60:1]
-        |   |--TYPE -> TYPE [60:1]
-        |   |   `--LITERAL_VOID -> void [60:1]
-        |   |--IDENT -> x [60:6]
-        |   |--LPAREN -> ( [60:7]
-        |   |--PARAMETERS -> PARAMETERS [60:8]
-        |   |   `--PARAMETER_DEF -> PARAMETER_DEF [60:8]
-        |   |       |--MODIFIERS -> MODIFIERS [60:8]
-        |   |       |--TYPE -> TYPE [60:8]
-        |   |       |   |--IDENT -> List [60:8]
-        |   |       |   `--TYPE_ARGUMENTS -> TYPE_ARGUMENTS [60:12]
-        |   |       |       |--GENERIC_START -> < [60:12]
-        |   |       |       |--TYPE_ARGUMENT -> TYPE_ARGUMENT [60:13]
-        |   |       |       |   |--WILDCARD_TYPE -> ? [60:13]
-        |   |       |       |   `--TYPE_UPPER_BOUNDS -> extends [60:15]
-        |   |       |       |       `--DOT -> . [60:37]
-        |   |       |       |           |--IDENT -> StringTemplate [60:23]
-        |   |       |       |           |--IDENT -> Processor [60:38]
-        |   |       |       |           `--TYPE_ARGUMENTS -> TYPE_ARGUMENTS [60:47]
-        |   |       |       |               |--GENERIC_START -> < [60:47]
-        |   |       |       |               |--TYPE_ARGUMENT -> TYPE_ARGUMENT [60:48]
-        |   |       |       |               |   `--IDENT -> String [60:48]
-        |   |       |       |               |--COMMA -> , [60:54]
-        |   |       |       |               |--TYPE_ARGUMENT -> TYPE_ARGUMENT [60:56]
-        |   |       |       |               |   `--IDENT -> RuntimeException [60:56]
-        |   |       |       |               `--GENERIC_END -> > [60:72]
-        |   |       |       `--GENERIC_END -> > [60:73]
-        |   |       `--IDENT -> list [60:75]
-        |   |--RPAREN -> ) [60:79]
-        |   `--SLIST -> { [60:81]
-        |       |--EXPR -> EXPR [61:13]
-        |       |   `--DOT -> . [61:13]
-        |       |       |--METHOD_CALL -> ( [61:10]
-        |       |       |   |--DOT -> . [61:6]
-        |       |       |   |   |--IDENT -> list [61:2]
-        |       |       |   |   `--IDENT -> get [61:7]
-        |       |       |   |--ELIST -> ELIST [61:11]
-        |       |       |   |   `--EXPR -> EXPR [61:11]
-        |       |       |   |       `--NUM_INT -> 0 [61:11]
-        |       |       |   `--RPAREN -> ) [61:12]
-        |       |       `--STRING_TEMPLATE_BEGIN -> " [61:14]
-        |       |           |--STRING_TEMPLATE_CONTENT ->  [61:15]
-        |       |           `--STRING_TEMPLATE_END -> " [61:15]
-        |       |--SEMI -> ; [61:16]
-        |       |--EXPR -> EXPR [62:13]
-        |       |   `--DOT -> . [62:13]
-        |       |       |--METHOD_CALL -> ( [62:10]
-        |       |       |   |--DOT -> . [62:6]
-        |       |       |   |   |--IDENT -> list [62:2]
-        |       |       |   |   `--IDENT -> get [62:7]
-        |       |       |   |--ELIST -> ELIST [62:11]
-        |       |       |   |   `--EXPR -> EXPR [62:11]
-        |       |       |   |       `--NUM_INT -> 0 [62:11]
-        |       |       |   `--RPAREN -> ) [62:12]
-        |       |       `--STRING_TEMPLATE_BEGIN -> " [62:14]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [62:15]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [62:19]
-        |       |           `--STRING_TEMPLATE_END -> " [62:20]
-        |       |--SEMI -> ; [62:21]
-        |       |--EXPR -> EXPR [63:13]
-        |       |   `--DOT -> . [63:13]
-        |       |       |--METHOD_CALL -> ( [63:10]
-        |       |       |   |--DOT -> . [63:6]
-        |       |       |   |   |--IDENT -> list [63:2]
-        |       |       |   |   `--IDENT -> get [63:7]
-        |       |       |   |--ELIST -> ELIST [63:11]
-        |       |       |   |   `--EXPR -> EXPR [63:11]
-        |       |       |   |       `--NUM_INT -> 0 [63:11]
-        |       |       |   `--RPAREN -> ) [63:12]
-        |       |       `--STRING_TEMPLATE_BEGIN -> " [63:15]
-        |       |           |--STRING_TEMPLATE_CONTENT -> x [63:16]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [63:17]
-        |       |           |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [63:20]
-        |       |           |   `--IDENT -> x [63:20]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [63:22]
-        |       |           |--STRING_TEMPLATE_CONTENT -> x [63:23]
-        |       |           `--STRING_TEMPLATE_END -> " [63:24]
-        |       |--SEMI -> ; [63:25]
-        |       |--EXPR -> EXPR [64:13]
-        |       |   `--DOT -> . [64:13]
-        |       |       |--METHOD_CALL -> ( [64:10]
-        |       |       |   |--DOT -> . [64:6]
-        |       |       |   |   |--IDENT -> list [64:2]
-        |       |       |   |   `--IDENT -> get [64:7]
-        |       |       |   |--ELIST -> ELIST [64:11]
-        |       |       |   |   `--EXPR -> EXPR [64:11]
-        |       |       |   |       `--NUM_INT -> 0 [64:11]
-        |       |       |   `--RPAREN -> ) [64:12]
-        |       |       `--STRING_TEMPLATE_BEGIN -> " [64:15]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:16]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:17]
-        |       |           |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [64:20]
-        |       |           |   `--IDENT -> x [64:20]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:22]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:23]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:24]
-        |       |           |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [64:27]
-        |       |           |   `--IDENT -> y [64:27]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:29]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:30]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:31]
-        |       |           |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [64:34]
-        |       |           |   `--IDENT -> x [64:34]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:36]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:37]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:38]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:40]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:41]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:42]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:44]
-        |       |           `--STRING_TEMPLATE_END -> " [64:45]
-        |       |--SEMI -> ; [64:46]
-        |       `--RCURLY -> } [65:1]
-        `--RCURLY -> } [66:0]
diff --git a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/ExpectedStringTemplateMultiLineWithComments.txt b/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/ExpectedStringTemplateMultiLineWithComments.txt
deleted file mode 100644
--- a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/ExpectedStringTemplateMultiLineWithComments.txt
+++ /dev/null
@@ -1,628 +0,0 @@
-COMPILATION_UNIT -> COMPILATION_UNIT [2:0]
-|--SINGLE_LINE_COMMENT -> // [1:0]
-|   `--COMMENT_CONTENT -> non-compiled with javac: Compilable with Java21\n [1:2]
-|--PACKAGE_DEF -> package [2:0]
-|   |--ANNOTATIONS -> ANNOTATIONS [2:47]
-|   |--DOT -> . [2:47]
-|   |   |--DOT -> . [2:39]
-|   |   |   |--DOT -> . [2:28]
-|   |   |   |   |--DOT -> . [2:22]
-|   |   |   |   |   |--DOT -> . [2:11]
-|   |   |   |   |   |   |--IDENT -> com [2:8]
-|   |   |   |   |   |   `--IDENT -> puppycrawl [2:12]
-|   |   |   |   |   `--IDENT -> tools [2:23]
-|   |   |   |   `--IDENT -> checkstyle [2:29]
-|   |   |   `--IDENT -> grammar [2:40]
-|   |   `--IDENT -> java21 [2:48]
-|   `--SEMI -> ; [2:54]
-|--IMPORT -> import [4:0]
-|   |--DOT -> . [4:16]
-|   |   |--DOT -> . [4:11]
-|   |   |   |--IDENT -> java [4:7]
-|   |   |   `--IDENT -> util [4:12]
-|   |   `--IDENT -> List [4:17]
-|   `--SEMI -> ; [4:21]
-`--CLASS_DEF -> CLASS_DEF [6:0]
-    |--MODIFIERS -> MODIFIERS [6:0]
-    |   `--LITERAL_PUBLIC -> public [6:0]
-    |--LITERAL_CLASS -> class [6:7]
-    |--IDENT -> InputStringTemplateMultiLineWithComments [6:13]
-    `--OBJBLOCK -> OBJBLOCK [6:54]
-        |--LCURLY -> { [6:54]
-        |--VARIABLE_DEF -> VARIABLE_DEF [7:4]
-        |   |--MODIFIERS -> MODIFIERS [7:4]
-        |   |--TYPE -> TYPE [7:4]
-        |   |   `--LITERAL_INT -> int [7:4]
-        |   |--IDENT -> x [7:8]
-        |   |--ASSIGN -> = [7:10]
-        |   |   `--EXPR -> EXPR [7:12]
-        |   |       `--NUM_INT -> 10 [7:12]
-        |   `--SEMI -> ; [7:14]
-        |--VARIABLE_DEF -> VARIABLE_DEF [8:4]
-        |   |--MODIFIERS -> MODIFIERS [8:4]
-        |   |--TYPE -> TYPE [8:4]
-        |   |   `--LITERAL_INT -> int [8:4]
-        |   |--IDENT -> y [8:8]
-        |   |--ASSIGN -> = [8:10]
-        |   |   `--EXPR -> EXPR [8:12]
-        |   |       `--NUM_INT -> 20 [8:12]
-        |   `--SEMI -> ; [8:14]
-        |--VARIABLE_DEF -> VARIABLE_DEF [11:4]
-        |   |--MODIFIERS -> MODIFIERS [11:4]
-        |   |--TYPE -> TYPE [11:4]
-        |   |   |--SINGLE_LINE_COMMENT -> // [10:4]
-        |   |   |   `--COMMENT_CONTENT ->  most basic example, empty string template expression\n [10:6]
-        |   |   `--IDENT -> String [11:4]
-        |   |--IDENT -> result1 [11:11]
-        |   |--ASSIGN -> = [11:19]
-        |   |   `--EXPR -> EXPR [11:24]
-        |   |       `--DOT -> . [11:24]
-        |   |           |--IDENT -> STR [11:21]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [11:25]
-        |   |               |--STRING_TEMPLATE_CONTENT ->  [11:26]
-        |   |               `--STRING_TEMPLATE_END -> " [11:26]
-        |   `--SEMI -> ; [11:27]
-        |--VARIABLE_DEF -> VARIABLE_DEF [13:4]
-        |   |--MODIFIERS -> MODIFIERS [13:4]
-        |   |--TYPE -> TYPE [13:4]
-        |   |   `--IDENT -> String [13:4]
-        |   |--IDENT -> result1_1 [13:11]
-        |   |--ASSIGN -> = [13:21]
-        |   |   `--EXPR -> EXPR [13:26]
-        |   |       `--DOT -> . [13:26]
-        |   |           |--IDENT -> STR [13:23]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [13:27]
-        |   |               |--STRING_TEMPLATE_CONTENT -> Hello world! [13:28]
-        |   |               `--STRING_TEMPLATE_END -> " [13:40]
-        |   `--SEMI -> ; [13:41]
-        |--VARIABLE_DEF -> VARIABLE_DEF [16:4]
-        |   |--MODIFIERS -> MODIFIERS [16:4]
-        |   |--TYPE -> TYPE [16:4]
-        |   |   |--SINGLE_LINE_COMMENT -> // [15:4]
-        |   |   |   `--COMMENT_CONTENT ->  no content, no expression\n [15:6]
-        |   |   `--IDENT -> String [16:4]
-        |   |--IDENT -> result1_2 [16:11]
-        |   |--ASSIGN -> = [16:21]
-        |   |   `--EXPR -> EXPR [16:26]
-        |   |       `--DOT -> . [16:26]
-        |   |           |--IDENT -> STR [16:23]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [16:27]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [16:28]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [16:32]
-        |   |               `--STRING_TEMPLATE_END -> " [16:33]
-        |   `--SEMI -> ; [16:34]
-        |--VARIABLE_DEF -> VARIABLE_DEF [19:4]
-        |   |--MODIFIERS -> MODIFIERS [19:4]
-        |   |--TYPE -> TYPE [19:4]
-        |   |   |--SINGLE_LINE_COMMENT -> // [18:4]
-        |   |   |   `--COMMENT_CONTENT ->  simple single value interpolation\n [18:6]
-        |   |   `--IDENT -> String [19:4]
-        |   |--IDENT -> result2 [19:11]
-        |   |--ASSIGN -> = [19:19]
-        |   |   `--EXPR -> EXPR [19:24]
-        |   |       `--DOT -> . [19:24]
-        |   |           |--IDENT -> STR [19:21]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [19:26]
-        |   |               |--STRING_TEMPLATE_CONTENT -> x [19:27]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [19:28]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [19:31]
-        |   |               |   `--IDENT -> x [19:31]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [19:33]
-        |   |               |--STRING_TEMPLATE_CONTENT -> x [19:34]
-        |   |               `--STRING_TEMPLATE_END -> " [19:35]
-        |   `--SEMI -> ; [19:36]
-        |--VARIABLE_DEF -> VARIABLE_DEF [22:4]
-        |   |--MODIFIERS -> MODIFIERS [22:4]
-        |   |--TYPE -> TYPE [22:4]
-        |   |   |--SINGLE_LINE_COMMENT -> // [19:38]
-        |   |   |   `--COMMENT_CONTENT ->  comment\n [19:40]
-        |   |   |--SINGLE_LINE_COMMENT -> // [21:4]
-        |   |   |   `--COMMENT_CONTENT ->  simple single value interpolation with a method call\n [21:6]
-        |   |   `--IDENT -> String [22:4]
-        |   |--IDENT -> result3 [22:11]
-        |   |--ASSIGN -> = [22:19]
-        |   |   `--EXPR -> EXPR [22:24]
-        |   |       `--DOT -> . [22:24]
-        |   |           |--IDENT -> STR [22:21]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [22:26]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [22:27]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [22:31]
-        |   |               |   `--METHOD_CALL -> ( [22:31]
-        |   |               |       |--IDENT -> y [22:30]
-        |   |               |       |--ELIST -> ELIST [22:33]
-        |   |               |       |   `--EXPR -> EXPR [22:33]
-        |   |               |       |       `--METHOD_CALL -> ( [22:33]
-        |   |               |       |           |--IDENT -> y [22:32]
-        |   |               |       |           |--ELIST -> ELIST [22:34]
-        |   |               |       |           |   `--EXPR -> EXPR [22:34]
-        |   |               |       |           |       `--STRING_LITERAL -> "y" [22:34]
-        |   |               |       |           `--RPAREN -> ) [22:37]
-        |   |               |       `--RPAREN -> ) [22:38]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [22:40]
-        |   |               `--STRING_TEMPLATE_END -> " [22:41]
-        |   `--SEMI -> ; [22:42]
-        |--VARIABLE_DEF -> VARIABLE_DEF [25:4]
-        |   |--MODIFIERS -> MODIFIERS [25:4]
-        |   |--TYPE -> TYPE [25:4]
-        |   |   |--SINGLE_LINE_COMMENT -> // [24:4]
-        |   |   |   `--COMMENT_CONTENT ->  bit more complex example, multiple interpolations\n [24:6]
-        |   |   `--IDENT -> String [25:4]
-        |   |--IDENT -> result4 [25:11]
-        |   |--ASSIGN -> = [25:19]
-        |   |   `--EXPR -> EXPR [25:36]
-        |   |       `--PLUS -> + [25:36]
-        |   |           |--DOT -> . [25:24]
-        |   |           |   |--IDENT -> STR [25:21]
-        |   |           |   `--STRING_TEMPLATE_BEGIN -> " [25:26]
-        |   |           |       |--EMBEDDED_EXPRESSION_BEGIN -> \{ [25:27]
-        |   |           |       |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [25:30]
-        |   |           |       |   `--IDENT -> x [25:30]
-        |   |           |       |--EMBEDDED_EXPRESSION_END -> } [25:32]
-        |   |           |       `--STRING_TEMPLATE_END -> " [25:33]
-        |   |           `--DOT -> . [25:41]
-        |   |               |--IDENT -> STR [25:38]
-        |   |               `--STRING_TEMPLATE_BEGIN -> " [25:43]
-        |   |                   |--EMBEDDED_EXPRESSION_BEGIN -> \{ [25:44]
-        |   |                   |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [25:47]
-        |   |                   |   `--IDENT -> y [25:47]
-        |   |                   |--EMBEDDED_EXPRESSION_END -> } [25:49]
-        |   |                   `--STRING_TEMPLATE_END -> " [25:50]
-        |   `--SEMI -> ; [25:51]
-        |--VARIABLE_DEF -> VARIABLE_DEF [28:4]
-        |   |--MODIFIERS -> MODIFIERS [28:4]
-        |   |--TYPE -> TYPE [28:4]
-        |   |   |--SINGLE_LINE_COMMENT -> // [27:4]
-        |   |   |   `--COMMENT_CONTENT ->  bit more complex example, multiple interpolations with method calls\n [27:6]
-        |   |   `--IDENT -> String [28:4]
-        |   |--IDENT -> result5 [28:11]
-        |   |--ASSIGN -> = [28:19]
-        |   |   `--EXPR -> EXPR [28:44]
-        |   |       `--PLUS -> + [28:44]
-        |   |           |--DOT -> . [28:24]
-        |   |           |   |--IDENT -> STR [28:21]
-        |   |           |   `--STRING_TEMPLATE_BEGIN -> " [28:26]
-        |   |           |       |--EMBEDDED_EXPRESSION_BEGIN -> \{ [28:27]
-        |   |           |       |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [28:31]
-        |   |           |       |   `--METHOD_CALL -> ( [28:31]
-        |   |           |       |       |--IDENT -> y [28:30]
-        |   |           |       |       |--ELIST -> ELIST [28:33]
-        |   |           |       |       |   `--EXPR -> EXPR [28:33]
-        |   |           |       |       |       `--METHOD_CALL -> ( [28:33]
-        |   |           |       |       |           |--IDENT -> y [28:32]
-        |   |           |       |       |           |--ELIST -> ELIST [28:34]
-        |   |           |       |       |           |   `--EXPR -> EXPR [28:34]
-        |   |           |       |       |           |       `--STRING_LITERAL -> "y" [28:34]
-        |   |           |       |       |           `--RPAREN -> ) [28:37]
-        |   |           |       |       `--RPAREN -> ) [28:38]
-        |   |           |       |--EMBEDDED_EXPRESSION_END -> } [28:40]
-        |   |           |       `--STRING_TEMPLATE_END -> " [28:41]
-        |   |           `--DOT -> . [28:49]
-        |   |               |--IDENT -> STR [28:46]
-        |   |               `--STRING_TEMPLATE_BEGIN -> " [28:51]
-        |   |                   |--EMBEDDED_EXPRESSION_BEGIN -> \{ [28:52]
-        |   |                   |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [28:56]
-        |   |                   |   `--METHOD_CALL -> ( [28:56]
-        |   |                   |       |--IDENT -> y [28:55]
-        |   |                   |       |--ELIST -> ELIST [28:58]
-        |   |                   |       |   `--EXPR -> EXPR [28:58]
-        |   |                   |       |       `--METHOD_CALL -> ( [28:58]
-        |   |                   |       |           |--IDENT -> y [28:57]
-        |   |                   |       |           |--ELIST -> ELIST [28:59]
-        |   |                   |       |           |   `--EXPR -> EXPR [28:59]
-        |   |                   |       |           |       `--STRING_LITERAL -> "y" [28:59]
-        |   |                   |       |           |--BLOCK_COMMENT_BEGIN -> /* [28:62]
-        |   |                   |       |           |   |--COMMENT_CONTENT -> yep, comment here, too [28:64]
-        |   |                   |       |           |   `--BLOCK_COMMENT_END -> */ [28:85]
-        |   |                   |       |           `--RPAREN -> ) [28:88]
-        |   |                   |       `--RPAREN -> ) [28:89]
-        |   |                   |--EMBEDDED_EXPRESSION_END -> } [28:91]
-        |   |                   `--STRING_TEMPLATE_END -> " [28:92]
-        |   `--SEMI -> ; [28:93]
-        |--VARIABLE_DEF -> VARIABLE_DEF [31:4]
-        |   |--MODIFIERS -> MODIFIERS [31:4]
-        |   |--TYPE -> TYPE [31:4]
-        |   |   |--SINGLE_LINE_COMMENT -> // [30:4]
-        |   |   |   `--COMMENT_CONTENT ->  string template concatenation\n [30:6]
-        |   |   `--IDENT -> String [31:4]
-        |   |--IDENT -> result6 [31:11]
-        |   |--ASSIGN -> = [31:19]
-        |   |   `--EXPR -> EXPR [31:36]
-        |   |       `--PLUS -> + [31:36]
-        |   |           |--DOT -> . [31:24]
-        |   |           |   |--IDENT -> STR [31:21]
-        |   |           |   `--STRING_TEMPLATE_BEGIN -> " [31:26]
-        |   |           |       |--EMBEDDED_EXPRESSION_BEGIN -> \{ [31:27]
-        |   |           |       |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [31:30]
-        |   |           |       |   `--IDENT -> x [31:30]
-        |   |           |       |--EMBEDDED_EXPRESSION_END -> } [31:32]
-        |   |           |       `--STRING_TEMPLATE_END -> " [31:33]
-        |   |           `--DOT -> . [31:58]
-        |   |               |--BLOCK_COMMENT_BEGIN -> /* [31:38]
-        |   |               |   |--COMMENT_CONTENT -> comment here [31:40]
-        |   |               |   `--BLOCK_COMMENT_END -> */ [31:51]
-        |   |               |--IDENT -> STR [31:55]
-        |   |               `--STRING_TEMPLATE_BEGIN -> " [31:60]
-        |   |                   |--EMBEDDED_EXPRESSION_BEGIN -> \{ [31:61]
-        |   |                   |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [31:64]
-        |   |                   |   `--IDENT -> y [31:64]
-        |   |                   |--EMBEDDED_EXPRESSION_END -> } [31:66]
-        |   |                   `--STRING_TEMPLATE_END -> " [31:67]
-        |   `--SEMI -> ; [31:68]
-        |--VARIABLE_DEF -> VARIABLE_DEF [34:4]
-        |   |--MODIFIERS -> MODIFIERS [34:4]
-        |   |--TYPE -> TYPE [34:4]
-        |   |   |--SINGLE_LINE_COMMENT -> // [33:4]
-        |   |   |   `--COMMENT_CONTENT ->  concatentation in embedded expression\n [33:6]
-        |   |   `--IDENT -> String [34:4]
-        |   |--IDENT -> result7 [34:11]
-        |   |--ASSIGN -> = [34:19]
-        |   |   `--EXPR -> EXPR [34:24]
-        |   |       `--DOT -> . [34:24]
-        |   |           |--IDENT -> STR [34:21]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [34:26]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [34:27]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [34:32]
-        |   |               |   `--PLUS -> + [34:32]
-        |   |               |       |--IDENT -> x [34:30]
-        |   |               |       `--IDENT -> y [34:34]
-        |   |               |--BLOCK_COMMENT_BEGIN -> /* [34:36]
-        |   |               |   |--COMMENT_CONTENT -> comment here too [34:38]
-        |   |               |   `--BLOCK_COMMENT_END -> */ [34:53]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [34:57]
-        |   |               `--STRING_TEMPLATE_END -> " [34:58]
-        |   `--SEMI -> ; [34:59]
-        |--VARIABLE_DEF -> VARIABLE_DEF [37:4]
-        |   |--MODIFIERS -> MODIFIERS [37:4]
-        |   |--TYPE -> TYPE [37:4]
-        |   |   |--SINGLE_LINE_COMMENT -> // [36:4]
-        |   |   |   `--COMMENT_CONTENT ->  concatentation in embedded expression with method calls\n [36:6]
-        |   |   `--IDENT -> String [37:4]
-        |   |--IDENT -> result8 [37:11]
-        |   |--ASSIGN -> = [37:19]
-        |   |   `--EXPR -> EXPR [37:24]
-        |   |       `--DOT -> . [37:24]
-        |   |           |--IDENT -> STR [37:21]
-        |   |           |--BLOCK_COMMENT_BEGIN -> /* [37:25]
-        |   |           |   |--COMMENT_CONTENT -> comment here [37:27]
-        |   |           |   `--BLOCK_COMMENT_END -> */ [37:38]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [37:42]
-        |   |               |--STRING_TEMPLATE_CONTENT -> hey  [37:43]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [37:47]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [37:60]
-        |   |               |   `--PLUS -> + [37:60]
-        |   |               |       |--METHOD_CALL -> ( [37:51]
-        |   |               |       |   |--IDENT -> y [37:50]
-        |   |               |       |   |--ELIST -> ELIST [37:53]
-        |   |               |       |   |   `--EXPR -> EXPR [37:53]
-        |   |               |       |   |       `--METHOD_CALL -> ( [37:53]
-        |   |               |       |   |           |--IDENT -> y [37:52]
-        |   |               |       |   |           |--ELIST -> ELIST [37:54]
-        |   |               |       |   |           |   `--EXPR -> EXPR [37:54]
-        |   |               |       |   |           |       `--STRING_LITERAL -> "y" [37:54]
-        |   |               |       |   |           `--RPAREN -> ) [37:57]
-        |   |               |       |   `--RPAREN -> ) [37:58]
-        |   |               |       `--METHOD_CALL -> ( [37:63]
-        |   |               |           |--IDENT -> y [37:62]
-        |   |               |           |--ELIST -> ELIST [37:65]
-        |   |               |           |   `--EXPR -> EXPR [37:65]
-        |   |               |           |       `--METHOD_CALL -> ( [37:65]
-        |   |               |           |           |--IDENT -> y [37:64]
-        |   |               |           |           |--ELIST -> ELIST [37:66]
-        |   |               |           |           |   `--EXPR -> EXPR [37:66]
-        |   |               |           |           |       `--STRING_LITERAL -> "y" [37:66]
-        |   |               |           |           `--RPAREN -> ) [37:69]
-        |   |               |           `--RPAREN -> ) [37:70]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [37:72]
-        |   |               |--STRING_TEMPLATE_CONTENT ->  there [37:73]
-        |   |               `--STRING_TEMPLATE_END -> " [37:79]
-        |   `--SEMI -> ; [37:80]
-        |--VARIABLE_DEF -> VARIABLE_DEF [40:4]
-        |   |--MODIFIERS -> MODIFIERS [40:4]
-        |   |--TYPE -> TYPE [40:4]
-        |   |   |--SINGLE_LINE_COMMENT -> // [39:4]
-        |   |   |   `--COMMENT_CONTENT ->  multiple lines\n [39:6]
-        |   |   `--IDENT -> String [40:4]
-        |   |--IDENT -> result9 [40:11]
-        |   |--ASSIGN -> = [40:19]
-        |   |   `--EXPR -> EXPR [40:24]
-        |   |       `--DOT -> . [40:24]
-        |   |           |--IDENT -> STR [40:21]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [40:26]
-        |   |               |--STRING_TEMPLATE_CONTENT -> hey  [40:27]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [40:31]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [41:22]
-        |   |               |   `--PLUS -> + [41:22]
-        |   |               |       |--METHOD_CALL -> ( [41:13]
-        |   |               |       |   |--SINGLE_LINE_COMMENT -> // [40:34]
-        |   |               |       |   |   `--COMMENT_CONTENT ->  comment here\n [40:36]
-        |   |               |       |   |--IDENT -> y [41:12]
-        |   |               |       |   |--ELIST -> ELIST [41:15]
-        |   |               |       |   |   `--EXPR -> EXPR [41:15]
-        |   |               |       |   |       `--METHOD_CALL -> ( [41:15]
-        |   |               |       |   |           |--IDENT -> y [41:14]
-        |   |               |       |   |           |--ELIST -> ELIST [41:16]
-        |   |               |       |   |           |   `--EXPR -> EXPR [41:16]
-        |   |               |       |   |           |       `--STRING_LITERAL -> "y" [41:16]
-        |   |               |       |   |           `--RPAREN -> ) [41:19]
-        |   |               |       |   `--RPAREN -> ) [41:20]
-        |   |               |       `--METHOD_CALL -> ( [41:25]
-        |   |               |           |--IDENT -> y [41:24]
-        |   |               |           |--ELIST -> ELIST [41:27]
-        |   |               |           |   `--EXPR -> EXPR [41:27]
-        |   |               |           |       `--METHOD_CALL -> ( [41:27]
-        |   |               |           |           |--IDENT -> y [41:26]
-        |   |               |           |           |--ELIST -> ELIST [41:28]
-        |   |               |           |           |   `--EXPR -> EXPR [41:28]
-        |   |               |           |           |       `--STRING_LITERAL -> "y" [41:28]
-        |   |               |           |           `--RPAREN -> ) [41:31]
-        |   |               |           `--RPAREN -> ) [41:32]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [42:12]
-        |   |               |--STRING_TEMPLATE_CONTENT ->  there [42:13]
-        |   |               `--STRING_TEMPLATE_END -> " [42:19]
-        |   `--SEMI -> ; [42:20]
-        |--VARIABLE_DEF -> VARIABLE_DEF [45:4]
-        |   |--MODIFIERS -> MODIFIERS [45:4]
-        |   |--TYPE -> TYPE [45:4]
-        |   |   |--SINGLE_LINE_COMMENT -> // [44:4]
-        |   |   |   `--COMMENT_CONTENT ->  multiple lines with many expressions and comments\n [44:6]
-        |   |   `--IDENT -> String [45:4]
-        |   |--IDENT -> result10 [45:11]
-        |   |--ASSIGN -> = [45:20]
-        |   |   `--EXPR -> EXPR [45:25]
-        |   |       `--DOT -> . [45:25]
-        |   |           |--IDENT -> STR [45:22]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [45:27]
-        |   |               |--STRING_TEMPLATE_CONTENT -> hey  [45:28]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [45:32]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [46:22]
-        |   |               |   `--PLUS -> + [46:22]
-        |   |               |       |--METHOD_CALL -> ( [46:13]
-        |   |               |       |   |--BLOCK_COMMENT_BEGIN -> /* [45:35]
-        |   |               |       |   |   |--COMMENT_CONTENT -> ****comment here [45:37]
-        |   |               |       |   |   `--BLOCK_COMMENT_END -> */ [45:52]
-        |   |               |       |   |--SINGLE_LINE_COMMENT -> // [45:56]
-        |   |               |       |   |   `--COMMENT_CONTENT ->  comment here\n [45:58]
-        |   |               |       |   |--IDENT -> y [46:12]
-        |   |               |       |   |--ELIST -> ELIST [46:15]
-        |   |               |       |   |   `--EXPR -> EXPR [46:15]
-        |   |               |       |   |       `--METHOD_CALL -> ( [46:15]
-        |   |               |       |   |           |--IDENT -> y [46:14]
-        |   |               |       |   |           |--ELIST -> ELIST [46:16]
-        |   |               |       |   |           |   `--EXPR -> EXPR [46:16]
-        |   |               |       |   |           |       `--STRING_LITERAL -> "y" [46:16]
-        |   |               |       |   |           `--RPAREN -> ) [46:19]
-        |   |               |       |   `--RPAREN -> ) [46:20]
-        |   |               |       `--METHOD_CALL -> ( [46:25]
-        |   |               |           |--IDENT -> y [46:24]
-        |   |               |           |--ELIST -> ELIST [46:27]
-        |   |               |           |   `--EXPR -> EXPR [46:27]
-        |   |               |           |       `--METHOD_CALL -> ( [46:27]
-        |   |               |           |           |--IDENT -> y [46:26]
-        |   |               |           |           |--ELIST -> ELIST [46:28]
-        |   |               |           |           |   `--EXPR -> EXPR [46:28]
-        |   |               |           |           |       `--STRING_LITERAL -> "y" [46:28]
-        |   |               |           |           `--RPAREN -> ) [46:31]
-        |   |               |           `--RPAREN -> ) [46:32]
-        |   |               |--BLOCK_COMMENT_BEGIN -> /* [46:34]
-        |   |               |   |--COMMENT_CONTENT ->  comment here  [46:36]
-        |   |               |   `--BLOCK_COMMENT_END -> */ [46:49]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [47:12]
-        |   |               |--STRING_TEMPLATE_CONTENT ->  there  [47:13]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [47:20]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [49:12]
-        |   |               |   |--SINGLE_LINE_COMMENT -> // [48:34]
-        |   |               |   |   `--COMMENT_CONTENT ->  comment there\n [48:36]
-        |   |               |   `--PLUS -> + [49:12]
-        |   |               |       |--PLUS -> + [48:22]
-        |   |               |       |   |--METHOD_CALL -> ( [48:13]
-        |   |               |       |   |   |--BLOCK_COMMENT_BEGIN -> /* [47:23]
-        |   |               |       |   |   |   |--COMMENT_CONTENT ->  [47:25]
-        |   |               |       |   |   |   `--BLOCK_COMMENT_END -> */ [47:24]
-        |   |               |       |   |   |--SINGLE_LINE_COMMENT -> // [47:28]
-        |   |               |       |   |   |   `--COMMENT_CONTENT ->  comment here\n [47:30]
-        |   |               |       |   |   |--IDENT -> y [48:12]
-        |   |               |       |   |   |--ELIST -> ELIST [48:15]
-        |   |               |       |   |   |   `--EXPR -> EXPR [48:15]
-        |   |               |       |   |   |       `--METHOD_CALL -> ( [48:15]
-        |   |               |       |   |   |           |--IDENT -> y [48:14]
-        |   |               |       |   |   |           |--ELIST -> ELIST [48:16]
-        |   |               |       |   |   |           |   `--EXPR -> EXPR [48:16]
-        |   |               |       |   |   |           |       `--STRING_LITERAL -> "y" [48:16]
-        |   |               |       |   |   |           `--RPAREN -> ) [48:19]
-        |   |               |       |   |   `--RPAREN -> ) [48:20]
-        |   |               |       |   `--METHOD_CALL -> ( [48:25]
-        |   |               |       |       |--IDENT -> y [48:24]
-        |   |               |       |       |--ELIST -> ELIST [48:27]
-        |   |               |       |       |   `--EXPR -> EXPR [48:27]
-        |   |               |       |       |       `--METHOD_CALL -> ( [48:27]
-        |   |               |       |       |           |--IDENT -> y [48:26]
-        |   |               |       |       |           |--ELIST -> ELIST [48:28]
-        |   |               |       |       |           |   `--EXPR -> EXPR [48:28]
-        |   |               |       |       |           |       `--STRING_LITERAL -> "y" [48:28]
-        |   |               |       |       |           `--RPAREN -> ) [48:31]
-        |   |               |       |       `--RPAREN -> ) [48:32]
-        |   |               |       `--DOT -> . [49:17]
-        |   |               |           |--IDENT -> STR [49:14]
-        |   |               |           `--STRING_TEMPLATE_BEGIN -> " [49:18]
-        |   |               |               |--STRING_TEMPLATE_CONTENT -> x [49:19]
-        |   |               |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [49:20]
-        |   |               |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [49:23]
-        |   |               |               |   `--IDENT -> x [49:23]
-        |   |               |               |--EMBEDDED_EXPRESSION_END -> } [49:25]
-        |   |               |               |--STRING_TEMPLATE_CONTENT -> x [49:26]
-        |   |               |               `--STRING_TEMPLATE_END -> " [49:27]
-        |   |               |--SINGLE_LINE_COMMENT -> // [49:29]
-        |   |               |   `--COMMENT_CONTENT ->  comment everywhere\n [49:31]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [50:12]
-        |   |               `--STRING_TEMPLATE_END -> " [50:13]
-        |   `--SEMI -> ; [50:14]
-        |--VARIABLE_DEF -> VARIABLE_DEF [52:4]
-        |   |--MODIFIERS -> MODIFIERS [52:4]
-        |   |--TYPE -> TYPE [52:4]
-        |   |   `--IDENT -> String [52:4]
-        |   |--IDENT -> name [52:11]
-        |   |--ASSIGN -> = [52:16]
-        |   |   `--EXPR -> EXPR [52:18]
-        |   |       `--STRING_LITERAL -> "world" [52:18]
-        |   `--SEMI -> ; [52:25]
-        |--VARIABLE_DEF -> VARIABLE_DEF [53:4]
-        |   |--MODIFIERS -> MODIFIERS [53:4]
-        |   |--TYPE -> TYPE [53:4]
-        |   |   `--IDENT -> String [53:4]
-        |   |--IDENT -> s [53:11]
-        |   |--ASSIGN -> = [53:13]
-        |   |   `--EXPR -> EXPR [53:18]
-        |   |       `--DOT -> . [53:18]
-        |   |           |--IDENT -> STR [53:15]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [53:19]
-        |   |               |--STRING_TEMPLATE_CONTENT -> Hello,  [53:20]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [53:27]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [53:30]
-        |   |               |   `--IDENT -> name [53:30]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [53:35]
-        |   |               |--STRING_TEMPLATE_CONTENT -> ! [53:36]
-        |   |               `--STRING_TEMPLATE_END -> " [53:37]
-        |   `--SEMI -> ; [53:38]
-        |--METHOD_DEF -> METHOD_DEF [55:4]
-        |   |--MODIFIERS -> MODIFIERS [55:4]
-        |   |   |--LITERAL_PRIVATE -> private [55:4]
-        |   |   `--LITERAL_STATIC -> static [55:12]
-        |   |--TYPE -> TYPE [55:19]
-        |   |   `--IDENT -> String [55:19]
-        |   |--IDENT -> y [55:26]
-        |   |--LPAREN -> ( [55:27]
-        |   |--PARAMETERS -> PARAMETERS [55:28]
-        |   |   `--PARAMETER_DEF -> PARAMETER_DEF [55:28]
-        |   |       |--MODIFIERS -> MODIFIERS [55:28]
-        |   |       |--TYPE -> TYPE [55:28]
-        |   |       |   `--IDENT -> String [55:28]
-        |   |       `--IDENT -> y [55:35]
-        |   |--RPAREN -> ) [55:36]
-        |   `--SLIST -> { [55:38]
-        |       |--LITERAL_RETURN -> return [56:8]
-        |       |   |--EXPR -> EXPR [56:15]
-        |       |   |   `--STRING_LITERAL -> "y" [56:15]
-        |       |   `--SEMI -> ; [56:18]
-        |       `--RCURLY -> } [57:4]
-        |--METHOD_DEF -> METHOD_DEF [60:4]
-        |   |--MODIFIERS -> MODIFIERS [60:4]
-        |   |--TYPE -> TYPE [60:4]
-        |   |   |--SINGLE_LINE_COMMENT -> // [59:4]
-        |   |   |   `--COMMENT_CONTENT ->  Verify proper behavior of TransType w.r.t. templated Strings\n [59:6]
-        |   |   `--LITERAL_VOID -> void [60:4]
-        |   |--IDENT -> x [60:9]
-        |   |--LPAREN -> ( [60:10]
-        |   |--PARAMETERS -> PARAMETERS [60:11]
-        |   |   `--PARAMETER_DEF -> PARAMETER_DEF [60:11]
-        |   |       |--MODIFIERS -> MODIFIERS [60:11]
-        |   |       |--TYPE -> TYPE [60:11]
-        |   |       |   |--IDENT -> List [60:11]
-        |   |       |   `--TYPE_ARGUMENTS -> TYPE_ARGUMENTS [60:15]
-        |   |       |       |--GENERIC_START -> < [60:15]
-        |   |       |       |--TYPE_ARGUMENT -> TYPE_ARGUMENT [60:16]
-        |   |       |       |   |--WILDCARD_TYPE -> ? [60:16]
-        |   |       |       |   `--TYPE_UPPER_BOUNDS -> extends [60:18]
-        |   |       |       |       `--DOT -> . [60:40]
-        |   |       |       |           |--IDENT -> StringTemplate [60:26]
-        |   |       |       |           |--IDENT -> Processor [60:41]
-        |   |       |       |           `--TYPE_ARGUMENTS -> TYPE_ARGUMENTS [60:50]
-        |   |       |       |               |--GENERIC_START -> < [60:50]
-        |   |       |       |               |--TYPE_ARGUMENT -> TYPE_ARGUMENT [60:51]
-        |   |       |       |               |   `--IDENT -> String [60:51]
-        |   |       |       |               |--COMMA -> , [60:57]
-        |   |       |       |               |--TYPE_ARGUMENT -> TYPE_ARGUMENT [60:59]
-        |   |       |       |               |   `--IDENT -> RuntimeException [60:59]
-        |   |       |       |               `--GENERIC_END -> > [60:75]
-        |   |       |       `--GENERIC_END -> > [60:76]
-        |   |       `--IDENT -> list [60:78]
-        |   |--RPAREN -> ) [60:82]
-        |   `--SLIST -> { [60:84]
-        |       |--EXPR -> EXPR [61:19]
-        |       |   `--DOT -> . [61:19]
-        |       |       |--METHOD_CALL -> ( [61:16]
-        |       |       |   |--DOT -> . [61:12]
-        |       |       |   |   |--IDENT -> list [61:8]
-        |       |       |   |   `--IDENT -> get [61:13]
-        |       |       |   |--ELIST -> ELIST [61:17]
-        |       |       |   |   `--EXPR -> EXPR [61:17]
-        |       |       |   |       `--NUM_INT -> 0 [61:17]
-        |       |       |   `--RPAREN -> ) [61:18]
-        |       |       `--STRING_TEMPLATE_BEGIN -> " [61:20]
-        |       |           |--STRING_TEMPLATE_CONTENT ->  [61:21]
-        |       |           `--STRING_TEMPLATE_END -> " [61:21]
-        |       |--SEMI -> ; [61:22]
-        |       |--EXPR -> EXPR [62:19]
-        |       |   `--DOT -> . [62:19]
-        |       |       |--METHOD_CALL -> ( [62:16]
-        |       |       |   |--DOT -> . [62:12]
-        |       |       |   |   |--IDENT -> list [62:8]
-        |       |       |   |   `--IDENT -> get [62:13]
-        |       |       |   |--ELIST -> ELIST [62:17]
-        |       |       |   |   `--EXPR -> EXPR [62:17]
-        |       |       |   |       `--NUM_INT -> 0 [62:17]
-        |       |       |   `--RPAREN -> ) [62:18]
-        |       |       `--STRING_TEMPLATE_BEGIN -> " [62:20]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [62:21]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [62:25]
-        |       |           `--STRING_TEMPLATE_END -> " [62:26]
-        |       |--SEMI -> ; [62:27]
-        |       |--EXPR -> EXPR [63:19]
-        |       |   `--DOT -> . [63:19]
-        |       |       |--METHOD_CALL -> ( [63:16]
-        |       |       |   |--DOT -> . [63:12]
-        |       |       |   |   |--IDENT -> list [63:8]
-        |       |       |   |   `--IDENT -> get [63:13]
-        |       |       |   |--ELIST -> ELIST [63:17]
-        |       |       |   |   `--EXPR -> EXPR [63:17]
-        |       |       |   |       `--NUM_INT -> 0 [63:17]
-        |       |       |   `--RPAREN -> ) [63:18]
-        |       |       `--STRING_TEMPLATE_BEGIN -> " [63:21]
-        |       |           |--STRING_TEMPLATE_CONTENT -> x [63:22]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [63:23]
-        |       |           |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [63:26]
-        |       |           |   `--IDENT -> x [63:26]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [63:28]
-        |       |           |--STRING_TEMPLATE_CONTENT -> x [63:29]
-        |       |           `--STRING_TEMPLATE_END -> " [63:30]
-        |       |--SEMI -> ; [63:31]
-        |       |--EXPR -> EXPR [64:19]
-        |       |   `--DOT -> . [64:19]
-        |       |       |--METHOD_CALL -> ( [64:16]
-        |       |       |   |--DOT -> . [64:12]
-        |       |       |   |   |--SINGLE_LINE_COMMENT -> // [63:33]
-        |       |       |   |   |   `--COMMENT_CONTENT ->  comments in here\n [63:35]
-        |       |       |   |   |--IDENT -> list [64:8]
-        |       |       |   |   `--IDENT -> get [64:13]
-        |       |       |   |--ELIST -> ELIST [64:17]
-        |       |       |   |   `--EXPR -> EXPR [64:17]
-        |       |       |   |       `--NUM_INT -> 0 [64:17]
-        |       |       |   `--RPAREN -> ) [64:18]
-        |       |       `--STRING_TEMPLATE_BEGIN -> " [64:21]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:22]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:23]
-        |       |           |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [64:26]
-        |       |           |   `--IDENT -> x [64:26]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:28]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:29]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:30]
-        |       |           |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [64:33]
-        |       |           |   `--IDENT -> y [64:33]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:35]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:36]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:37]
-        |       |           |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [64:40]
-        |       |           |   `--IDENT -> x [64:40]
-        |       |           |--BLOCK_COMMENT_BEGIN -> /* [64:42]
-        |       |           |   |--COMMENT_CONTENT -> comments in here, as well [64:44]
-        |       |           |   `--BLOCK_COMMENT_END -> */ [64:68]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:72]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:73]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:74]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:76]
-        |       |           |--STRING_TEMPLATE_CONTENT -> . [64:77]
-        |       |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [64:78]
-        |       |           |--EMBEDDED_EXPRESSION_END -> } [64:80]
-        |       |           `--STRING_TEMPLATE_END -> " [64:81]
-        |       |--SEMI -> ; [64:82]
-        |       `--RCURLY -> } [65:4]
-        `--RCURLY -> } [66:0]
diff --git a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/ExpectedStringTemplateNested.txt b/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/ExpectedStringTemplateNested.txt
deleted file mode 100644
--- a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/ExpectedStringTemplateNested.txt
+++ /dev/null
@@ -1,200 +0,0 @@
-COMPILATION_UNIT -> COMPILATION_UNIT [2:0]
-|--PACKAGE_DEF -> package [2:0]
-|   |--ANNOTATIONS -> ANNOTATIONS [2:47]
-|   |--DOT -> . [2:47]
-|   |   |--DOT -> . [2:39]
-|   |   |   |--DOT -> . [2:28]
-|   |   |   |   |--DOT -> . [2:22]
-|   |   |   |   |   |--DOT -> . [2:11]
-|   |   |   |   |   |   |--IDENT -> com [2:8]
-|   |   |   |   |   |   `--IDENT -> puppycrawl [2:12]
-|   |   |   |   |   `--IDENT -> tools [2:23]
-|   |   |   |   `--IDENT -> checkstyle [2:29]
-|   |   |   `--IDENT -> grammar [2:40]
-|   |   `--IDENT -> java21 [2:48]
-|   `--SEMI -> ; [2:54]
-|--IMPORT -> import [4:0]
-|   |--DOT -> . [4:25]
-|   |   |--DOT -> . [4:16]
-|   |   |   |--DOT -> . [4:11]
-|   |   |   |   |--IDENT -> java [4:7]
-|   |   |   |   `--IDENT -> util [4:12]
-|   |   |   `--IDENT -> function [4:17]
-|   |   `--IDENT -> Supplier [4:26]
-|   `--SEMI -> ; [4:34]
-`--CLASS_DEF -> CLASS_DEF [6:0]
-    |--MODIFIERS -> MODIFIERS [6:0]
-    |   `--LITERAL_PUBLIC -> public [6:0]
-    |--LITERAL_CLASS -> class [6:7]
-    |--IDENT -> InputStringTemplateNested [6:13]
-    `--OBJBLOCK -> OBJBLOCK [6:39]
-        |--LCURLY -> { [6:39]
-        |--VARIABLE_DEF -> VARIABLE_DEF [7:4]
-        |   |--MODIFIERS -> MODIFIERS [7:4]
-        |   |--TYPE -> TYPE [7:4]
-        |   |   `--LITERAL_INT -> int [7:4]
-        |   |--IDENT -> x [7:8]
-        |   |--ASSIGN -> = [7:10]
-        |   |   `--EXPR -> EXPR [7:12]
-        |   |       `--NUM_INT -> 2 [7:12]
-        |   `--SEMI -> ; [7:13]
-        |--VARIABLE_DEF -> VARIABLE_DEF [8:4]
-        |   |--MODIFIERS -> MODIFIERS [8:4]
-        |   |   `--FINAL -> final [8:4]
-        |   |--TYPE -> TYPE [8:10]
-        |   |   `--IDENT -> String [8:10]
-        |   |--IDENT -> s [8:17]
-        |   |--ASSIGN -> = [8:19]
-        |   |   `--EXPR -> EXPR [9:15]
-        |   |       `--DOT -> . [9:15]
-        |   |           |--IDENT -> STR [9:12]
-        |   |           `--STRING_TEMPLATE_BEGIN -> " [9:16]
-        |   |               |--STRING_TEMPLATE_CONTENT -> x [9:17]
-        |   |               |--EMBEDDED_EXPRESSION_BEGIN -> \{ [9:18]
-        |   |               |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [9:23]
-        |   |               |   `--METHOD_CALL -> ( [9:23]
-        |   |               |       |--IDENT -> sp [9:21]
-        |   |               |       |--ELIST -> ELIST [9:27]
-        |   |               |       |   `--LAMBDA -> -> [9:27]
-        |   |               |       |       |--LPAREN -> ( [9:24]
-        |   |               |       |       |--PARAMETERS -> PARAMETERS [9:25]
-        |   |               |       |       |--RPAREN -> ) [9:25]
-        |   |               |       |       `--SLIST -> { [9:30]
-        |   |               |       |           |--LITERAL_RETURN -> return [10:16]
-        |   |               |       |           |   |--EXPR -> EXPR [10:26]
-        |   |               |       |           |   |   `--DOT -> . [10:26]
-        |   |               |       |           |   |       |--IDENT -> STR [10:23]
-        |   |               |       |           |   |       `--STRING_TEMPLATE_BEGIN -> " [10:27]
-        |   |               |       |           |   |           |--STRING_TEMPLATE_CONTENT -> x [10:28]
-        |   |               |       |           |   |           |--EMBEDDED_EXPRESSION_BEGIN -> \{ [10:29]
-        |   |               |       |           |   |           |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [10:34]
-        |   |               |       |           |   |           |   `--METHOD_CALL -> ( [10:34]
-        |   |               |       |           |   |           |       |--IDENT -> sp [10:32]
-        |   |               |       |           |   |           |       |--ELIST -> ELIST [10:38]
-        |   |               |       |           |   |           |       |   `--LAMBDA -> -> [10:38]
-        |   |               |       |           |   |           |       |       |--LPAREN -> ( [10:35]
-        |   |               |       |           |   |           |       |       |--PARAMETERS -> PARAMETERS [10:36]
-        |   |               |       |           |   |           |       |       |--RPAREN -> ) [10:36]
-        |   |               |       |           |   |           |       |       `--SLIST -> { [10:41]
-        |   |               |       |           |   |           |       |           |--LITERAL_RETURN -> return [11:20]
-        |   |               |       |           |   |           |       |           |   |--EXPR -> EXPR [17:38]
-        |   |               |       |           |   |           |       |           |   |   `--PLUS -> + [17:38]
-        |   |               |       |           |   |           |       |           |   |       |--PLUS -> + [17:32]
-        |   |               |       |           |   |           |       |           |   |       |   |--DOT -> . [11:30]
-        |   |               |       |           |   |           |       |           |   |       |   |   |--IDENT -> STR [11:27]
-        |   |               |       |           |   |           |       |           |   |       |   |   `--STRING_TEMPLATE_BEGIN -> " [11:31]
-        |   |               |       |           |   |           |       |           |   |       |   |       |--STRING_TEMPLATE_CONTENT -> x [11:32]
-        |   |               |       |           |   |           |       |           |   |       |   |       |--EMBEDDED_EXPRESSION_BEGIN -> \{ [11:33]
-        |   |               |       |           |   |           |       |           |   |       |   |       |--EMBEDDED_EXPRESSION -> EMBEDDED_EXPRESSION [12:30]
-        |   |               |       |           |   |           |       |           |   |       |   |       |   `--METHOD_CALL -> ( [12:30]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |--IDENT -> sp [12:28]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |--ELIST -> ELIST [12:34]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |   `--LAMBDA -> -> [12:34]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |       |--LPAREN -> ( [12:31]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |       |--PARAMETERS -> PARAMETERS [12:32]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |       |--RPAREN -> ) [12:32]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |       `--SLIST -> { [12:37]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |--LITERAL_RETURN -> return [13:8]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |--EXPR -> EXPR [13:17]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |   `--METHOD_CALL -> ( [13:17]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |--IDENT -> sp [13:15]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |--ELIST -> ELIST [13:21]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |   `--LAMBDA -> -> [13:21]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |       |--LPAREN -> ( [13:18]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |       |--PARAMETERS -> PARAMETERS [13:19]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |       |--RPAREN -> ) [13:19]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |       `--SLIST -> { [13:24]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |--LITERAL_RETURN -> return [14:12]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |--EXPR -> EXPR [14:21]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |   `--METHOD_CALL -> ( [14:21]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |--IDENT -> sp [14:19]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |--ELIST -> ELIST [14:25]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |   `--LAMBDA -> -> [14:25]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |       |--LPAREN -> ( [14:22]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |       |--PARAMETERS -> PARAMETERS [14:23]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |       |--RPAREN -> ) [14:23]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |       `--SLIST -> { [14:28]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |--LITERAL_RETURN -> return [15:16]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |--EXPR -> EXPR [15:25]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |   `--METHOD_CALL -> ( [15:25]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |--IDENT -> sp [15:23]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |--ELIST -> ELIST [15:29]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |   `--LAMBDA -> -> [15:29]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |       |--LPAREN -> ( [15:26]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |       |--PARAMETERS -> PARAMETERS [15:27]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |       |--RPAREN -> ) [15:27]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |       `--SLIST -> { [15:32]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           |--LITERAL_RETURN -> return [16:20]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           |   |--EXPR -> EXPR [16:29]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           |   |   `--METHOD_CALL -> ( [16:29]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           |   |       |--IDENT -> sp [16:27]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           |   |       |--ELIST -> ELIST [16:33]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           |   |       |   `--LAMBDA -> -> [16:33]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           |   |       |       |--LPAREN -> ( [16:30]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           |   |       |       |--PARAMETERS -> PARAMETERS [16:31]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           |   |       |       |--RPAREN -> ) [16:31]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           |   |       |       `--EXPR -> EXPR [16:36]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           |   |       |           `--STRING_LITERAL -> "" [16:36]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           |   |       `--RPAREN -> ) [16:38]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           |   `--SEMI -> ; [16:39]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       |           `--RCURLY -> } [16:40]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   |       `--RPAREN -> ) [16:41]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           |   `--SEMI -> ; [16:42]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       |           `--RCURLY -> } [16:43]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   |       `--RPAREN -> ) [16:44]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           |   `--SEMI -> ; [16:45]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       |           `--RCURLY -> } [16:46]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   |       `--RPAREN -> ) [16:47]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           |   `--SEMI -> ; [16:48]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       |           `--RCURLY -> } [16:49]
-        |   |               |       |           |   |           |       |           |   |       |   |       |       `--RPAREN -> ) [16:50]
-        |   |               |       |           |   |           |       |           |   |       |   |       |--EMBEDDED_EXPRESSION_END -> } [17:28]
-        |   |               |       |           |   |           |       |           |   |       |   |       |--STRING_TEMPLATE_CONTENT -> x [17:29]
-        |   |               |       |           |   |           |       |           |   |       |   |       `--STRING_TEMPLATE_END -> " [17:30]
-        |   |               |       |           |   |           |       |           |   |       |   `--STRING_LITERAL -> "{" [17:34]
-        |   |               |       |           |   |           |       |           |   |       `--STRING_LITERAL -> "}}}" [17:40]
-        |   |               |       |           |   |           |       |           |   `--SEMI -> ; [17:45]
-        |   |               |       |           |   |           |       |           `--RCURLY -> } [18:16]
-        |   |               |       |           |   |           |       `--RPAREN -> ) [18:17]
-        |   |               |       |           |   |           |--EMBEDDED_EXPRESSION_END -> } [18:19]
-        |   |               |       |           |   |           |--STRING_TEMPLATE_CONTENT -> x [18:20]
-        |   |               |       |           |   |           `--STRING_TEMPLATE_END -> " [18:21]
-        |   |               |       |           |   `--SEMI -> ; [18:22]
-        |   |               |       |           `--RCURLY -> } [19:12]
-        |   |               |       `--RPAREN -> ) [19:13]
-        |   |               |--EMBEDDED_EXPRESSION_END -> } [19:14]
-        |   |               |--STRING_TEMPLATE_CONTENT -> x [19:15]
-        |   |               `--STRING_TEMPLATE_END -> " [19:16]
-        |   `--SEMI -> ; [19:17]
-        |--METHOD_DEF -> METHOD_DEF [21:4]
-        |   |--MODIFIERS -> MODIFIERS [21:4]
-        |   |   |--LITERAL_PRIVATE -> private [21:4]
-        |   |   `--LITERAL_STATIC -> static [21:12]
-        |   |--TYPE -> TYPE [21:19]
-        |   |   `--IDENT -> String [21:19]
-        |   |--IDENT -> sp [21:26]
-        |   |--LPAREN -> ( [21:28]
-        |   |--PARAMETERS -> PARAMETERS [21:29]
-        |   |   `--PARAMETER_DEF -> PARAMETER_DEF [21:29]
-        |   |       |--MODIFIERS -> MODIFIERS [21:29]
-        |   |       |--TYPE -> TYPE [21:29]
-        |   |       |   |--IDENT -> Supplier [21:29]
-        |   |       |   `--TYPE_ARGUMENTS -> TYPE_ARGUMENTS [21:37]
-        |   |       |       |--GENERIC_START -> < [21:37]
-        |   |       |       |--TYPE_ARGUMENT -> TYPE_ARGUMENT [21:38]
-        |   |       |       |   `--IDENT -> String [21:38]
-        |   |       |       `--GENERIC_END -> > [21:44]
-        |   |       `--IDENT -> y [21:46]
-        |   |--RPAREN -> ) [21:47]
-        |   `--SLIST -> { [21:49]
-        |       |--LITERAL_RETURN -> return [22:8]
-        |       |   |--EXPR -> EXPR [22:20]
-        |       |   |   `--METHOD_CALL -> ( [22:20]
-        |       |   |       |--DOT -> . [22:16]
-        |       |   |       |   |--IDENT -> y [22:15]
-        |       |   |       |   `--IDENT -> get [22:17]
-        |       |   |       |--ELIST -> ELIST [22:21]
-        |       |   |       `--RPAREN -> ) [22:21]
-        |       |   `--SEMI -> ; [22:22]
-        |       `--RCURLY -> } [23:4]
-        `--RCURLY -> } [24:0]
diff --git a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/InputStringTemplateBasic.java b/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/InputStringTemplateBasic.java
deleted file mode 100644
--- a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/InputStringTemplateBasic.java
+++ /dev/null
@@ -1,66 +0,0 @@
-//non-compiled with javac: Compilable with Java21
-package com.puppycrawl.tools.checkstyle.grammar.java21;
-
-import java.util.List;
-
-public class InputStringTemplateBasic {
-    int x = 10;
-    int y = 20;
-
-    // most basic example, empty string template expression
-    String result1 = STR."";
-
-    String result1_1 = STR."Hello world!";
-
-    // no content, no expression
-    String result1_2 = STR."\{  }";
-
-    // simple single value interpolation
-    String result2 = STR. "x\{ x }x";
-
-    // simple single value interpolation with a method call
-    String result3 = STR. "\{ y(y("y")) }";
-
-    // bit more complex example, multiple interpolations
-    String result4 = STR. "\{ x }"  + STR. "\{ y }";
-
-    // bit more complex example, multiple interpolations with method calls
-    String result5 = STR. "\{ y(y("y")) }"  + STR. "\{ y(y("y")) }";
-
-    // string template concatenation
-    String result6 = STR. "\{ x }"  + STR. "\{ y }";
-
-    // concatentation in embedded expression
-    String result7 = STR. "\{ x + y }";
-
-    // concatentation in embedded expression with method calls
-    String result8 = STR. "hey \{ y(y("y")) + y(y("y")) } there";
-
-    // multiple lines
-    String result9 = STR. "hey \{
-            y(y("y")) + y(y("y"))
-            } there";
-
-    // multiple lines with many expressions
-    String result10 = STR. "hey \{
-            y(y("y")) + y(y("y"))
-            } there \{
-            y(y("y")) + y(y("y"))
-            + STR."x\{ x }x"
-            }";
-
-    String name = "world";
-    String s = STR."Hello, \{ name }!";
-
-    private static String y(String y) {
-        return "y";
-    }
-
-    // Verify proper behavior of TransType w.r.t. templated Strings
-    void x(List<? extends StringTemplate.Processor<String, RuntimeException>> list) {
-        list.get(0)."";
-        list.get(0)."\{  }";
-        list.get(0). "x\{ x }x";
-        list.get(0). ".\{ x }.\{ y }.\{ x }.\{}.\{}";
-    }
-}
diff --git a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/InputStringTemplateBasicWithTabs.java b/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/InputStringTemplateBasicWithTabs.java
deleted file mode 100644
--- a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/InputStringTemplateBasicWithTabs.java
+++ /dev/null
@@ -1,66 +0,0 @@
-//non-compiled with javac: Compilable with Java21
-package com.puppycrawl.tools.checkstyle.grammar.java21;
-
-import java.util.List;
-
-public class InputStringTemplateBasicWithTabs {
-	int x = 10;
-	int y = 20;
-
-	// most basic example, empty string template expression
-	String result1 = STR."";
-
-	String result1_1 = STR."Hello world!";
-
-	// no content, no expression
-	String result1_2 = STR."\{  }";
-
-	// simple single value interpolation
-	String result2 = STR. "x\{ x }x";
-
-	// simple single value interpolation with a method call
-	String result3 = STR. "\{ y(y("y")) }";
-
-	// bit more complex example, multiple interpolations
-	String result4 = STR. "\{ x }"  + STR. "\{ y }";
-
-	// bit more complex example, multiple interpolations with method calls
-	String result5 = STR. "\{ y(y("y")) }"  + STR. "\{ y(y("y")) }";
-
-	// string template concatenation
-	String result6 = STR. "\{ x }"  + STR. "\{ y }";
-
-	// concatentation in embedded expression
-	String result7 = STR. "\{ x + y }";
-
-	// concatentation in embedded expression with method calls
-	String result8 = STR. "hey \{ y(y("y")) + y(y("y")) } there";
-
-	// multiple lines
-	String result9 = STR. "hey \{
-			y(y("y")) + y(y("y"))
-			} there";
-
-	// multiple lines with many expressions
-	String result10 = STR. "hey \{
-			y(y("y")) + y(y("y"))
-			} there \{
-			y(y("y")) + y(y("y"))
-			+ STR."x\{ x }x"
-			}";
-
-	String name = "world";
-	String s = STR."Hello, \{ name }!";
-
-	private static String y(String y) {
-		return "y";
-	}
-
-	// Verify proper behavior of TransType w.r.t. templated Strings
-	void x(List<? extends StringTemplate.Processor<String, RuntimeException>> list) {
-		list.get(0)."";
-		list.get(0)."\{  }";
-		list.get(0). "x\{ x }x";
-		list.get(0). ".\{ x }.\{ y }.\{ x }.\{}.\{}";
-	}
-}
diff --git a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/InputStringTemplateMultiLineWithComments.java b/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/InputStringTemplateMultiLineWithComments.java
deleted file mode 100644
--- a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/InputStringTemplateMultiLineWithComments.java
+++ /dev/null
@@ -1,66 +0,0 @@
-//non-compiled with javac: Compilable with Java21
-package com.puppycrawl.tools.checkstyle.grammar.java21;
-
-import java.util.List;
-
-public class InputStringTemplateMultiLineWithComments {
-    int x = 10;
-    int y = 20;
-
-    // most basic example, empty string template expression
-    String result1 = STR."";
-
-    String result1_1 = STR."Hello world!";
-
-    // no content, no expression
-    String result1_2 = STR."\{  }";
-
-    // simple single value interpolation
-    String result2 = STR. "x\{ x }x"; // comment
-
-    // simple single value interpolation with a method call
-    String result3 = STR. "\{ y(y("y")) }";
-
-    // bit more complex example, multiple interpolations
-    String result4 = STR. "\{ x }"  + STR. "\{ y }";
-
-    // bit more complex example, multiple interpolations with method calls
-    String result5 = STR. "\{ y(y("y")) }"  + STR. "\{ y(y("y"/*yep, comment here, too*/)) }";
-
-    // string template concatenation
-    String result6 = STR. "\{ x }"  + /*comment here*/ STR. "\{ y }";
-
-    // concatentation in embedded expression
-    String result7 = STR. "\{ x + y /*comment here too*/ }";
-
-    // concatentation in embedded expression with method calls
-    String result8 = STR./*comment here*/ "hey \{ y(y("y")) + y(y("y")) } there";
-
-    // multiple lines
-    String result9 = STR. "hey \{ // comment here
-            y(y("y")) + y(y("y"))
-            } there";
-
-    // multiple lines with many expressions and comments
-    String result10 = STR. "hey \{ /*****comment here*/ // comment here
-            y(y("y")) + y(y("y")) /* comment here */
-            } there \{ /**/ // comment here
-            y(y("y")) + y(y("y")) // comment there
-            + STR."x\{ x }x" // comment everywhere
-            }";
-
-    String name = "world";
-    String s = STR."Hello, \{ name }!";
-
-    private static String y(String y) {
-        return "y";
-    }
-
-    // Verify proper behavior of TransType w.r.t. templated Strings
-    void x(List<? extends StringTemplate.Processor<String, RuntimeException>> list) {
-        list.get(0)."";
-        list.get(0)."\{  }";
-        list.get(0). "x\{ x }x"; // comments in here
-        list.get(0). ".\{ x }.\{ y }.\{ x /*comments in here, as well*/ }.\{}.\{}";
-    }
-}
diff --git a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/InputStringTemplateNested.java b/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/InputStringTemplateNested.java
deleted file mode 100644
--- a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java21/InputStringTemplateNested.java
+++ /dev/null
@@ -1,24 +0,0 @@
-//non-compiled with javac: Compilable with Java21
-package com.puppycrawl.tools.checkstyle.grammar.java21;
-
-import java.util.function.Supplier;
-
-public class InputStringTemplateNested {
-    int x = 2;
-    final String s =
-            STR."x\{ sp(() -> {
-                return STR."x\{ sp(() -> {
-                    return STR."x\{
-                            sp(() -> {
-        return sp(() -> {
-            return sp(() -> {
-                return sp(() -> {
-                    return sp(() -> "");});});});})
-                            }x" + "{" + "}}}";
-                }) }x";
-            })}x";
-
-    private static String sp(Supplier<String> y) {
-        return y.get();
-    }
-}