| # Copyright 2022 The Bazel Authors. All rights reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| """Creates the import deps checker for java rules""" |
| |
| load("//java/common:java_semantics.bzl", "semantics") |
| |
| visibility(["//java/common/rules/..."]) |
| |
| def import_deps_check( |
| ctx, |
| jars_to_check, |
| declared_deps, |
| transitive_deps, |
| rule_class): |
| """ |
| Creates actions that checks import deps for java rules. |
| |
| Args: |
| ctx: (RuleContext) Used to register the actions. |
| jars_to_check: (list[File]) A list of jars files to check. |
| declared_deps: (list[File]) A list of direct dependencies. |
| transitive_deps: (list[File]) A list of transitive dependencies. |
| rule_class: (String) Rule class. |
| |
| Returns: |
| (File) Output file of the created action. |
| """ |
| java_toolchain = semantics.find_java_toolchain(ctx) |
| deps_checker = java_toolchain._deps_checker |
| if deps_checker == None: |
| return None |
| |
| jdeps_output = ctx.actions.declare_file("_%s/%s/jdeps.proto" % (rule_class, ctx.label.name)) |
| |
| args = ctx.actions.args() |
| args.add("-jar", deps_checker) |
| args.add_all(jars_to_check, before_each = "--input") |
| args.add_all(declared_deps, before_each = "--directdep") |
| args.add_all( |
| depset(order = "preorder", transitive = [declared_deps, transitive_deps]), |
| before_each = "--classpath_entry", |
| ) |
| args.add_all(java_toolchain.bootclasspath, before_each = "--bootclasspath_entry") |
| args.add("--checking_mode=error") |
| args.add("--jdeps_output", jdeps_output) |
| args.add("--rule_label", ctx.label) |
| |
| inputs = depset( |
| jars_to_check, |
| transitive = [ |
| declared_deps, |
| transitive_deps, |
| java_toolchain.bootclasspath, |
| ], |
| ) |
| tools = [deps_checker, java_toolchain.java_runtime.files] |
| |
| ctx.actions.run( |
| mnemonic = "ImportDepsChecker", |
| progress_message = "Checking the completeness of the deps for %s" % jars_to_check, |
| executable = java_toolchain.java_runtime.java_executable_exec_path, |
| arguments = [args], |
| inputs = inputs, |
| outputs = [jdeps_output], |
| tools = tools, |
| toolchain = semantics.JAVA_TOOLCHAIN_TYPE, |
| ) |
| |
| return jdeps_output |