google / error-prone

Catch common Java mistakes as compile-time errors

Home Page:https://errorprone.info

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

BugPattern: AnnotationPosition - An unhandled exception was thrown

imoverclocked opened this issue · comments

A record whose constructor is annotated with @Inject seems to be causing this. Looks similar to:

record Foo(Map<Bar, Baz> mapBarBaz) {
    @Inject
    Foo {}
}
error-prone version: 2.11.0 |  
-- | --
  | BugPattern: AnnotationPosition |  
  | Stack Trace: |  
  | java.lang.IndexOutOfBoundsException: Range [2717, 2659) out of bounds for length 10227 |  
  | at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) |  
  | at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:76) |  
  | at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:313) |  
  | at java.base/java.util.Objects.checkFromToIndex(Objects.java:385) |  
  | at java.base/java.nio.HeapCharBuffer.subSequence(HeapCharBuffer.java:664) |  
  | at java.base/java.nio.HeapCharBuffer.subSequence(HeapCharBuffer.java:44) |  
  | at com.google.errorprone.VisitorState.getOffsetTokens(VisitorState.java:589) |  
  | at com.google.errorprone.bugpatterns.AnnotationPosition.annotationTokens(AnnotationPosition.java:180) |  
  | at com.google.errorprone.bugpatterns.AnnotationPosition.handle(AnnotationPosition.java:120) |  
  | at com.google.errorprone.bugpatterns.AnnotationPosition.matchMethod(AnnotationPosition.java:105) |  
  | 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:953) |  
  | at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86) |  
  | 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:860) |  
  | at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86) |  
  | 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.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:860) |  
  | at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86) |  
  | 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:614) |  
  | at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:60) |  
  | 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 jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132) |  
  | at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1394) |  
  | at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1341) |  
  | at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:933) |  
  | at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104) |  
  | at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152) |  
  | at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100) |  
  | at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94) |  
  | at org.gradle.internal.compiler.java.IncrementalCompileTask.call(IncrementalCompileTask.java:89) |  
  | at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.call(AnnotationProcessingCompileTask.java:94) |  
  | at org.gradle.api.internal.tasks.compile.ResourceCleaningCompilationTask.call(ResourceCleaningCompilationTask.java:57) |  
  | at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:54) |  
  | at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:39) |  
  | at org.gradle.api.internal.tasks.compile.daemon.AbstractDaemonCompiler$CompilerWorkAction.execute(AbstractDaemonCompiler.java:135) |  
  | at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63) |  
  | at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:49) |  
  | at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:43) |  
  | at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:97) |  
  | at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:43) |  
  | at org.gradle.workers.internal.FlatClassLoaderWorker.run(FlatClassLoaderWorker.java:32) |  
  | at org.gradle.workers.internal.FlatClassLoaderWorker.run(FlatClassLoaderWorker.java:22) |  
  | at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:87) |  
  | at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:56) |  
  | at org.gradle.process.internal.worker.request.WorkerAction$1.call(WorkerAction.java:138) |  
  | at org.gradle.process.internal.worker.child.WorkerLogEventListener.withWorkerLoggingProtocol(WorkerLogEventListener.java:41) |  
  | at org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:135) |  
  | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) |  
  | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) |  
  | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) |  
  | at java.base/java.lang.reflect.Method.invoke(Method.java:568) |  
  | at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) |  
  | at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) |  
  | at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) |  
  | at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) |  
  | at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414) |  
  | at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) |  
  | at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) |  
  | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) |  
  | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) |  
  | at java.base/java.lang.Thread.run(Thread.java:833)

can you experss your question in detail, I cannot reappear your error with same situation.

I can reproduce in my codebase with 2.13.1.

Here is a minimal reproducer for me as com/example/Foo.java:

package com.example;

import javax.inject.Inject;
import java.util.Map;

public class Foo {
    private record Bar(Map<String, String> barMap) {
        @Inject
        private Bar {}
    }
}

The associated error for this content is similar to the original report but indices are different:

     error-prone version: 2.13.1
     BugPattern: AnnotationPosition
     Stack Trace:
     java.lang.IndexOutOfBoundsException: Range [154, 116) out of bounds for length 194
        at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
        at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:76)
        at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:313)
        at java.base/java.util.Objects.checkFromToIndex(Objects.java:385)
        at java.base/java.nio.HeapCharBuffer.subSequence(HeapCharBuffer.java:664)
        at java.base/java.nio.HeapCharBuffer.subSequence(HeapCharBuffer.java:44)
        at com.google.errorprone.VisitorState.getOffsetTokens(VisitorState.java:595)
        at com.google.errorprone.bugpatterns.AnnotationPosition.annotationTokens(AnnotationPosition.java:178)
        at com.google.errorprone.bugpatterns.AnnotationPosition.handle(AnnotationPosition.java:118)
        at com.google.errorprone.bugpatterns.AnnotationPosition.matchMethod(AnnotationPosition.java:103)
        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:953)
        at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
        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:860)
        at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
        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:860)
        at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
        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:614)
        at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:60)
        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 jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132)
        at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1394)
        at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1341)
        at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:933)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
        at org.gradle.internal.compiler.java.IncrementalCompileTask.call(IncrementalCompileTask.java:89)
        at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.call(AnnotationProcessingCompileTask.java:94)
        at org.gradle.api.internal.tasks.compile.ResourceCleaningCompilationTask.call(ResourceCleaningCompilationTask.java:57)
        at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:54)
        at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:39)
        at org.gradle.api.internal.tasks.compile.daemon.AbstractDaemonCompiler$CompilerWorkAction.execute(AbstractDaemonCompiler.java:135)
        at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
        at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:49)
        at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:43)
        at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:97)
        at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:43)
        at org.gradle.workers.internal.FlatClassLoaderWorker.run(FlatClassLoaderWorker.java:32)
        at org.gradle.workers.internal.FlatClassLoaderWorker.run(FlatClassLoaderWorker.java:22)
        at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:87)
        at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:56)
        at org.gradle.process.internal.worker.request.WorkerAction$1.call(WorkerAction.java:138)
        at org.gradle.process.internal.worker.child.WorkerLogEventListener.withWorkerLoggingProtocol(WorkerLogEventListener.java:41)
        at org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:135)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
        at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
        at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
        at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
        at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:833)

Still present in 2.14.0.
Is independent of @Inject, probably any annotation causes this. Encountered this with Jackson @JsonCreator:

record Wrapper(@JsonValue String json) {
  @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
  public Wrapper {}
}