我一直在使用Java Annotation Processors,效果很好。 现在我想做以下事情,据我所知,这是不可能的。
我有几个实现Builder Pattern的类。比如说
new FooBuilder().doSomething("A").doSomethingElse("B").execute();
使用execute()
方法终止方法调用的“链”至关重要。否则,建造者基本上什么都不做。
所以我想在编译时使用JAP验证某些表达式类型上是否存在execute()
方法。不幸的是,我可以检索到的最细粒度的信息是在方法声明级别而不是表达式。
我想要的是什么?
答案 0 :(得分:2)
Java的标准注释处理器仅在声明时提供回调,例如方法和字段声明。
可以使用注释处理器来分析表达式,但这需要更多的工作。您必须编写一个注释处理器,在每个方法中获取方法的AST(抽象语法树或解析树),然后访问方法中的每个表达式。 AST是特定于编译器的。
执行此操作的两个最着名的项目是Checker Framework和Project Lombok。也许你可以从他们的实现中获取灵感,甚至可以在其中一个上面编写注释处理器。