Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
omer-azmon opened this issue Jul 24, 2023 · 3 comments
Labels

Comments

@omer-azmon
Copy link

omer-azmon commented Jul 24, 2023

 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
Copy link
Collaborator

cushon commented Jul 24, 2023

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

@cushon cushon added the lombok label Jul 24, 2023
@NicklasWallgren
Copy link

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

@omer-azmon
Copy link
Author

omer-azmon commented Aug 1, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants