NullAway icon indicating copy to clipboard operation
NullAway copied to clipboard

`IndexOutOfBoundsException` in `handleInvocation` for `Enum`

Open ekohilas opened this issue 3 years ago • 1 comments

I recently added NullAway (v0.9.8, error-prone v2.11.0) to a large code base and received the following error:

java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
 at jdk.compiler/com.sun.tools.javac.util.List.get(List.java:490)
 at com.uber.nullaway.NullAway.handleInvocation(NullAway.java:1453)
 at com.uber.nullaway.NullAway.matchMethodInvocation(NullAway.java:390)
 at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:449)
 at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:746)
 at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:150)
 at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1650)
 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
 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.visitExpressionStatement(TreeScanner.java:433)
 at com.google.errorprone.scanner.ErrorProneScanner.visitExpressionStatement(ErrorProneScanner.java:633)
 at com.google.errorprone.scanner.ErrorProneScanner.visitExpressionStatement(ErrorProneScanner.java:150)
 at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1460)
 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
 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:105)
 at jdk.compiler/com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:248)
 at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:520)
 at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:150)
 at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1032)
 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
 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:90)
 at jdk.compiler/com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:206)
 at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:740)
 at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:150)
 at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:898)
 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
 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:90)
 at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
 at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
 at jdk.compiler/com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:187)
 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:808)
 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
 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:90)
 at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
 at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
 at jdk.compiler/com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:187)
 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:808)
 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
 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:105)
 at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
 at jdk.compiler/com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:144)
 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:591)
 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:56)
 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:152)
 at com.google.devtools.build.buildjar.javac.plugins.errorprone.ErrorPronePlugin.postFlow(ErrorPronePlugin.java:161)
 at com.google.devtools.build.buildjar.javac.BlazeJavaCompiler.flow(BlazeJavaCompiler.java:115)
 at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1365)
 at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:960)
 at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
 at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:147)
 at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
 at com.google.devtools.build.buildjar.javac.BlazeJavacMain.compile(BlazeJavacMain.java:137)
 at com.google.devtools.build.buildjar.ReducedClasspathJavaLibraryBuilder.fallback(ReducedClasspathJavaLibraryBuilder.java:105)
 at com.google.devtools.build.buildjar.ReducedClasspathJavaLibraryBuilder.compileSources(ReducedClasspathJavaLibraryBuilder.java:67)
 at com.google.devtools.build.buildjar.SimpleJavaLibraryBuilder.compileJavaLibrary(SimpleJavaLibraryBuilder.java:110)
 at com.google.devtools.build.buildjar.SimpleJavaLibraryBuilder.run(SimpleJavaLibraryBuilder.java:118)
 at com.google.devtools.build.buildjar.BazelJavaBuilder.build(BazelJavaBuilder.java:105)
 at com.google.devtools.build.buildjar.BazelJavaBuilder.parseAndBuild(BazelJavaBuilder.java:85)
 at com.google.devtools.build.lib.worker.WorkRequestHandler$WorkRequestHandlerBuilder.lambda$new$0(WorkRequestHandler.java:264)
 at com.google.devtools.build.lib.worker.WorkRequestHandler$WorkRequestCallback.apply(WorkRequestHandler.java:230)
 at com.google.devtools.build.lib.worker.WorkRequestHandler.respondToRequest(WorkRequestHandler.java:424)
 at com.google.devtools.build.lib.worker.WorkRequestHandler.lambda$startResponseThread$1(WorkRequestHandler.java:381)
 at java.base/java.lang.Thread.run(Thread.java:834)

Sample code:

public enum Number {
  ONE("one"),
  TWO("two"),
  THREE("three"),
  NONE("none");

  final String num;

  Number(String num) {
    this.num = num;
  }
}

Thanks!

ekohilas avatar Aug 03 '22 13:08 ekohilas

I can't reproduce this on NullAway master, which tests against Error Prone 2.14.0. Could you see if you still observe a crash with the latest Error Prone release?

msridhar avatar Aug 03 '22 17:08 msridhar

Going to close this out but if you can repro with latest release let us know

msridhar avatar Oct 02 '22 18:10 msridhar