我试图通过阅读带注解的方法来生成代码,比如
@MyAnnotation
public static int generatorMethod(@SomeOtherAnnotation Boolean someArg)
我想复制参数列表,因为它们在生成的代码中
如下图所示:
public class MyGeneratedClass{
public int myGeneratedMethod(@SomeOtherAnnotation Boolean someArg) {
//method body
}
}
但是当我尝试从annotationprocessor类中读取带注解的方法时
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。
有没有办法读懂论点的注解?
1条答案
按热度按时间eulz3vhy1#
(这似乎根本不是关于javapoet的,它是用于将详细信息写入新的java文件,而不是读取该类型的详细信息。)
tostring()方法实际上只在调试时才有意义——aptapi的不同实现(例如eclipse的jdt)返回不同的值。打印方法的完整描述不是一种有效的方法,它还需要包含返回类型,不管它是final/abstract/native/public/private/等等。
相反,您可以从元素(executableelement)示例中读取有关该方法的详细信息。如果您试图用javapoet创建方法,那么应该使用methodspec构建器,并将元素中的每个细节传递给构建器以创建方法规范。
如上所述,由于这是一种方法,因此它是一种
ExecutableElement
,它有读取参数(和类型参数)的特定方法,以及检查方法是否为varargs param等。每个参数都将是一个
VariableElement
,也从Element
,这样您就可以阅读上面的注解了。