2014-09-02 2 views
1

Анализатор Бережливость имеет определение для «аннотацию»:Что такое «аннотация» в Apache Thrift и для чего он используется?

https://git-wip-us.apache.org/repos/asf?p=thrift.git;a=blob;f=compiler/cpp/src/thrifty.yy;h=da5c562f9d7adf87b21e4c3ae30fbb9657e0c8b3;hb=HEAD#l85

Что это означает для использования, и эта информация может что они содержат доступ в сгенерированном клиента и/или кода сервера ?

+0

Могу ли я спросить, почему вы спрашиваете? Есть ли конкретная проблема, которую вы планируете разрешать аннотации или просто любопытство? – JensG

+0

Если было интересно, можно ли, например, подключить произвольные атрибуты к структурам, которые клиентский код мог проверить во время выполнения ... например, '(validation.regex =" /.*@.*\.com/ ")' или что-то типа того. – BCG

+0

Не то, что я знаю, но Java не является моей областью знаний. Вы можете отправить этот вопрос в список рассылки. Стоит попробовать. – JensG

ответ

2

Аннотации используются для связывания метаданных с типами, определенными в файле определения Thrift (".thrift"). The AnnotationThrift.test file в исходном дистрибутиве есть примеры.

Вот, например, является struct с аннотациями (в скобках):

struct foo { 
    1: i32 bar (presence = "required"); 
    2: i32 baz (presence = "manual", cpp.use_pointer = "",); 
    3: i32 qux; 
    4: i32 bop; 
} (
    cpp.type = "DenseFoo", 
    python.type = "DenseFoo", 
    java.final = "", 
    annotation.without.value, 
) 

Глядя на код, кажется, аннотаций только когда-либо используются для обеспечения директивы компилятора —, например, компилятор C++ использует аннотацию cpp.type, если она присутствует, до override a type's name в сгенерированном коде.

Я не вижу ничего, что предполагает аннотации сами когда-либо воспроизведены или доступные для сгенерированного кода, хотя, если такой код делает существует, то он был бы расположен в compiler/cpp/src/generate/.

2

Как отметил Саймон, аннотации можно представить как точки расширения основного языка IDL для управления некоторыми аспектами генерации кода. Они довольно часто зависят от языка, но не ограничиваются этим. В некоторых случаях аннотации впоследствии стали частью IDL. Другое дело, что аннотации все еще довольно плохо документированы (я здесь добрый).

может ли доступ к информации, к которой они относятся, сгенерированным кодом клиента и/или сервера?

Это зависит от аннотации и от того, что вы подразумеваете под «доступом». Если вы измените базовый класс с помощью аннотации или если вы создаете класс Java final, информация, конечно же, присутствует в сгенерированном коде.

+1

Извините, я должен был быть более ясным из того, что я имел в виду, «доступ» ... например, Java также имеет аннотации, они могут быть прочитаны через отражение во время выполнения; Мне было интересно, кодирует ли какой-либо из генераторов информацию аннотации в сгенерированные структуры, но ответы, похоже, предполагают, что они этого не делают. Благодаря! – BCG

1

Мы использовали аннотации с использованием . Примеры включают в себя Thrift linter, где аннотации выборочно отключают проверки.

Смежные вопросы