Java注解处理器,处理顺序

标签 java annotations preprocessor

我想知道是否有一种方法可以在类中从上到下处理注释,或者至少以某种确定的顺序处理注释。

情况似乎并非如此,因为 Processor类仅提供:

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

哪里RoundEnvironment允许您访问带注释元素的 Set,例如:

Set<? extends Element>  getElementsAnnotatedWith(TypeElement a)

一切都是无序集合,这使得处理的顺序不可预测。除了尝试按元素名称或其他内容手动排序之外,还有什么办法吗?

最佳答案

正如您所发现的,没有办法使用当前接口(interface)强制按指定顺序处理注释。

这里有一个解决方法。假设您希望处理每个声明注释,例如字段和方法上的注释。不要为这些声明注册任何回调。相反,为每个类调用注释处理器。注释处理器从 javac 获取 AST,然后按照您喜欢的顺序遍历它。例如,Checker Framework使用此实现策略。

此解决方法可能不足以满足您的需求,因为它仍然以任意顺序处理每个类 - 例如,依赖于 javac 的分阶段编译模型的类。

关于Java注解处理器,处理顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33374527/

相关文章:

java - 使用 System.out.println 的简单程序没有输出

java - android tabhost 的 Activity 生命周期

java - Jfreechart注释消失

python - 如何将项目添加到 collection.Counter?然后将它们分类为 ASC?

java - 如何导出带有图像的 Jar?

java - 是否有等效于 Spring 的 @Value 注释的 JSR-330?

java - PostgreSQL 枚举和 Java 枚举之间的 hibernate 映射

python - Scikit-learn 中 OneHotEncoder 和 KNNImpute 之间的循环

java - 测试 AbstractProcessor(Java 在编译时的注解处理)

java - Java 在不同平台上有何不同?