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

JDK (java/util/Formatter.java) causes NPE in ReferenceEquality #2639

Open
iignatev opened this issue Oct 20, 2021 · 0 comments
Open

JDK (java/util/Formatter.java) causes NPE in ReferenceEquality #2639

iignatev opened this issue Oct 20, 2021 · 0 comments

Comments

@iignatev
Copy link
Contributor

Hi again,

after disabling FallThrough to workaround #2638, I get another NPE now from ReferenceEquality while handling the same java/util/Formatter.java class:

/Users/iignatye/ws/jdk/open/src/java.base/share/classes/java/util/Formatter.java:4040: error: An unhandled exception was thrown by the Error Prone static analysis plugin.
                if (l != null && l != Locale.US) {
                                   ^
     Please report this at https://github.com/google/error-prone/issues/new and include the following:
  
     error-prone version: 2.9.0
     BugPattern: ReferenceEquality
     Stack Trace:
     com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException: Cannot invoke "java.util.List.iterator()" because the return value of "com.sun.source.tree.CaseTree.getStatements()" is null
  	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2051)
  	at com.google.common.cache.LocalCache.get(LocalCache.java:3951)
  	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974)
  	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4935)
  	at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4941)
  	at com.google.errorprone.dataflow.DataFlow.methodDataflow(DataFlow.java:176)
  	at com.google.errorprone.dataflow.DataFlow.expressionDataflow(DataFlow.java:236)
  	at com.google.errorprone.dataflow.nullnesspropagation.NullnessAnalysis.getNullness(NullnessAnalysis.java:59)
  	at com.google.errorprone.bugpatterns.AbstractReferenceEquality.getNullness(AbstractReferenceEquality.java:182)
  	at com.google.errorprone.bugpatterns.AbstractReferenceEquality.addFixes(AbstractReferenceEquality.java:103)
  	at com.google.errorprone.bugpatterns.AbstractReferenceEquality.matchBinary(AbstractReferenceEquality.java:78)
  	at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:450)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitBinary(ErrorProneScanner.java:513)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitBinary(ErrorProneScanner.java:151)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCBinary.accept(JCTree.java:2166)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.visitBinary(TreeScanner.java:722)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitBinary(ErrorProneScanner.java:514)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitBinary(ErrorProneScanner.java:151)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCBinary.accept(JCTree.java:2166)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.visitParenthesized(TreeScanner.java:661)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitParenthesized(ErrorProneScanner.java:800)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitParenthesized(ErrorProneScanner.java:151)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCParens.accept(JCTree.java:2022)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.visitIf(TreeScanner.java:485)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitIf(ErrorProneScanner.java:655)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitIf(ErrorProneScanner.java:151)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCIf.accept(JCTree.java:1565)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:272)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:521)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:151)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1103)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.visitCase(TreeScanner.java:403)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitCase(ErrorProneScanner.java:535)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitCase(ErrorProneScanner.java:151)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCCase.accept(JCTree.java:1357)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.visitSwitch(TreeScanner.java:368)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitSwitch(ErrorProneScanner.java:825)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitSwitch(ErrorProneScanner.java:151)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCSwitch.accept(JCTree.java:1304)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:272)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:521)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:151)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1103)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:224)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:741)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:151)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:953)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:203)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:549)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:151)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:860)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:203)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:549)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:151)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:860)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
  	at jdk.compiler.interim/com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:152)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:561)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:151)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:614)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:60)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:58)
  	at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
  	at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:152)
  	at jdk.compiler.interim/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132)
  	at jdk.compiler.interim/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1394)
  	at jdk.compiler.interim/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1341)
  	at jdk.compiler.interim/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:933)
  	at jdk.compiler.interim/com.sun.tools.javac.main.Main.compile(Main.java:317)
  	at jdk.compiler.interim/com.sun.tools.javac.main.Main.compile(Main.java:176)
  	at jdk.compiler.interim/com.sun.tools.javac.Main.compile(Main.java:64)
  	at jdk.compiler.interim/com.sun.tools.javac.Main.main(Main.java:50)
  Caused by: java.lang.NullPointerException: Cannot invoke "java.util.List.iterator()" because the return value of "com.sun.source.tree.CaseTree.getStatements()" is null
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne$SwitchBuilder.buildCase(CFGTranslationPhaseOne.java:2190)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne$SwitchBuilder.build(CFGTranslationPhaseOne.java:2156)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.visitSwitch(CFGTranslationPhaseOne.java:2086)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.visitSwitch(CFGTranslationPhaseOne.java:198)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCSwitch.accept(JCTree.java:1304)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.visitBlock(CFGTranslationPhaseOne.java:2062)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.visitBlock(CFGTranslationPhaseOne.java:198)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1103)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne$SwitchBuilder.buildCase(CFGTranslationPhaseOne.java:2191)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne$SwitchBuilder.build(CFGTranslationPhaseOne.java:2156)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.visitSwitch(CFGTranslationPhaseOne.java:2086)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.visitSwitch(CFGTranslationPhaseOne.java:198)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCSwitch.accept(JCTree.java:1304)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.visitBlock(CFGTranslationPhaseOne.java:2062)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.visitBlock(CFGTranslationPhaseOne.java:198)
  	at jdk.compiler.interim/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1103)
  	at jdk.compiler.interim/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:60)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.process(CFGTranslationPhaseOne.java:428)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.process(CFGTranslationPhaseOne.java:467)
  	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGBuilder.build(CFGBuilder.java:70)
  	at com.google.errorprone.dataflow.DataFlow$2.load(DataFlow.java:127)
  	at com.google.errorprone.dataflow.DataFlow$2.load(DataFlow.java:95)
  	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
  	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
  	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
  	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
  	... 122 more
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

1 participant