Hello,
Since upgrading to version 2.14.0, seeing the following NPE being thrown. It appears this is occurring whilst analysing a method with a new style switch statement where the result is a Supplier of an Optional. For example:
Supplier<Optional<Record>> = switch(enumValue) {
case VALUE1 -> () -> ....
case VALUE2 -> () -> .....
};
Changing this to an old-style switch statement prevents the NPE.
14:49:32 error-prone version: 2.14.0
14:49:32 BugPattern: Immutable
14:49:32 Stack Trace:
14:49:32 java.lang.NullPointerException: Cannot invoke "com.google.errorprone.util.ASTHelpers$TargetType.type()" because the return value of "com.google.errorprone.util.ASTHelpers.targetType(com.google.errorprone.VisitorState)" is null
14:49:32 at com.google.errorprone.bugpatterns.threadsafety.ImmutableChecker.matchMemberReference(ImmutableChecker.java:150)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:449)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitMemberReference(ErrorProneScanner.java:715)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitMemberReference(ErrorProneScanner.java:150)
14:49:32 at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMemberReference.accept(JCTree.java:2546)
14:49:32 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.visitCase(TreeScanner.java:401)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitCase(ErrorProneScanner.java:534)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitCase(ErrorProneScanner.java:150)
14:49:32 at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCase.accept(JCTree.java:1357)
14:49:32 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.visitSwitchExpression(TreeScanner.java:384)
14:49:32 at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCSwitchExpression.accept(JCTree.java:1390)
14:49:32 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.visitVariable(TreeScanner.java:243)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitVariable(ErrorProneScanner.java:885)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitVariable(ErrorProneScanner.java:150)
14:49:32 at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:1045)
14:49:32 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:272)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:520)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:150)
14:49:32 at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1103)
14:49:32 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:224)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:740)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:150)
14:49:32 at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:953)
14:49:32 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:203)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:548)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:150)
14:49:32 at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:860)
14:49:32 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
14:49:32 at jdk.compiler/com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:152)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:560)
14:49:32 at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:150)
14:49:32 at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:614)
14:49:32 at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:60)
14:49:32 at com.google.errorprone.scanner.Scanner.scan(Scanner.java:58)
14:49:32 at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
14:49:32 at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:152)
14:49:32 at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132)
14:49:33 at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1394)
14:49:33 at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1341)
14:49:33 at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:933)
14:49:33 at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:317)
14:49:33 at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:176)
14:49:33 at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:64)
14:49:33 at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:50)
Hello,
Since upgrading to version 2.14.0, seeing the following NPE being thrown. It appears this is occurring whilst analysing a method with a new style switch statement where the result is a Supplier of an Optional. For example:
Changing this to an old-style switch statement prevents the NPE.