[英]How to read Annotation of a method argument using javapoet
我正在尝试通过阅读带注释的方法来生成代码,例如
@MyAnnotation
public static int generatorMethod(@SomeOtherAnnotation Boolean someArg)
我想复制 arguments 的列表,因为它们在生成的代码中
如下所示:
public class MyGeneratedClass{
public int myGeneratedMethod(@SomeOtherAnnotation Boolean someArg) {
//method body
}
}
但是当我尝试从 annotationProcessor class 读取带注释的方法时
for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(MyAnnotation.class)) {
messager.printMessage(
Diagnostic.Kind.NOTE, String.format("Annotated Element as string: %s",
annotatedElement.toString()));
}
它将值打印为
Annotated Element as string: generatorMethod(java.lang.Boolean)
它没有引用我可以用来创建 ParameterSpec 的参数注释。
有没有办法阅读参数的注释?
(这似乎根本与 JavaPoet 无关,它用于将详细信息写入新的 java 文件,而不是读取类型的详细信息。)
Element.toString() 方法实际上只对调试有意义 - APT api(例如 Eclipse 的 JDT)的不同实现返回不同的值。 打印方法的完整描述不是一种有效的方法,它还需要包括返回类型,无论是 final/abstract/native/public/private/等。
相反,您可以从 Element(它是一个 ExecutableElement)实例中阅读有关该方法的详细信息。 如果您尝试使用 JavaPoet 创建方法,则应使用 MethodSpec 构建器,并将 Element 中的每个细节传递到构建器以创建方法规范。
如上所述,由于这是一个方法,它是一个ExecutableElement
,它具有读取参数(和类型参数)的特定方法,以及检查该方法是否为可变参数等。
然后,每个参数将是一个VariableElement
,它也从Element
扩展而来,因此您可以阅读其上的注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.