Можно ли получить доступ к аспекту из контекста другого аспекта? - PullRequest
0 голосов
/ 28 февраля 2019

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

...