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

NPE in AbstractReturnValueIgnored #657

Closed
Stephan202 opened this issue Jun 30, 2017 · 1 comment
Closed

NPE in AbstractReturnValueIgnored #657

Stephan202 opened this issue Jun 30, 2017 · 1 comment

Comments

@Stephan202
Copy link
Contributor

Consider this class:

final class Test {
    private final Runnable r = () -> String.valueOf("");
}

Running Error Prone with default settings yields:

Test.java:2: error: An unhandled exception was thrown by the Error Prone static analysis plugin.
    private final Runnable r = () -> String.valueOf("");
                                                   ^
     Please report this at https://github.com/google/error-prone/issues/new and include the following:
  
     error-prone version: 2.0.21
     Stack Trace:
     java.lang.NullPointerException
  	at com.google.errorprone.matchers.IsLastStatementInBlock.matches(IsLastStatementInBlock.java:31)
  	at com.google.errorprone.matchers.IsLastStatementInBlock.matches(IsLastStatementInBlock.java:25)
  	at com.google.errorprone.matchers.Matchers$4.matches(Matchers.java:127)
  	at com.google.errorprone.matchers.Matchers$5.matches(Matchers.java:146)
  	at com.google.errorprone.bugpatterns.AbstractReturnValueIgnored.expectedExceptionTest(AbstractReturnValueIgnored.java:163)
  	at com.google.errorprone.matchers.Matchers$3.matches(Matchers.java:112)
  	at com.google.errorprone.matchers.Matchers$4.matches(Matchers.java:127)
  	at com.google.errorprone.bugpatterns.AbstractReturnValueIgnored.matchMethodInvocation(AbstractReturnValueIgnored.java:80)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:907)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:146)
  	at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1644)
  	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
  	at com.sun.source.util.TreeScanner.visitLambdaExpression(TreeScanner.java:559)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitLambdaExpression(ErrorProneScanner.java:833)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitLambdaExpression(ErrorProneScanner.java:146)
  	at com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1805)
  	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
  	at com.sun.source.util.TreeScanner.visitVariable(TreeScanner.java:223)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitVariable(ErrorProneScanner.java:1156)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitVariable(ErrorProneScanner.java:146)
  	at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:968)
  	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
  	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.visitClass(TreeScanner.java:187)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:590)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:146)
  	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:808)
  	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  	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:144)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:605)
  	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:64)
  	at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:41)
  	at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:145)
  	at com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:120)
  	at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1425)
  	at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1374)
  	at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:973)
  	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:137)
  	at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:108)
  	at com.google.errorprone.ErrorProneCompiler.run(ErrorProneCompiler.java:118)
  	at com.google.errorprone.ErrorProneCompiler.compile(ErrorProneCompiler.java:65)
  	at com.google.errorprone.ErrorProneCompiler.main(ErrorProneCompiler.java:44)
1 error

The issue seems to be triggered because Runnable#run is void, while the lambda expression isn't.

Workarounds:

  1. Modify the lambda expression by enclosing the expression in a statement block (i.e., add curly braces).
  2. Disable all checks which are a subclass of AbstractReturnValueIgnored (all are enabled by default): -XepCheckReturnValue:OFF -Xep:FutureReturnValueIgnored:OFF -Xep:ReturnValueIgnored:OFF -Xep:RectIntersectReturnValueIgnored:OFF.
@eaftan
Copy link
Contributor

eaftan commented Jun 30, 2017

Thanks for the bug report, we'll take a look. Was probably caused by fee27a7.

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

No branches or pull requests

2 participants