【发布时间】:2016-07-29 11:06:16
【问题描述】:
在我的AbstractProcessor 中,我能够从一个带有一些注释的类中获取所有方法,我创建了:
List<? extends Element> allElements = processingEnv.getElementUtils().getAllMembers((TypeElement) bean);
List<ExecutableElement> methods = ElementFilter.methodsIn(allElements);
是否可以获取方法的主体/ExecutableElement? API 似乎只处理签名和修饰符。
我可能会使用这个答案的一些变体:https://stackoverflow.com/a/34568708/6095334,来访问专有 *.sun.** 包中的类,例如 com.sun.tools.javac.tree.JCTree$MethodTree:
MethodTree methodTree = trees.getTree(executableElement);
其中trees 是在AbstractProcessor 的init() 方法中设置的com.sun.source.util.Trees 的一个实例,如下所示:trees = Trees.instance(processingEnv);
但是这些类带有一个警告:这不是任何受支持的 API 的一部分。如果您编写依赖于此的代码,则风险自负。此代码及其内部接口如有更改或删除,恕不另行通知。
我希望可以从更通用的注释处理框架中访问带注释的方法的主体。
【问题讨论】:
标签: java methods annotation-processing