В настоящее время я пишу процессор аннотации, который будет генерировать новый исходный код. Этот Процессор изолирован от самого приложения, поскольку это шаг в построении проекта, и я отделил всю сборную систему от приложения.Обработка аннотации неизвестна Аннотации
Здесь возникает проблема, так как я хочу обработать аннотацию, созданную в приложении. Назовите его CustomAnnotation. с полным именем com.company.api.annotation.CustomAnnotation.
В процессоре я могу искать аннотации по полному имени, что действительно приятно. Теперь я, кажется, могу получить методы, поле и т. Д., Которые аннотируются, поскольку я могу вызвать функцию getElementsAnnotatedWith с ТипElement вместо Класс.
Теперь у нашей CustomAnnotation есть поля и переменные в нем, и обычно я получаю сам аннотацию следующим образом: Class annotation = Element.getAnnotation(Class)
Но я не могу использовать это, поскольку CustomAnnotation недоступен как объект класса. (Конечно, он не известен процессору) Я попытался использовать TypeMirror и другие доступные вещи, но ничего не работает.
Кто-нибудь знает, как получить Аннотацию, чтобы прочитать ее ценности?
EDIT: Давайте посмотрим на эту реализацию:
@SupportedAnnotationTypes("com.company.api.annotation.CustomAnnotation")
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class CustomProcessor extends AbstractProcessor
{
public CustomProcessor()
{
super();
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv)
{
TypeElement test = annotations.iterator().next();
for (Element elem : roundEnv.getElementsAnnotatedWith(test))
{
//Here is where I would get the Annotation element itself to
//read the content of it if I can use the Annotation as Class Object.
SupportedAnnotationTypes generated = elem.getAnnotation(SupportedAnnotationTypes.class);
}
}
Однако я не должен использовать CustomAnnotation.class, так как не существует в этой среде. Как я могу это сделать, не владея объектом класса?
Не уверен, что вы просите ... Вы не можете сделать Class.forName () первый? – GhostCat
Что случилось с ['Element.getAnnotationMirrors()'] (https://docs.oracle.com/javase/8/docs/api/javax/lang/model/element/Element.html#getAnnotationMirrors--), затем [AnnotationMirror.getElementValues () '] (https://docs.oracle.com/javase/8/docs/api/javax/lang/model/element/AnnotationMirror.html#getElementValues--)? – Holger
Спасибо @Holger, что это то, что мне нужно! Я не нашел вопроса с этой проблемой и не знал, что getAnnotationMirrors будет тем, что мне нужно. – Nico