error-prone icon indicating copy to clipboard operation
error-prone copied to clipboard

IllegalArgumentException with MustBeClosedChecker

Open uhafner opened this issue 2 years ago • 1 comments

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)

uhafner avatar Oct 26 '23 20:10 uhafner

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

uhafner avatar Dec 07 '23 09:12 uhafner

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.

facboy avatar Aug 01 '24 11:08 facboy