Можно ли получить доступ к аспекту из контекста другого аспекта?

Я хотел бы создать правило Базеля, которое принимает в качестве входных данных 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 из реализации аспекта?

0 ответов

Другие вопросы по тегам