Skip to content

Commit f660493

Browse files
author
Gemini CLI
committed
Support toolchain-driven unused dependencies checking (Starlark changes)
1 parent 5aebf50 commit f660493

2 files changed

Lines changed: 41 additions & 1 deletion

File tree

java/common/rules/java_package_configuration.bzl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ JavaPackageConfigurationInfo = provider(
2828
"matches",
2929
"package_specs",
3030
"system",
31+
"unused_deps",
3132
],
3233
)
3334

@@ -50,6 +51,7 @@ def _rule_impl(ctx):
5051
matches = _matches,
5152
package_specs = package_specs,
5253
system = system,
54+
unused_deps = ctx.attr.unused_deps,
5355
),
5456
]
5557

@@ -116,6 +118,13 @@ The list of files needed by this configuration at runtime.
116118
providers = [BootClassPathInfo],
117119
doc = """
118120
Corresponds to javac's --system flag.
121+
""",
122+
),
123+
"unused_deps": attr.string(
124+
default = "off",
125+
values = ["off", "error"],
126+
doc = """
127+
Unused dependencies checking mode.
119128
""",
120129
),
121130
# buildifier: disable=attr-licenses

java/private/java_common_internal.bzl

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ load("//java/common/rules:java_helper.bzl", "helper")
2020
load("//java/common/rules:java_toolchain.bzl", "JavaToolchainInfo")
2121
load(
2222
":java_info.bzl",
23+
"JavaInfo",
2324
"JavaPluginInfo",
2425
"disable_plugin_info_annotation_processing",
2526
"java_info_for_compilation",
@@ -314,7 +315,36 @@ def compile(
314315
if uses_annotation_processing:
315316
generated_class_jar = _derive_output_file(ctx, output, name_suffix = "-gen")
316317
generated_source_jar = _derive_output_file(ctx, output, name_suffix = "-gensrc")
317-
get_internal_java_common().create_compilation_action(
318+
319+
direct_dep_jars_to_verify = []
320+
resolved_unused_deps_mode = "off"
321+
internal_common = get_internal_java_common()
322+
is_unused_deps_supported = hasattr(internal_common, "is_unused_deps_supported") and internal_common.is_unused_deps_supported()
323+
324+
if is_unused_deps_supported and not ctx.label.workspace_name:
325+
for package_config in java_toolchain._package_configuration:
326+
matched = package_config.matches(package_config.package_specs, ctx.label)
327+
if matched:
328+
if hasattr(package_config, "unused_deps"):
329+
resolved_unused_deps_mode = package_config.unused_deps
330+
331+
if resolved_unused_deps_mode == "error" and hasattr(ctx.attr, "deps"):
332+
for dep in ctx.attr.deps:
333+
if JavaInfo in dep:
334+
if hasattr(dep[JavaInfo], "java_outputs"):
335+
for output_info in dep[JavaInfo].java_outputs:
336+
compile_jar = output_info.compile_jar if output_info.compile_jar else output_info.class_jar
337+
if compile_jar:
338+
direct_dep_jars_to_verify.append(struct(
339+
jar = compile_jar,
340+
label = str(dep.label),
341+
))
342+
343+
additional_kwargs = {}
344+
if is_unused_deps_supported:
345+
additional_kwargs["direct_dep_jars_to_verify"] = direct_dep_jars_to_verify
346+
347+
internal_common.create_compilation_action(
318348
ctx,
319349
java_toolchain,
320350
output,
@@ -343,6 +373,7 @@ def compile(
343373
enable_direct_classpath,
344374
annotation_processor_additional_inputs,
345375
annotation_processor_additional_outputs,
376+
**additional_kwargs
346377
)
347378

348379
create_output_source_jar = len(source_files) > 0 or source_jars != [output_source_jar]

0 commit comments

Comments
 (0)