Java注释处理器,处理顺序

时间:2015-10-27 17:21:06

标签: java annotations preprocessor

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

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

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

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

Set<? extends Element>  getElementsAnnotatedWith(TypeElement a)

所有东西都是无序集合,这使得处理顺序变得不可预测。除了尝试按元素名称或其他东西手动排序之外,还有这个吗?

1 个答案:

答案 0 :(得分:2)

正如您所发现的那样,使用当前接口无法以指定的顺序强制处理注释。

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

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