I've found that compared to previous versions, NullAway 0.12.11 is 2-4 times slower, and now takes more time than javac itself.
Compiling a large project we have takes:
- 11s with no checks (-XepDisableAllChecks)
- 18s with NullAway 0.12.10
- 39s with NullAway 0.12.11
I found that most time is spent in org.checkerframework.nullaway.dataflow.analysis.ForwardAnalysisImpl.performAnalysis, which used to be called only once per method but now is called on every dereference. Since this is a whole-method analysis, the overall time to check a method is O(n^2) in its size.