| """An rule collecting JavaInfo from java_proto_library's aspect""" |
| |
| load("@rules_java//java/common:java_common.bzl", "java_common") |
| load("@rules_java//java/common:java_info.bzl", "JavaInfo") |
| |
| _Info = provider("Collects JavaInfos", fields = ["aspect_java_infos"]) |
| |
| def _collect_java_info_aspect_impl(target, ctx): |
| aspect_java_infos = [] |
| for dep in ctx.rule.attr.deps: |
| aspect_java_infos += dep[_Info].aspect_java_infos |
| aspect_java_infos.append(target[JavaInfo]) |
| return _Info(aspect_java_infos = aspect_java_infos) |
| |
| _collect_java_info_aspect = aspect( |
| attr_aspects = ["deps"], |
| fragments = ["java"], |
| implementation = _collect_java_info_aspect_impl, |
| required_aspect_providers = [[JavaInfo]], |
| ) |
| |
| def _collect_java_info_impl(ctx): |
| aspect_java_infos = [] |
| for dep in ctx.attr.deps: |
| aspect_java_infos += dep[_Info].aspect_java_infos |
| merged_java_info = java_common.merge(aspect_java_infos) |
| return [merged_java_info] |
| |
| collect_java_info_rule = rule( |
| implementation = _collect_java_info_impl, |
| attrs = { |
| "deps": attr.label_list(aspects = [_collect_java_info_aspect]), |
| }, |
| ) |