)]}'
{
  "commit": "15513c8663a795b3fedda926f2fbeebbbd219b82",
  "tree": "c260a3f69131968e1386dbd187f17cff2f43a999",
  "parents": [
    "22dd431b6fd0bbda53ac5206b3edf9ca0c178ea2"
  ],
  "author": {
    "name": "Googler",
    "email": "cushon@google.com",
    "time": "Sat Nov 07 18:02:34 2026 -0800"
  },
  "committer": {
    "name": "rules_java Copybara",
    "email": "noreply@google.com",
    "time": "Sat Nov 07 18:03:04 2026 -0800"
  },
  "message": "Track transitive neverlink jars in JavaInfo.\n\n`JavaInfo` clears `transitive_runtime_jars` at `neverlink \u003d 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.\n\nAdd `_transitive_neverlink_jars` to `JavaInfo` to collect `transitive_runtime_jars` at `neverlink \u003d True` boundaries and propagate them across `deps`, `runtime_deps`, and `exports`, as well as through `java_common.merge` and `to_implicit_exportable`.\n\nThe 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`\u0027s 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 \u003d True` targets or when merging multiple non-empty `_transitive_neverlink_jars` branches.\n\nPiperOrigin-RevId: 1016498690\nChange-Id: Ic05e96376751f3b1888c3d74b96c9a8e3df9aa29\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e873ee1befc43adc023a75623dfc61e48896ad47",
      "old_mode": 33188,
      "old_path": "java/private/java_info.bzl",
      "new_id": "dafe116ec9496dc2480a4858fffc00201a7136a0",
      "new_mode": 33188,
      "new_path": "java/private/java_info.bzl"
    },
    {
      "type": "modify",
      "old_id": "e9942abd31a8d0f4e71599bca04f5ab81701f26a",
      "old_mode": 33188,
      "old_path": "test/java/common/java_common_tests.bzl",
      "new_id": "4091dee83a40adf5cef00f4286ddb2bf012687e8",
      "new_mode": 33188,
      "new_path": "test/java/common/java_common_tests.bzl"
    },
    {
      "type": "modify",
      "old_id": "8f4c2c13d2aa12fb1e3811c1935216419ea4ae92",
      "old_mode": 33188,
      "old_path": "test/java/common/java_info_tests.bzl",
      "new_id": "497e1f843280b2e95507e70c0f9ac50dc61089c5",
      "new_mode": 33188,
      "new_path": "test/java/common/java_info_tests.bzl"
    },
    {
      "type": "modify",
      "old_id": "8f9bea649d372a60587ad4f25d15b0d069cad2d5",
      "old_mode": 33188,
      "old_path": "test/java/private/android_support_tests.bzl",
      "new_id": "0a3122c64b804560f590fd736ef9245e20dcc1bd",
      "new_mode": 33188,
      "new_path": "test/java/private/android_support_tests.bzl"
    },
    {
      "type": "modify",
      "old_id": "8df4f786a7594894530f8c4dae51d07abf34b572",
      "old_mode": 33188,
      "old_path": "test/java/testutil/java_info_subject.bzl",
      "new_id": "bf6dbb704599a8d4eb2db8a227f095f3fac9a444",
      "new_mode": 33188,
      "new_path": "test/java/testutil/java_info_subject.bzl"
    }
  ]
}
