Overhaul `@rules_java` bzl_library dep graph

 - Construct an accurate `bzl_library` target for the compatibility proxy
 - Updates `proto_support.bzl` to use the right `java_common`
 - Work towards fixing https://github.com/bazelbuild/bazel/issues/24455

PiperOrigin-RevId: 699129931
Change-Id: I55f6e744602e3760f69bc197a8f107fd119feee0
diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
index be62c01..efeeef1 100644
--- a/.bazelci/presubmit.yml
+++ b/.bazelci/presubmit.yml
@@ -4,7 +4,6 @@
   - "@remote_java_tools//java_tools/..."
   # TODO: Look into broken targets in //toolchains
   - "-//toolchains/..."
-  - "-//test/repo/..."
   # TODO: re-enable docs after protobuf is fixed
   - "-//java/docs/..."
   - "-//test:docs_up_to_date_test"
diff --git a/java/BUILD b/java/BUILD
index caacb07..2074c38 100644
--- a/java/BUILD
+++ b/java/BUILD
@@ -65,6 +65,13 @@
     deps = ["//java/common"],
 )
 
+bzl_library(
+    name = "http_jar_bzl",
+    srcs = ["http_jar.bzl"],
+    visibility = ["//visibility:public"],
+    deps = ["@bazel_tools//tools:bzl_srcs"],
+)
+
 filegroup(
     name = "for_bazel_tests",
     testonly = 1,
diff --git a/java/bazel/rules/BUILD.bazel b/java/bazel/rules/BUILD.bazel
index 1ffd8ef..0ffa9d4 100644
--- a/java/bazel/rules/BUILD.bazel
+++ b/java/bazel/rules/BUILD.bazel
@@ -24,9 +24,10 @@
     srcs = glob(["*.bzl"]),
     visibility = ["//visibility:public"],  # for Bazel docgen
     deps = [
-        "//java/common",
+        "//java/common:semantics_bzl",
         "//java/common/rules:core_rules",
         "//java/common/rules/impl",
+        "//java/private:internals",
         "@bazel_skylib//lib:paths",
         "@rules_cc//cc:find_cc_toolchain_bzl",
         "@rules_cc//cc/common",
diff --git a/java/common/BUILD b/java/common/BUILD
index ef669cc..6850cb4 100644
--- a/java/common/BUILD
+++ b/java/common/BUILD
@@ -14,14 +14,32 @@
 
 bzl_library(
     name = "common",
-    srcs = glob(["*.bzl"]),
+    srcs = glob(
+        ["*.bzl"],
+        exclude = [
+            "java_semantics.bzl",
+            "proguard_spec_info.bzl",
+        ],
+    ),
+    visibility = ["//visibility:public"],
+    deps = ["@compatibility_proxy//:proxy_bzl"],
+)
+
+bzl_library(
+    name = "semantics_bzl",
+    srcs = ["java_semantics.bzl"],
     visibility = ["//visibility:public"],
     deps = [
-        "//java/private:internals",
-        "@compatibility_proxy//:proxy_bzl",
+        "@rules_cc//cc/common",
     ],
 )
 
+bzl_library(
+    name = "proguard_spec_info_bzl",
+    srcs = ["proguard_spec_info.bzl"],
+    visibility = ["//visibility:public"],
+)
+
 filegroup(
     name = "for_bazel_tests",
     testonly = 1,
diff --git a/java/common/rules/BUILD b/java/common/rules/BUILD
index 4ffe015..9d0678c 100644
--- a/java/common/rules/BUILD
+++ b/java/common/rules/BUILD
@@ -38,7 +38,7 @@
     deps = [
         ":android_lint_bzl",
         ":rule_util_bzl",
-        "//java/common",
+        "//java/private:internals",
         "@bazel_skylib//lib:paths",
         "@rules_cc//cc/common",
     ],
@@ -53,6 +53,7 @@
     ],
     visibility = [
         "//java:__subpackages__",
+        "@compatibility_proxy//:__pkg__",
     ],
 )
 
diff --git a/java/common/rules/impl/BUILD b/java/common/rules/impl/BUILD
index fc96203..f50862c 100644
--- a/java/common/rules/impl/BUILD
+++ b/java/common/rules/impl/BUILD
@@ -17,6 +17,7 @@
     visibility = ["//java:__subpackages__"],
     deps = [
         ":java_helper_bzl",
+        "//java/common:proguard_spec_info_bzl",
         "@com_google_protobuf//bazel/common:proto_info_bzl",
     ],
 )
diff --git a/java/private/BUILD b/java/private/BUILD
index af9edbe..94bae8d 100644
--- a/java/private/BUILD
+++ b/java/private/BUILD
@@ -7,7 +7,10 @@
     srcs = [
         "native.bzl",
     ],
