google / error-prone

Catch common Java mistakes as compile-time errors
https://errorprone.info
Apache License 2.0
6.77k stars 732 forks source link

An unhandled exception was thrown by the Error Prone static analysis plugin. #4017

Open omer-azmon opened 11 months ago

omer-azmon commented 11 months ago
 Please report this at https://github.com/google/error-prone/issues/new and include the following:
[ERROR]   
[ERROR]      error-prone version: 2.20.0
[ERROR]      BugPattern: UnusedTypeParameter
[ERROR]      Stack Trace:
[ERROR]      java.util.NoSuchElementException: No value present
[ERROR]     at java.base/java.util.Optional.get(Optional.java:148)
[ERROR]     at com.google.errorprone.bugpatterns.UnusedTypeParameter.removeTypeParameter(UnusedTypeParameter.java:119)
[ERROR]     at com.google.errorprone.bugpatterns.UnusedTypeParameter$1.handle(UnusedTypeParameter.java:79)
[ERROR]     at com.google.errorprone.bugpatterns.UnusedTypeParameter$1.visitMethod(UnusedTypeParameter.java:69)
[ERROR]     at com.google.errorprone.bugpatterns.UnusedTypeParameter$1.visitMethod(UnusedTypeParameter.java:53)
[ERROR]     at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:898)
[ERROR]     at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[ERROR]     at com.google.errorprone.bugpatterns.BugChecker$SuppressibleTreePathScanner.scan(BugChecker.java:570)
[ERROR]     at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
[ERROR]     at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
[ERROR]     at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
[ERROR]     at jdk.compiler/com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:187)
[ERROR]     at com.google.errorprone.bugpatterns.UnusedTypeParameter$1.visitClass(UnusedTypeParameter.java:59)
[ERROR]     at com.google.errorprone.bugpatterns.UnusedTypeParameter$1.visitClass(UnusedTypeParameter.java:53)
[ERROR]     at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:808)
[ERROR]     at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[ERROR]     at com.google.errorprone.bugpatterns.BugChecker$SuppressibleTreePathScanner.scan(BugChecker.java:570)
[ERROR]     at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
[ERROR]     at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
[ERROR]     at jdk.compiler/com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:144)
[ERROR]     at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:591)
[ERROR]     at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:56)
[ERROR]     at com.google.errorprone.bugpatterns.BugChecker$SuppressibleTreePathScanner.scan(BugChecker.java:575)
[ERROR]     at com.google.errorprone.bugpatterns.UnusedTypeParameter.matchCompilationUnit(UnusedTypeParameter.java:83)
[ERROR]     at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:449)
[ERROR]     at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:555)
[ERROR]     at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:150)
[ERROR]     at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:591)
[ERROR]     at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:56)
[ERROR]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:58)
[ERROR]     at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
[ERROR]     at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:156)
[ERROR]     at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132)
[ERROR]     at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1418)
[ERROR]     at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1365)
[ERROR]     at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:960)
[ERROR]     at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
[ERROR]     at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:147)
[ERROR]     at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
[ERROR]     at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
[ERROR]     at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:136)
[ERROR]     at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:183)
[ERROR]     at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1140)
[ERROR]     at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:193)
[ERROR]     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
[ERROR]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210)
[ERROR]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
[ERROR]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
[ERROR]     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
[ERROR]     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
[ERROR]     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
[ERROR]     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
[ERROR]     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
[ERROR]     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
[ERROR]     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
[ERROR]     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:972)
[ERROR]     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:293)
[ERROR]     at org.apache.maven.cli.MavenCli.main(MavenCli.java:196)
[ERROR]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[ERROR]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
[ERROR]     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282)
[ERROR]     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
[ERROR]     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
[ERROR]     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)

Using:

        <error-prone.version>2.20.0</error-prone.version>
        <lombok.version>1.18.24</lombok.version>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>

Pom Snippet:

          <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version>
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                    <!-- show warnings during compilation, i.e. -Xlint:all -->
                    <showWarnings>true</showWarnings>
                    <!-- fail if there are warnings, warnings are typically not bugs, so I like to set this to false, i.e. -Werror -->
                    <failOnWarning>false</failOnWarning>
                    <compilerArgs>
                        <!-- for JDK 11+ we must make it possible ta access these exports -->
                        <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
                        <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
                        <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
                        <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
                        <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
                        <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
                        <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
                        <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
                        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
                        <arg>-J--add-open=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
                        <arg>-XDcompilePolicy=simple</arg>
                        <!--
                            https://errorprone.info/docs/flags

                            * -Xplugin:ErrorProne - enable the plugin
                            * -XepDisableWarningsInGeneratedCode - disable for code annotated with @Generated
                            * -XepExcludedPaths:.*/generated-sources/.* - exclude generated sources
                        -->
                        <arg>
                            -Xplugin:ErrorProne
                            -XepDisableWarningsInGeneratedCode
                            -XepExcludedPaths:.*/generated-sources/.*
                        </arg>
                    </compilerArgs>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>com.google.errorprone</groupId>
                            <artifactId>error_prone_core</artifactId>
                            <version>${error-prone.version}</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                        <!-- Other annotation processors go here.

                        If 'annotationProcessorPaths' is set, processors will no longer be
                        discovered on the regular -classpath; see also 'Using Error Prone
                        together with other annotation processors' below. -->
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
cushon commented 11 months ago

Based on the stack trace the check is analyzing a method with a type parameter, but when it looks at the source code the type parameter isn't there.

The config shows this build is using lombok, which generates synthetic AST nodes that don't have source positions and don't match up to the original source code, which is consistent with the crash.

This is related to other crashes caused by lombok, e.g. https://github.com/google/error-prone/issues?q=is%3Aopen+is%3Aissue+label%3Alombok

NicklasWallgren commented 11 months ago

@omer-azmon Have you tried activating addLombokGeneratedAnnotation? It should hopefully solve this particular issue.

omer-azmon commented 11 months ago

It worked!

Thanks,

Omer Azmon | 5253 | Principal Engineer — MSaaS Paved Roads

Office: 650 944 3643 | Mobile: 818 370 8453


From: NicklasWallgren @.> Sent: Monday, July 31, 2023 05:50 To: google/error-prone @.> Cc: Azmon, Omer @.>; Mention @.> Subject: Re: [google/error-prone] An unhandled exception was thrown by the Error Prone static analysis plugin. (Issue #4017)

This email is from an external sender.

@omer-azmonhttps://github.com/omer-azmon Have you tried activating addLombokGeneratedAnnotation? It should hopefully solve this particular issue.

— Reply to this email directly, view it on GitHubhttps://github.com/google/error-prone/issues/4017#issuecomment-1658313321, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AZZGRD7FIVIQIQRCBWRWFBTXS6SYNANCNFSM6AAAAAA2WE2HGQ. You are receiving this because you were mentioned.Message ID: @.***>