Skip to content

Checkstyle on a Java 25+ record fails with parsing error #19342

@akarnokd

Description

@akarnokd

The file below, when run from Gradle crashes the build. Eclipse-CS doesn't complain about the file.

Gradle

------------------------------------------------------------
Gradle 9.4.0
------------------------------------------------------------

Build time:    2026-03-04 10:36:00 UTC
Revision:      b631911858264c0b6e4d6603d677ff5218766cee

Kotlin:        2.3.0
Groovy:        4.0.29
Ant:           Apache Ant(TM) version 1.10.15 compiled on August 25 2024
Launcher JVM:  25.0.2 (Eclipse Adoptium 25.0.2+10-LTS)
Daemon JVM:    C:\Program Files\Eclipse Adoptium\jdk-25.0.2.10-hotspot (no Daemon JVM specified, using current Java home)
OS:            Windows 11 10.0 amd64

Java

openjdk 25.0.2 2026-01-20 LTS
OpenJDK Runtime Environment Temurin-25.0.2+10 (build 25.0.2+10-LTS)
OpenJDK 64-Bit Server VM Temurin-25.0.2+10 (build 25.0.2+10-LTS, mixed mode, sharing)

Eclipse

Version: 2026-03 (4.39.0)
Build id: 20260305-0817

Eclipse-CS: 12.3.1

File

/*
 * Copyright (c) 2016-present, RxJava Contributors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
 * the License for the specific language governing permissions and limitations under the License.
 */

package io.reactivex.rxjava4.core.config;

import io.reactivex.rxjava4.core.Flowable;
import io.reactivex.rxjava4.internal.functions.ObjectHelper;

/**
 * Generic configuration block with option to delay errors, change prefetch
 * amounts and buffer sizes.
 * TODO once value classes are available, make this a record class.
 * @since 4.0.0
 */
public record FlatMapConfig(boolean delayErrors, int maxConcurrency, int bufferSize) {

    /**
     * Default config: no error delay, {@link Flowable#bufferSize()} sizes.
     */
    public FlatMapConfig() {
        this(false, Flowable.bufferSize(), Flowable.bufferSize());
    }

    /**
     * Optionally delay error, {@link Flowable#bufferSize()} sizes 
     * @param delayErrors should the error be delayed?
     */
    public FlatMapConfig(boolean delayErrors) {
        this(delayErrors, Flowable.bufferSize(), Flowable.bufferSize());
    }

    /**
     * Optionally set the buffer size, no delay errors.
     * @param maxConcurrency the maximum number of concurrent flows
     */
    public FlatMapConfig(int maxConcurrency) {
        ObjectHelper.verifyPositive(maxConcurrency, "maxConcurrency");
        this(false, maxConcurrency, Flowable.bufferSize());
    }

    /**
     * Optionally delays errors and sets the buffer size too.
     * @param delayError 
     * @param maxConcurrency the maximum number of concurrent flows
     */
    public FlatMapConfig(boolean delayErrors, int maxConcurrency) {
        ObjectHelper.verifyPositive(maxConcurrency, "maxConcurrency");
        this(delayErrors, maxConcurrency, Flowable.bufferSize());
    }

    /**
     * Fully customize the configuration. 
     * @param delayErrors should the errors be delayed
     * @param bufferSize what would be the buffer size
     * @param prefetch what would be the prefetch amount
     */
    public FlatMapConfig(boolean delayErrors, int maxConcurrency, int bufferSize) {
        ObjectHelper.verifyPositive(maxConcurrency, "maxConcurrency");
        ObjectHelper.verifyPositive(bufferSize, "bufferSize");
        this.delayErrors = delayErrors;
        this.maxConcurrency = maxConcurrency;
        this.bufferSize = bufferSize;
    }
}

Crash stacktrace

