Demote NullArgumentForNonNullParameter to a warning Since the rules_java 9.3.0 -> 9.5.0 bump in commit f999479bed, the Java 21 CI verification fails on about twenty call sites that pass a null default value to Guava methods such as Iterables.getFirst(). The code is correct: null is the documented default-value usage, and getFirst() is declared <T extends @Nullable Object>, so its @ParametricNullness defaultValue parameter accepts null whenever the inferred type argument is nullable. The errors are a known Error Prone false positive [1] that only occurs when javac fails to read the @Nullable type-use annotation on the type-variable bound from the Guava class files. Reading such annotations from class files was fixed by JDK-8341779 [2], a redo of the earlier JDK-8225377 [3], and needs a JDK 21 update release that includes the backport (21.0.8 or later). Error Prone started trusting these bound annotations in [4], which shipped with the newer Error Prone bundled by rules_java 9.5.0. Bazel's remotejdk_21 is Azul Zulu 21.0.9+10, which does not contain the JDK-8341779 backport; vendor discretion over backports is called out by the Error Prone maintainers in [1], and Temurin 21.0.9+10 does contain it. This is why the check misfires only in the Java 21 verification: with the Java 25 toolchain javac reads the annotation correctly and the check stays silent, as it should. Demote the check to a warning instead of disabling it, so the signal stays visible in build logs on both toolchains without failing the Java 21 CI. Restore it to an error once Bazel's remotejdk_21 points at a JDK 21 update with the JDK-8341779 backport; Zulu 21.0.11 and 21.0.12 are already published, but even rules_java 9.7.0 still pins Zulu 21.0.9 [5]; a repin has been requested upstream [6]. [1] https://github.com/google/error-prone/issues/5436 [2] https://bugs.openjdk.org/browse/JDK-8341779 [3] https://bugs.openjdk.org/browse/JDK-8225377 [4] https://github.com/google/error-prone/pull/5429 [5] https://github.com/bazelbuild/rules_java/releases/tag/9.7.0 [6] https://github.com/bazelbuild/rules_java/issues/369 Release-Notes: skip Change-Id: Ib59e2c8f04a7d1365e9b2a84c7f01d3e58a6b9c2
diff --git a/tools/BUILD b/tools/BUILD index 8b3429d..539aad5 100644 --- a/tools/BUILD +++ b/tools/BUILD
@@ -306,6 +306,13 @@ "-Xep:NonOverridingEquals:ERROR", "-Xep:NonRuntimeAnnotation:ERROR", "-Xep:NullOptional:ERROR", + # Demoted to a warning: false positive on Guava methods like + # Iterables.getFirst(iterable, null) when javac cannot read the + # @Nullable bound of <T extends @Nullable Object> from class + # files. Bazel's remotejdk_21 (Zulu 21.0.9) lacks the + # JDK-8341779 backport; JDK 25 is unaffected. See the commit + # message introducing this line for the full reference trail. + "-Xep:NullArgumentForNonNullParameter:WARN", "-Xep:NullTernary:ERROR", "-Xep:NullableConstructor:ERROR", "-Xep:NullablePrimitive:ERROR",