Starlarkify `collect_native_deps_dirs`

This is an ~exact transliteration of  https://github.com/bazelbuild/bazel/blob/4e0cdee77065995b0acdadc0fb75a277880844f2/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java#L295-L333

Once this lands in a rules_java release and Bazel uses that version, the native code can be deleted.

PiperOrigin-RevId: 992197433
Change-Id: Ifaa2eaab91312c697f04e71273c1a89fe33a1a75
diff --git a/java/common/rules/impl/java_binary_impl.bzl b/java/common/rules/impl/java_binary_impl.bzl
index 691d66d..6308ec3 100644
--- a/java/common/rules/impl/java_binary_impl.bzl
+++ b/java/common/rules/impl/java_binary_impl.bzl
@@ -22,7 +22,6 @@
 load("//java/private:java_common.bzl", "java_common")
 load(
     "//java/private:java_common_internal.bzl",
-    "collect_native_deps_dirs",
     "get_runtime_classpath_for_archive",
 )
 load("//java/private:java_info.bzl", "JavaCompilationInfo", "JavaInfo", "to_java_binary_info")
@@ -166,7 +165,7 @@
                 native_libs_depsets.append(dep[CcInfo]._legacy_transitive_native_libraries)
             else:
                 native_libs_depsets.append(dep[CcInfo].transitive_native_libraries())
-    native_libs_dirs = collect_native_deps_dirs(depset(transitive = native_libs_depsets))
+    native_libs_dirs = _collect_native_deps_dirs(depset(transitive = native_libs_depsets))
     if native_libs_dirs:
         prefix = "${JAVA_RUNFILES}/" + ctx.workspace_name + "/"
         separator = ";" if helper.is_target_platform_windows(ctx) else ":"
@@ -469,6 +468,22 @@
     )
     return output
 
+def _collect_native_deps_dirs(libraries):
+    result = {}
+    for library_to_link in libraries.to_list():
+        candidate = None
+        if library_to_link.interface_library:
+            candidate = library_to_link.interface_library
+        elif library_to_link.dynamic_library:
+            candidate = library_to_link.dynamic_library
+        if candidate:
+            ext = "." + candidate.extension
+            if ext in cc_helper.extensions.INTERFACE_SHARED_LIBRARY:
+                continue
+            parent_dir = candidate.short_path[:-(1 + len(candidate.basename))]
+            result[parent_dir] = None
+    return result.keys()
+
 def _test_providers(ctx):
     test_providers = []
     if helper.has_target_constraints(ctx, ctx.attr._apple_constraints):
diff --git a/java/private/java_common_internal.bzl b/java/private/java_common_internal.bzl
index 30d9533..4c5b603 100644
--- a/java/private/java_common_internal.bzl
+++ b/java/private/java_common_internal.bzl
@@ -507,17 +507,6 @@
     """
     return get_internal_java_common().target_kind(target)
 
-def collect_native_deps_dirs(libraries):
-    """Collect the set of root-relative paths containing native libraries
-
-    Args:
-        libraries: (depset[LibraryToLink]) set of native libraries
-
-    Returns:
-        ([String]) A set of root-relative paths as a list
-    """
-    return get_internal_java_common().collect_native_deps_dirs(libraries)
-
 def get_runtime_classpath_for_archive(jars, excluded_jars):
     """Filters a classpath to remove certain entries