Может ли API подключаемого процессора аннотаций получать комментарии исходного кода? - PullRequest
10 голосов
/ 28 октября 2011

Я использую подключаемый API обработки аннотаций в Java6 + для автоматического создания некоторых XML-файлов развертывания.Часть этих файлов XML содержит описание объекта.Описание ВСЕГДА имеет тот же контент, что и Javadoc, связанный с самим классом.Я мог бы заставить комментарий быть полем аннотации @Block, но это дублирует информацию.Есть ли способ во время обработки аннотации получить содержимое комментария класса / типа?

В этом примере я хочу получить «Хорошее описание моего блока» во время обработки аннотации.

Ответы [ 3 ]

16 голосов
/ 28 октября 2011

Кажется, я всегда нахожу ответ сразу после публикации на SO.

Для дальнейшего использования, вот решение

public class CustomAnnotationProcessor extends AbstractAnnotationProcessor
{
    public boolean process(...)
    {

        // use the protected member, processingEnv

        String comment = processingEnv.getElementUtils().getDocComment(anyElement);


    }
}
0 голосов
/ 28 октября 2011

API обработки аннотаций использует классы в пакетах javax.lang.model(.*).Эти языковые конструкции модели и упомянутые модели должны быть сгенерированы во время компиляции.Поскольку компилятор предназначен для игнорирования комментариев и документации, в этих пакетах нет ничего, и я не ожидал, что это даст вам доступ к comments / doc.

Я не являюсьОпределенно, как средство javadoc выполняет свою работу, может быть, это может помочь.

Ответ Капепа выглядит интересным, но имейте в виду, что он использует материал из пакета com.sun.*, который зависит от реализации.Если вы абсолютно не уверены, что ресурсы, предлагаемые для вашей среды процессора аннотирования, реализованы с использованием этих классов, и вы можете безопасно отключать интерфейсы, лучше не использовать это.В лучшем случае это было бы хрупкое решение.

РЕДАКТИРОВАТЬ: кроме того, я также использую пользовательские аннотации + процессор для генерации метаданных в формате XML для проводки, проверки и т. Д. И мне также нужны описания.Поэтому я оставляю JavaDoc для целей программирования и деталей, которые могут быть интересны кому-то, непосредственно использующему класс в коде, при этом имея некоторый ключ описания в аннотации (или значение по умолчанию, основанное на имени класса / других значениях аннотации, если ничего не указано), который можно использовать для получения описания из некоторого файла ресурсов.Описание предназначено для «конечного пользователя» и ориентировано на высокоуровневые вещи, а не на особенности кода.Это имеет дополнительное преимущество облегчения интернационализации.Я не уверен, что это будет вам полезно, но есть мои два цента.

0 голосов
/ 28 октября 2011

Существует getDocComment , который звучит так, как будто он должен возвращать комментарий.

Обновление: теперь оно перемещено в элементы .

...