如何获取具有注释的方法名称?

时间:2012-06-11 12:40:27

标签: java eclipse-plugin eclipse-jdt

例如Exam的类有一些带注释的方法。

@Override
public void add() {
    int c=12;
}

如何使用@Override获取具有org.eclipse.jdt.core.IAnnotation注释的方法名称(添加)?

3 个答案:

答案 0 :(得分:5)

您可以在运行时使用反射。

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());
         }
      }
   }
}

编辑:要在开发时间/设计时间内执行此操作,您可以使用here所述的方法。

答案 1 :(得分:5)

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;
}

答案 2 :(得分:1)

使用AST DOM的另一个简单的JDT解决方案如下:

public boolean visit(SingleMemberAnnotation annotation) {

   if (annotation.getParent() instanceof MethodDeclaration) {
        // This is an annotation on a method
        // Add this method declaration to some list
   }
}

您还需要访问NormalAnnotationMarkerAnnotation个节点。