NullAway: IncompatibleClassChangeError with 0.9.0, JDK 8, and error-prone 2.5.1
When trying to update to 0.9.0, we see this runtime error from dataflow come up
> Task :libraries:foundation:slack-commons:compileReleaseJavaWithJavac
<path≥/slack/commons/logger/DebugLogger.java:27: error: An unhandled exception was thrown by the Error Prone static analysis plugin.
public class DebugLogger implements Logger {
^
Please report this at https://github.com/google/error-prone/issues/new and include the following:
error-prone version: 2.5.1
BugPattern: NullAway
Stack Trace:
java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at com.uber.nullaway.dataflow.DataFlow.<init>(DataFlow.java:78)
at com.uber.nullaway.dataflow.AccessPathNullnessAnalysis.<init>(AccessPathNullnessAnalysis.java:74)
at com.uber.nullaway.dataflow.AccessPathNullnessAnalysis.instance(AccessPathNullnessAnalysis.java:104)
at com.uber.nullaway.NullAway.getNullnessAnalysis(NullAway.java:1971)
at com.uber.nullaway.NullAway.matchClass(NullAway.java:1139)
at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:450)
at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:548)
at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:151)
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:74)
at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
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:561)
at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:151)
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:58)
at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:152)
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:946)
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 org.gradle.internal.compiler.java.IncrementalCompileTask.call(IncrementalCompileTask.java:74)
at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.call(AnnotationProcessingCompileTask.java:94)
at org.gradle.api.internal.tasks.compile.ResourceCleaningCompilationTask.call(ResourceCleaningCompilationTask.java:57)
at ...more gradle lines
1 error
Let me know what else I can help test. Possibly using a non-JDK8-compatible dataflow version?
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Comments: 31 (2 by maintainers)
NullAway 0.9.2 uses a shaded version of the Checker Framework dataflow analysis library (#485), so NullAway should no longer interfere with other Checker Framework dependency versioning schemes. So, I am going to close this issue.
@msridhar I’d seen that - but assumed that only applied if I was putting them in a single
<arg
. That looks like it worked fine. Time to try this on the main project and see how that works out.@talios see these docs about passing Error Prone args in Maven now:
https://errorprone.info/docs/flags#maven
Your safest bet is to pass all the arguments in a single
<arg>
element separated by spaces, e.g.:It’s gross, but that’s what’s needed for JDK 8.
@msridhar Sorry it’s taken so long - was a long weekend here and was out of town for a wedding.
https://github.com/talios/nullawaytest/runs/2456156307
This simple project based on the setup we have, fails to build ( as seen in the github action result - quite glad it failed there, means it’s not just my environment ).
When changing the
<version.nullaway>0.9.1</version.nullaway>
property inpom.xml
back to 0.8.0 - it builds fine.Even after stripping a bunch of checks, updating maven deps the problem triggers:
https://github.com/talios/nullawaytest/runs/2456244614
@mshekhar I’ll try - this was using Maven 3.8.1 and work build, which we’re fairly strict on dependency ranges and also include a bunch of other annotation processors - every so often we seem to hit a nullaway analysis error mentioning error-prone 2.3.4 as well, so I suspect something, somewhere has an errant dependency but its kinda difficult tracking that down.
Will put out a sample project and try to reproduce.