IllegalArgumentException with MustBeClosedChecker
When compiling the following file I get an IllegalArgumentException with MustBeClosedChecker:
package edu.hm.hafner.grading;
import java.nio.file.Path;
import java.util.List;
import edu.hm.hafner.analysis.FileReaderFactory;
import edu.hm.hafner.coverage.ModuleNode;
import edu.hm.hafner.coverage.registry.ParserRegistry;
import edu.hm.hafner.coverage.registry.ParserRegistry.CoverageParserType;
import edu.hm.hafner.util.FilteredLog;
/**
* Reads coverage reports and returns the results as {@link ModuleNode} instances.
*/
class CoverageReportReaderBug {
void parseFiles(final List<Path> reportFiles) {
var parser = new ParserRegistry().getParser(CoverageParserType.COBERTURA);
var reports = reportFiles.stream()
.map(FileReaderFactory::new)
.map(file -> parser.parse(file.create(), new FilteredLog("")))
.toList();
}
}
I tried to strip down the sources to the root cause but somehow I don't see what actually is causing this problem. Maybe you already have an idea what is causing the problem.
Exception with Maven (JDK 21 and JDK17):
[ERROR] /Users/hafner/git/warnings-ng-plugin-devenv/autograding-github-action/src/main/java/edu/hm/hafner/grading/CoverageReportReaderBug.java:[16,9] Fehler: An unhandled exception was thrown by the Error Prone static analysis plugin.
Please report this at https://github.com/google/error-prone/issues/new and include the following:
error-prone version: 2.23.0
BugPattern: MustBeClosedChecker
Stack Trace:
java.lang.IllegalArgumentException: Start [-1] should not be less than zero
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:191)
at com.google.errorprone.fixes.IndexedPosition.<init>(IndexedPosition.java:32)
at com.google.errorprone.fixes.SuggestedFix$Builder.replace(SuggestedFix.java:234)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker.splitVariableDeclarationAroundTry(AbstractMustBeClosedChecker.java:475)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker.chooseFixType(AbstractMustBeClosedChecker.java:426)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker.fix(AbstractMustBeClosedChecker.java:325)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker.checkClosed(AbstractMustBeClosedChecker.java:320)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker.matchNewClassOrMethodInvocation(AbstractMustBeClosedChecker.java:232)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker$1.visitNewClassOrMethodInvocation(AbstractMustBeClosedChecker.java:148)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker$1.visitMethodInvocation(AbstractMustBeClosedChecker.java:163)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker$1.visitMethodInvocation(AbstractMustBeClosedChecker.java:138)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1832)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.google.errorprone.bugpatterns.BugChecker$SuppressibleTreePathScanner.scan(BugChecker.java:576)
at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
at jdk.compiler/com.sun.source.util.TreeScanner.visitMethodInvocation(TreeScanner.java:591)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker$1.visitMethodInvocation(AbstractMustBeClosedChecker.java:164)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker$1.visitMethodInvocation(AbstractMustBeClosedChecker.java:138)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1832)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.google.errorprone.bugpatterns.BugChecker$SuppressibleTreePathScanner.scan(BugChecker.java:576)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
at jdk.compiler/com.sun.source.util.TreeScanner.visitLambdaExpression(TreeScanner.java:647)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1997)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.google.errorprone.bugpatterns.BugChecker$SuppressibleTreePathScanner.scan(BugChecker.java:576)
at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
at jdk.compiler/com.sun.source.util.TreeScanner.visitMethodInvocation(TreeScanner.java:591)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker$1.visitMethodInvocation(AbstractMustBeClosedChecker.java:164)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker$1.visitMethodInvocation(AbstractMustBeClosedChecker.java:138)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1832)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.google.errorprone.bugpatterns.BugChecker$SuppressibleTreePathScanner.scan(BugChecker.java:576)
at jdk.compiler/com.sun.source.util.TreeScanner.visitMemberSelect(TreeScanner.java:897)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2589)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.google.errorprone.bugpatterns.BugChecker$SuppressibleTreePathScanner.scan(BugChecker.java:576)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
at jdk.compiler/com.sun.source.util.TreeScanner.visitMethodInvocation(TreeScanner.java:590)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker$1.visitMethodInvocation(AbstractMustBeClosedChecker.java:164)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker$1.visitMethodInvocation(AbstractMustBeClosedChecker.java:138)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1832)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.google.errorprone.bugpatterns.BugChecker$SuppressibleTreePathScanner.scan(BugChecker.java:576)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
at jdk.compiler/com.sun.source.util.TreeScanner.visitVariable(TreeScanner.java:243)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:1040)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.google.errorprone.bugpatterns.BugChecker$SuppressibleTreePathScanner.scan(BugChecker.java:576)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
at jdk.compiler/com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:272)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1104)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:66)
at com.google.errorprone.bugpatterns.BugChecker$SuppressibleTreePathScanner.scan(BugChecker.java:581)
at com.google.errorprone.bugpatterns.AbstractMustBeClosedChecker.scanEntireMethodFor(AbstractMustBeClosedChecker.java:172)
at com.google.errorprone.bugpatterns.MustBeClosedChecker.matchMethod(MustBeClosedChecker.java:78)
at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:449)
at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:739)
at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:150)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:948)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
at jdk.compiler/com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:203)
at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:548)
at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:150)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:855)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
at jdk.compiler/com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:152)
at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:560)
at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:150)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:623)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:66)
at com.google.errorprone.scanner.Scanner.scan(Scanner.java:58)
at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:156)
at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:133)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1435)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1382)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:965)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:319)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:178)
at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:64)
at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:50)
I created a pull request that exposes the bug: https://github.com/uhafner/autograding-github-action/pull/299
Here is the compiler log: https://github.com/uhafner/autograding-github-action/actions/runs/7126027301/job/19403096024?pr=299
I'm seeing this error too (on errorprone 2.29.2), also no obvious cause.
EDIT: upon further debugging it seems to be getting confused by using var, changing (somewhat redacted):
var listX = y.mustBeClosedStream().toList();
to
List<X> listX = y.mustBeClosedStream().toList();
seems to stop the exception being thrown.