簡體   English   中英

Java注釋處理器,處理順序

[英]Java Annotation Processor, Processing Order

我想知道是否有一種方法可以在類中或至少以確定性順序從上到下處理注釋。

看來情況並非如此,因為Processor類僅提供:

boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv);

RoundEnvironment允許您訪問一Set帶注釋的元素,例如:

Set<? extends Element>  getElementsAnnotatedWith(TypeElement a)

一切都取決於無序集合,這使得處理的順序不可預測。 除了嘗試手動按元素名稱或其他方式排序以外,還有其他解決方法嗎?

正如您所發現的那樣,沒有一種方法可以使用當前接口以指定順序強制處理批注。

這是一種解決方法。 假設您希望處理每個聲明注釋,例如關於字段和方法的注釋。 不要為這些聲明注冊任何回調。 而是為每個類調用注釋處理器。 注釋處理器從javac獲取AST,然后按照您喜歡的順序進行遍歷。 例如, Checker Framework使用此實現策略。

這種變通辦法可能不足以滿足您的需要,因為它仍然以任意順序處理每個類-例如,一個依賴於javac的分階段編譯模型的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM