Можно ли получить доступ к аспекту из контекста другого аспекта?
Я хотел бы создать правило Базеля, которое принимает в качестве входных данных proto_library и java_proto_library. Он генерирует код Java на основе предоставленного прото, компилирует новый код с предоставленным java_deps и возвращает JavaInfo. Дерево зависимостей для сгенерированного кода является подмножеством дерева зависимостей для прото.
Чтобы избежать дублирования компиляции между различными правилами, я хотел бы реализовать это с использованием аспекта. Однако я не вижу способа вызвать java_common.compile в этом аспекте, потому что я не вижу способа получить правильные зависимости java в контексте аспекта.
Вызов правила должен выглядеть так:
example_library(
name = "foo_example_proto",
deps = [":foo_proto"], # a single proto rule
java_deps = [":foo_java_proto"], # a single java rule corresponding to the proto rule
)
Определение правила:
example_library = rule(
attrs = {
"deps": attr.label_list(
providers = ["proto"],
aspects = [example_aspect],
mandatory = True,
),
"java_deps": attr.label_list(
providers = ["java"],
mandatory = True,
),
},
provides = [JavaInfo],
implementation = _rule_impl,
)
Я полностью понимаю причины, по которым строковые значения допускаются только как атрибуты для параметризованных аспектов, что делает невозможным просто передавать java_deps из правила в аспект. Есть ли другой способ получить правильный набор java_deps из реализации аспекта?