Например, класс Exam
имеет несколько методов с аннотацией.
@Override
public void add() {
int c=12;
}
Как я могу получить имя метода (добавить) с аннотацией @Override
, используя org.eclipse.jdt.core.IAnnotation
?
Например, класс Exam
имеет несколько методов с аннотацией.
@Override
public void add() {
int c=12;
}
Как я могу получить имя метода (добавить) с аннотацией @Override
, используя org.eclipse.jdt.core.IAnnotation
?
IAnnotation сильно вводит в заблуждение, см. документацию.
Чтобы получить методы из класса, которые имеют некоторую аннотацию. Для этого вам нужно перебрать все методы и получить только те, у которых есть такая аннотация.
public static Collection<Method> methodWithAnnotation(Class<?> classType, Class<? extends Annotation> annotationClass) {
if(classType == null) throw new NullPointerException("classType must not be null");
if(annotationClass== null) throw new NullPointerException("annotationClass must not be null");
Collection<Method> result = new ArrayList<Method>();
for(Method method : classType.getMethods()) {
if(method.isAnnotationPresent(annotationClass)) {
result.add(method);
}
}
return result;
}
Вы можете использовать отражение, чтобы сделать это во время выполнения.
public class FindOverrides {
public static void main(String[] args) throws Exception {
for (Method m : Exam.class.getMethods()) {
if (m.isAnnotationPresent(Override.class)) {
System.out.println(m.toString());
}
}
}
}
Изменить. Чтобы сделать это во время разработки/разработки, вы можете использовать описанный метод здесь.
Другое простое решение JDT, использующее AST DOM, может быть следующим:
public boolean visit(SingleMemberAnnotation annotation) {
if (annotation.getParent() instanceof MethodDeclaration) {
// This is an annotation on a method
// Add this method declaration to some list
}
}
Вам также необходимо посетить узлы NormalAnnotation
и MarkerAnnotation
.
org.eclipse.jdt.core.IAnnotation
? - person Apoorv   schedule 11.06.2012