Migrated the sources aspect to using a modern provider.
PiperOrigin-RevId: 206369816
diff --git a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
index 8e7ab7a..a79fb40 100644
--- a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
+++ b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
@@ -113,6 +113,28 @@
"swiftmodule",
]
+TulsiSourcesAspectInfo = provider(
+ fields = {
+ "transitive_info_files": """
+The file actions used to save this rule's info and that of all of its transitive dependencies as
+well as any Info plists required for extensions.
+""",
+ "inheritable_attributes": """
+The inheritable attributes of this rule, expressed as a dict instead of a struct to allow easy
+joining.
+""",
+ "transitive_attributes": """
+Transitive attributes that should be applied to every rule that depends on this rule.
+""",
+ "artifacts": """
+Artifacts from this rule.
+""",
+ "filtering_info": """
+Filtering information for this target. Only for test target, otherwise is None.
+""",
+ },
+)
+
TulsiOutputAspectInfo = provider(
fields = {
"transitive_generated_files": "Depset of tulsi generated files.",
@@ -357,7 +379,7 @@
dep
for dep in _getattr_as_list(rule_attr, attr_name)
if type(dep) == "Target" and
- (hasattr(dep, "tulsi_info_files") or TulsiOutputAspectInfo in dep)
+ (TulsiSourcesAspectInfo in dep or TulsiOutputAspectInfo in dep)
]
def _collect_dependency_labels(rule, filter, attr_list):
@@ -568,15 +590,14 @@
rule_attr = _get_opt_attr(rule, "attr")
filter = _filter_for_rule(rule)
- tulsi_info_files = depset()
+ transitive_info_files = depset()
transitive_attributes = dict()
for attr_name in _TULSI_COMPILE_DEPS:
deps = _collect_dependencies(rule_attr, attr_name)
for dep in _filter_deps(filter, deps):
- if hasattr(dep, "tulsi_info_files"):
- tulsi_info_files += dep.tulsi_info_files
- if hasattr(dep, "transitive_attributes"):
- transitive_attributes += dep.transitive_attributes
+ if TulsiSourcesAspectInfo in dep:
+ transitive_info_files += dep[TulsiSourcesAspectInfo].transitive_info_files
+ transitive_attributes += dep[TulsiSourcesAspectInfo].transitive_attributes
artifacts = _get_opt_attr(target, "files")
if artifacts:
@@ -777,32 +798,23 @@
# Create an action to write out this target's info.
output = ctx.new_file(target.label.name + ".tulsiinfo")
ctx.file_action(output, info.to_json())
- tulsi_info_files += depset([output])
+ transitive_info_files += depset([output])
if infoplist:
- tulsi_info_files += [infoplist]
+ transitive_info_files += [infoplist]
artifacts_depset = depset(artifacts) if artifacts else depset()
- return struct(
- # Matches the --output_groups on the bazel commandline.
- output_groups = {
- "tulsi-info": tulsi_info_files,
- },
- # The file actions used to save this rule's info and that of all of its
- # transitive dependencies.
- tulsi_info_files = tulsi_info_files,
- # The inheritable attributes of this rule, expressed as a dict instead of
- # a struct to allow easy joining.
- inheritable_attributes = inheritable_attributes,
- # Transitive info that should be applied to every rule that depends on
- # this rule.
- transitive_attributes = transitive_attributes,
- # Artifacts from this rule.
- artifacts = artifacts_depset,
- # Filtering information for this target.
- filtering_info = _target_filtering_info(ctx),
- )
+ return [
+ OutputGroupInfo(tulsi_info = transitive_info_files),
+ TulsiSourcesAspectInfo(
+ transitive_info_files = transitive_info_files,
+ inheritable_attributes = inheritable_attributes,
+ transitive_attributes = transitive_attributes,
+ artifacts = artifacts_depset,
+ filtering_info = _target_filtering_info(ctx),
+ ),
+ ]
def _collect_bundle_info(target):
"""Returns Apple bundle info for the given target, None if not a bundle."""
@@ -883,7 +895,9 @@
kept_deps = []
for dep in deps:
- info = dep.filtering_info
+ info = None
+ if TulsiSourcesAspectInfo in dep:
+ info = dep[TulsiSourcesAspectInfo].filtering_info
# Only attempt to filter targets that support filtering.
# test_suites in a test_suite are not filtered, but their
diff --git a/src/TulsiGenerator/BazelAspectInfoExtractor.swift b/src/TulsiGenerator/BazelAspectInfoExtractor.swift
index 62ecf3f..983d14a 100644
--- a/src/TulsiGenerator/BazelAspectInfoExtractor.swift
+++ b/src/TulsiGenerator/BazelAspectInfoExtractor.swift
@@ -229,7 +229,7 @@
// Keep this consistent with bazel_build.py.
"--aspects",
"@tulsi//tulsi:tulsi_aspects.bzl%\(aspect)",
- "--output_groups=tulsi-info,-_,-default", // Build only the aspect artifacts.
+ "--output_groups=tulsi_info,-_,-default", // Build only the aspect artifacts.
])
arguments.append(contentsOf: targets)