Parent: #10440
Scope
Medium-sized modules (~40-80 production files). Should be tackled after Phase 1, since several of these depend on ethereum/core and ethereum/eth already being annotated.
One PR per module:
Recipe
Apply the per-module template from the parent issue. See #10370 for a worked example.
Notes
- The QBFT pair (
qbft and qbft-core) shares a lot of types — annotate them together or in tight succession to avoid round-tripping null contracts.
ethereum/trie interacts heavily with tuweni-bytes and Guava — expect to apply requireNonNull(...) at those boundaries since neither is JSpecify-annotated.
Definition of done
- Each module's
build.gradle carries the NullAway block.
./gradlew :<module>:compileJava passes.
- CI green on a full build.
Parent: #10440
Scope
Medium-sized modules (~40-80 production files). Should be tackled after Phase 1, since several of these depend on
ethereum/coreandethereum/ethalready being annotated.One PR per module:
consensus/ibft(52 files)consensus/qbft(40 files)consensus/qbft-core(60 files)ethereum/trie(42 files)metrics/core(45 files)Recipe
Apply the per-module template from the parent issue. See #10370 for a worked example.
Notes
qbftandqbft-core) shares a lot of types — annotate them together or in tight succession to avoid round-tripping null contracts.ethereum/trieinteracts heavily withtuweni-bytesand Guava — expect to applyrequireNonNull(...)at those boundaries since neither is JSpecify-annotated.Definition of done
build.gradlecarries the NullAway block../gradlew :<module>:compileJavapasses.