2011-10-18 108 views
9

我正在使用可插入注释处理API处理java注释。是否有可能在里面使用注解方法体?处理方法体内的注释

感谢您的帮助。彼得

回答

4

我想,我找到了解决办法。正如我所想,目前的javac是不可能的。本地注释只是简单的注释,并且不会由可插入注释处理API处理。但在JSR308中有一些有趣的工作,处理支持类型变量,局部变量,注释类型检查和转换等参数的奇妙事物的类型注释,并且看起来,它将被合并到openJDK 8.很好的

+0

JSR 308不直接支持注释处理(尽管它纠正了一个长期的错误,其中局部变量注释未存储在类文件中)。它具有您提及的其他功能,并且它是Java 8的一部分。[Checker Framework](http://checkerframework.org)构建于JSR 308之上,确实提供方便访问者在方法体内处理注释。 – mernst

1

在JSR269,相关的接口将是javax.lang.model.element.VariableElement,这对于访问这样的标注继承getAnnotation(Class<A> annotationType)

for (VariableElement variable : ElementFilter.fieldsIn(methods)) { 
    final AnnotationType annotation = variable.getAnnotation(AnnotationType.class); 
    if (annotation != null) { 
     // ... 
    } 
} 
+2

谢谢你的回答。但'methods'是一组元素的含义,它应该已经包含注释的字段(这使得该方法成为该集合的错误名称)。所以'fieldsIn'不会在方法中返回“fields(=局部变量)”,而只是过滤一组给定的元素。问题在于,API不会给我注释局部变量(作为'process'-method的参数)。现在,它看起来像我必须处理所有(不只是注释)类和手动搜索本地变量注释(虽然我不知道如何)。或者有没有办法使用你的例子? – wrm