Error-prone: NullableDereference in 2.3.2

Created on 11 Oct 2018  路  11Comments  路  Source: google/error-prone

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)

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!

All 11 comments

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... 馃

@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!

Was this page helpful?
0 / 5 - 0 ratings