-    visibility = ["//java:__subpackages__"],
+    visibility = [
+        "//java:__subpackages__",
+        "@compatibility_proxy//:__pkg__",
+    ],
 )
 
 bzl_library(
@@ -19,7 +22,10 @@
         "java_info.bzl",
         "message_bundle_info.bzl",
     ],
-    visibility = ["//java:__subpackages__"],
+    visibility = [
+        "//java:__subpackages__",
+        "@compatibility_proxy//:__pkg__",
+    ],
     deps = [
         ":native_bzl",
         "//java/common/rules:toolchain_rules",
@@ -35,7 +41,7 @@
     name = "proto_support",
     srcs = ["proto_support.bzl"],
     visibility = ["//visibility:public"],
-    deps = [":native_bzl"],
+    deps = ["@compatibility_proxy//:proxy_bzl"],
 )
 
 filegroup(
diff --git a/java/private/proto_support.bzl b/java/private/proto_support.bzl
index dcb8f09..dff978b 100644
--- a/java/private/proto_support.bzl
+++ b/java/private/proto_support.bzl
@@ -13,7 +13,7 @@
 # limitations under the License.
 """Support for Java compilation of protocol buffer generated code."""
 
-load("//java/common:java_common.bzl", "java_common")
+load("@compatibility_proxy//:proxy.bzl", "java_common")
 
 # Partial support, because internal symbols are not available in older Bazel version
 # TODO: Once Java rules are moved into the rules_java, this should become a full support.
diff --git a/java/rules_java_deps.bzl b/java/rules_java_deps.bzl
index 8ed5857..026ed4f 100644
--- a/java/rules_java_deps.bzl
+++ b/java/rules_java_deps.bzl
@@ -6,15 +6,26 @@
 def _compatibility_proxy_repo_impl(rctx):
     # TODO: use @bazel_features
     bazel = native.bazel_version
-    rctx.file(
-        "BUILD.bazel",
-        """
-load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
-bzl_library(name = "proxy_bzl", srcs = ["proxy.bzl"], visibility = ["//visibility:public"])
-        """,
-    )
     if not bazel or bazel >= "8":
         rctx.file(
+            "BUILD.bazel",
+            """
+load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
+exports_files(['proxy.bzl'], visibility = ["@rules_java//test:__pkg__"])
+bzl_library(
+    name = "proxy_bzl",
+    srcs = ["proxy.bzl"],
+    deps = [
+        "@rules_java//java/bazel/rules",
+        "@rules_java//java/common/rules:toolchain_rules",
+        "@rules_java//java/private:internals",
+        "@rules_java//java:http_jar_bzl",
+    ],
+    visibility = ["//visibility:public"]
+)
+            """,
+        )
+        rctx.file(
             "proxy.bzl",
             """
 load("@rules_java//java/bazel/rules:bazel_java_binary_wrapper.bzl", _java_binary = "java_binary")
@@ -46,6 +57,22 @@
         )
     else:
         rctx.file(
+            "BUILD.bazel",
+            """
+load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
+exports_files(['proxy.bzl'], visibility = ["@rules_java//test:__pkg__"])
+bzl_library(
+    name = "proxy_bzl",
+    srcs = ["proxy.bzl"],
+    deps = [
+        "@rules_java//java/private:native_bzl",
+        "@bazel_tools//tools:bzl_srcs",
+    ],
+    visibility = ["//visibility:public"]
+)
+            """,
+        )
+        rctx.file(
             "proxy.bzl",
             """
 load("@bazel_tools//tools/build_defs/repo:http.bzl", _http_jar = "http_jar")
diff --git a/java/toolchains/BUILD b/java/toolchains/BUILD
index adcd09a..29a572a 100644
--- a/java/toolchains/BUILD
+++ b/java/toolchains/BUILD
@@ -14,10 +14,7 @@
     name = "toolchain_rules",
     srcs = glob(["*.bzl"]),
     visibility = ["//visibility:public"],
-    deps = [
-        "//java/private:native_bzl",
-        "@compatibility_proxy//:proxy_bzl",
-    ],
+    deps = ["@compatibility_proxy//:proxy_bzl"],
 )
 
 filegroup(
diff --git a/test/BUILD.bazel b/test/BUILD.bazel
index 00506f8..c9dd65b 100644
--- a/test/BUILD.bazel
+++ b/test/BUILD.bazel
@@ -60,3 +60,9 @@
 )
 
 validate_configs()
+
+starlark_doc_extract(
+    name = "proxy_bzl_graph",
+    src = "@compatibility_proxy//:proxy.bzl",
+    deps = ["@compatibility_proxy//:proxy_bzl"],
+)