Caused by: : Unable to process files: [C:\Users\akarnokd\git\RxJava\src\main\java\io\reactivex\rxjava4\core\config\FlatMapConfig.java]
        at com.puppycrawl.tools.checkstyle.ant.CheckstyleAntTask.processFiles(CheckstyleAntTask.java:354)
        at com.puppycrawl.tools.checkstyle.ant.CheckstyleAntTask.realExecute(CheckstyleAntTask.java:312)
        at com.puppycrawl.tools.checkstyle.ant.CheckstyleAntTask.execute(CheckstyleAntTask.java:283)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:299)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
        at org.gradle.api.internal.project.ant.BasicAntBuilder.nodeCompleted(BasicAntBuilder.java:90)
        at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:583)
        at org.gradle.internal.metaobject.BeanDynamicObject.tryInvokeMethod(BeanDynamicObject.java:225)
        at org.gradle.internal.metaobject.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:168)
        at org.gradle.api.internal.project.antbuilder.AntBuilderDelegate.nodeCompleted(AntBuilderDelegate.java:127)
        at org.gradle.api.internal.project.antbuilder.AntBuilderDelegate.invokeMethod(AntBuilderDelegate.java:144)
        at org.gradle.api.plugins.quality.internal.CheckstyleInvoker.execute(CheckstyleInvoker.java:112)
        ... 27 more
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: Exception was thrown while processing C:\Users\akarnokd\git\RxJava\src\main\java\io\reactivex\rxjava4\core\config\FlatMapConfig.java
        at com.puppycrawl.tools.checkstyle.Checker.processFiles(Checker.java:312)
        at com.puppycrawl.tools.checkstyle.Checker.process(Checker.java:226)
        at com.puppycrawl.tools.checkstyle.ant.CheckstyleAntTask.processFiles(CheckstyleAntTask.java:348)
        ... 38 more
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: IllegalStateException occurred while parsing file C:\Users\akarnokd\git\RxJava\src\main\java\io\reactivex\rxjava4\core\config\FlatMapConfig.java.
        at com.puppycrawl.tools.checkstyle.JavaParser.parse(JavaParser.java:104)
        at com.puppycrawl.tools.checkstyle.TreeWalker.processFiltered(TreeWalker.java:195)
        at com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck.process(AbstractFileSetCheck.java:101)
        at com.puppycrawl.tools.checkstyle.Checker.processFile(Checker.java:340)
        at com.puppycrawl.tools.checkstyle.Checker.processFiles(Checker.java:299)
        ... 40 more
Caused by: java.lang.IllegalStateException: 48:12: mismatched input '(' expecting ';'
        at com.puppycrawl.tools.checkstyle.JavaParser$CheckstyleErrorListener.syntaxError(JavaParser.java:254)
        at org.antlr.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:41)
        at org.antlr.v4.runtime.Parser.notifyErrorListeners(Parser.java:544)
        at org.antlr.v4.runtime.DefaultErrorStrategy.reportInputMismatch(DefaultErrorStrategy.java:327)
        at org.antlr.v4.runtime.DefaultErrorStrategy.reportError(DefaultErrorStrategy.java:139)
        at com.puppycrawl.tools.checkstyle.CheckstyleParserErrorStrategy.recoverInline(CheckstyleParserErrorStrategy.java:38)
        at org.antlr.v4.runtime.Parser.match(Parser.java:208)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.statement(JavaLanguageParser.java:7046)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.blockStatement(JavaLanguageParser.java:6207)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.constructorBlock(JavaLanguageParser.java:5920)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.constructorDeclaration(JavaLanguageParser.java:3074)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.memberDeclaration(JavaLanguageParser.java:2764)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.classBodyDeclaration(JavaLanguageParser.java:2676)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.recordBodyDeclaration(JavaLanguageParser.java:1534)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.recordBody(JavaLanguageParser.java:1475)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.recordDeclaration(JavaLanguageParser.java:1181)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.types(JavaLanguageParser.java:786)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.typeDeclaration(JavaLanguageParser.java:672)
        at com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageParser.compilationUnit(JavaLanguageParser.java:419)
        at com.puppycrawl.tools.checkstyle.JavaParser.parse(JavaParser.java:98)
        ... 44 more
Caused by: org.antlr.v4.runtime.InputMismatchException
        ... 59 more

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions