繁体   English   中英

如何使用 javapoet 读取方法参数的注释

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM