簡體   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