Track transitive neverlink jars in JavaInfo.

`JavaInfo` clears `transitive_runtime_jars` at `neverlink = True` boundaries, leaving downstream actions such as `one_version` duplicate class checking and ProGuard/R8 `-libraryjars` without access to the full class jars of `neverlink` dependencies unless a separate aspect traverses the dependency graph.

Add `_transitive_neverlink_jars` to `JavaInfo` to collect `transitive_runtime_jars` at `neverlink = True` boundaries and propagate them across `deps`, `runtime_deps`, and `exports`, as well as through `java_common.merge` and `to_implicit_exportable`.

The memory overhead scales with `neverlink` usage: when a target and its transitive dependencies do not use `neverlink`, `depset` construction skips empty transitive sets and returns the singleton empty `Depset` without allocating a new `NestedSet` node (only the reference slot in `JavaInfo`'s shared `StarlarkInfo` layout is populated). When a non-`neverlink` target has a single dependency branch with non-empty `_transitive_neverlink_jars`, `NestedSetBuilder` reuses that child `NestedSet` directly, so new `NestedSet` nodes are allocated only at `neverlink = True` targets or when merging multiple non-empty `_transitive_neverlink_jars` branches.

PiperOrigin-RevId: 1016498690
Change-Id: Ic05e96376751f3b1888c3d74b96c9a8e3df9aa29
5 files changed
tree: c260a3f69131968e1386dbd187f17cff2f43a999
  1. .bazel_checkout/
  2. .bazelci/
  3. .bcr/
  4. .github/
  5. distro/
  6. examples/
  7. java/
  8. test/
  9. third_party/
  10. toolchains/
  11. .bazelignore
  12. .bazelrc
  13. .gitignore
  14. AUTHORS
  15. BUILD
  16. CODEOWNERS
  17. CONTRIBUTING.md
  18. LICENSE
  19. MODULE.bazel
  20. README.md
  21. renovate.json
  22. WORKSPACE
  23. WORKSPACE.bzlmod
README.md

rules_java

Build status

Java Rules for Bazel https://bazel.build.

Documentation

For a quickstart tutorial, see https://bazel.build/start/java

The fastest way to try this in an empty project is to click the green “Use this template” button on https://github.com/bazel-starters/java.

For slightly more advanced usage, like setting up toolchains or writing your own java-like rules, see https://bazel.build/docs/bazel-and-java

Core Java rules

Add a load like:

load("@rules_java//java:java_library.bzl", "java_library")

to your BUILD / BUILD.bazel / *.bzl files

For detailed docs on the core rules, see https://bazel.build/reference/be/java