Я использую Eclipse JDT для сборки AST для исходного кода Java, поэтому я могу провести некоторый анализ кода. В настоящее время я хотел бы получить полное название аннотации. Рассмотрим приведенный ниже код:
import javax.persistence.Entity;
@Entity
public class Class1
Если я посещаю этот модуль компиляции, @Entity является аннотацией маркера. И я могу сделать некоторый анализ этого. Однако я не могу получить полностью квалифицированное имя. Я хотел бы получить "javax.persistence.Entiy". Я пробовал несколько способов, но безуспешно.
public boolean visit(MarkerAnnotation node) {
node.getTypeName(); //returns the simple name
node.getTypeName().getFullyQualifiedName();// I thought this would print javax.persistence.Entiy,
// but it only prints "Entity"
node.resolveTypeBinding().getName(); //Prints "Entity"
node.resolveTypeBinding().getBinaryName(); // Prints "Entity"
node.resolveAnnotationBinding().getName(); //Prints "Entity"
return super.visit(node);
}
Я также пытался привести MarkerAnnotation к Annotation, но я все еще не могу получить полностью определенное имя. Во время отладки сеансов я не имел успеха ни при навигации по этому узлу
Мне удалось получить полное имя, используя метод import () объекта CompilationUnit. Я сделал несколько строковых манипуляций на них, объединив с аннотациями простое имя. Тем не менее, я чувствую, что это своего рода хакерство, и мне нужно рассмотреть каждый импорт, даже тот, который не связан с аннотациями.
Я хотел бы получить полное имя непосредственно из узла, то есть из MarkerAnnotation, NormalAnnotation и SingleMemberAnnotation. Есть ли способ добиться этого? Чего мне здесь не хватает?
Заранее спасибо!