error-prone version: 2.3.2
BugPattern: NullableDereference
Stack Trace:
java.lang.NullPointerException
at com.google.errorprone.bugpatterns.nullness.NullableDereference.matchMemberSelect(NullableDereference.java:64)
at com.google.errorprone.scanner.ErrorProneScanner.visitMemberSelect(ErrorProneScanner.java:870)
at com.google.errorprone.scanner.ErrorProneScanner.visitMemberSelect(ErrorProneScanner.java:146)
at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2112)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
at com.google.errorprone.scanner.Scanner.scan(Scanner.java:83)
at com.google.errorprone.scanner.Scanner.scan(Scanner.java:43)
at com.sun.source.util.TreeScanner.visitImport(TreeScanner.java:171)
at com.google.errorprone.scanner.ErrorProneScanner.visitImport(ErrorProneScanner.java:771)
at com.google.errorprone.scanner.ErrorProneScanner.visitImport(ErrorProneScanner.java:146)
at com.sun.tools.javac.tree.JCTree$JCImport.accept(JCTree.java:660)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
at com.google.errorprone.scanner.Scanner.scan(Scanner.java:83)
at com.google.errorprone.scanner.Scanner.scan(Scanner.java:43)
at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
at com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:143)
at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:603)
at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:146)
at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:591)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:56)
at com.google.errorprone.scanner.Scanner.scan(Scanner.java:65)
at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:151)
at com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:120)
at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1404)
at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1353)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:952)
at com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100)
at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142)
at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96)
at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90)
at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:143)
at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:114)
at com.google.errorprone.ErrorProneCompiler.run(ErrorProneCompiler.java:121)
at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne$CompilerInvoker.compile(JavacCompilerWithErrorProne.java:223)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne.performCompile(JavacCompilerWithErrorProne.java:91)
at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1129)
at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:188)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:956)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:290)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:194)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.maven.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:39)
at org.apache.maven.wrapper.WrapperExecutor.execute(WrapperExecutor.java:122)
at org.apache.maven.wrapper.MavenWrapperMain.main(MavenWrapperMain.java:55)
I observed this as well.
Bisected to e04ebdd0636f9585dfa2ea761ce388afd354b0ce.
FTR: This was seen on a project with a working EP v2.3.1 bumped to 2.3.2 and no other changes.
Kind of reproducer, which completes successfully with flag AllDisabledChecksAsWarnings not set.
cc @kevin1e100
Note that this check is disabled by default, so this crash shouldn't happen unless you've opted in to NullableDereference.
@cushon And yet there's no mention of NullableDereference in @vorburger's earlier example, so apparently it doesn't need to be imported for the OP's error to occur. Strange... 馃
@jbduncan - Oh but there is: https://github.com/etcd-io/jetcd/blob/49e3de4d5c0272cabdae5dacec785b41dc397075/pom.xml#L392
@pzygielo Oh of course! -XepAllDisabledChecksAsWarnings implicitly enables NullableDereference as a warning-producing checker.
@cushon So I believe that explains why @vorburger's example produces an error related to NullableDereference. :)
@cushon And I believe the same reasoning applies to @pzygielo's example.
Is there enough material for faulty NullableDereference to be investigated?
We suggest for now explicitly turning that check off with -Xep:NullableDereference:OFF, and we'll fix it in the next release (which will hopefully be sooner than the latency on the last one!); the fix looks relatively simple to me. Also, we generally discourage using -XepAllDisabledChecksAsWarnings. Some checks are disabled because they're buggy.
Thanks for finding this!
Most helpful comment
We suggest for now explicitly turning that check off with
-Xep:NullableDereference:OFF, and we'll fix it in the next release (which will hopefully be sooner than the latency on the last one!); the fix looks relatively simple to me. Also, we generally discourage using-XepAllDisabledChecksAsWarnings. Some checks are disabled because they're buggy.Thanks for finding this!