aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Humesky <ahumesky@google.com>2021-07-28 21:09:22 -0400
committerGitHub <noreply@github.com>2021-07-28 21:09:22 -0400
commit9b6935e013dccdfb98c4adc25ced77d0e9a9a09b (patch)
tree37dba5ce19654344ca1530fd7330ce8ed4a44d9d
parent5c8bdd44193894594fa01fd527c5cf3af17e7652 (diff)
downloadbazelbuild-rules_android-9b6935e013dccdfb98c4adc25ced77d0e9a9a09b.tar.gz
Prepare databinding integration for moving the DatabindingV2Provider attributes class_infos and setter_stores from lists to depsets. (#38)
See https://github.com/bazelbuild/bazel/commit/876d48defe325aa6fbe471a9e209c2a740585fd5 https://github.com/bazelbuild/bazel/issues/11497#issuecomment-881698675 https://github.com/bazelbuild/bazel/issues/12780
-rw-r--r--rules/data_binding.bzl24
-rw-r--r--rules/utils.bzl9
2 files changed, 27 insertions, 6 deletions
diff --git a/rules/data_binding.bzl b/rules/data_binding.bzl
index 70df90f..21e2003 100644
--- a/rules/data_binding.bzl
+++ b/rules/data_binding.bzl
@@ -66,15 +66,27 @@ def _gen_sources(ctx, output_dir, java_package, deps, layout_info, data_binding_
args.add("-zipSourceOutput", "true")
args.add("-useAndroidX", "false")
- class_infos = []
- for info in deps:
- class_infos.extend(info.class_infos)
+ if deps:
+ if type(deps[0].class_infos) == "depset":
+ class_infos = depset(transitive = [info.class_infos for info in deps])
+ inputs = depset(direct = [layout_info], transitive = [class_infos])
+ elif type(deps[0].class_infos) == "list":
+ class_infos = []
+ for info in deps:
+ class_infos.extend(info.class_infos)
+ inputs = class_infos + [layout_info]
+ else:
+ fail("Expected list or depset. Got %s" % type(deps[0].class_infos))
+ else:
+ class_infos = []
+ inputs = [layout_info]
+
args.add_all(class_infos, before_each = "-dependencyClassInfoList")
ctx.actions.run(
executable = data_binding_exec,
arguments = ["GEN_BASE_CLASSES", args],
- inputs = class_infos + [layout_info],
+ inputs = inputs,
outputs = [class_info, srcjar],
mnemonic = "GenerateDataBindingBaseClasses",
progress_message = (
@@ -91,8 +103,8 @@ def _setup_dependent_lib_artifacts(ctx, output_dir, deps):
for info in deps:
# Yes, DataBinding requires depsets iterations.
for artifact in (info.transitive_br_files.to_list() +
- info.setter_stores +
- info.class_infos):
+ _utils.list_or_depset_to_list(info.setter_stores) +
+ _utils.list_or_depset_to_list(info.class_infos)):
# short_path might contain a parent directory reference if the
# databinding artifact is from an external repository (e.g. an aar
# from Maven). If that's the case, just remove the parent directory
diff --git a/rules/utils.bzl b/rules/utils.bzl
index 5bd764e..d796371 100644
--- a/rules/utils.bzl
+++ b/rules/utils.bzl
@@ -195,6 +195,14 @@ def _only(collection):
_error("Expected one element, has %s." % len(collection))
return _first(collection)
+def _list_or_depset_to_list(list_or_depset):
+ if type(list_or_depset) == "list":
+ return list_or_depset
+ elif type(list_or_depset) == "depset":
+ return list_or_depset.to_list()
+ else:
+ return _error("Expected a list or a depset. Got %s" % type(list_or_depset))
+
def _copy_file(ctx, src, dest):
if src.is_directory or dest.is_directory:
fail("Cannot use copy_file with directories")
@@ -444,6 +452,7 @@ utils = struct(
sanitize_string = _sanitize_string,
sanitize_java_package = _sanitize_java_package,
hex = _hex,
+ list_or_depset_to_list = _list_or_depset_to_list,
)
log = struct(