Cómo obtener el cuerpo del método de ExecutableElement
En miAbstractProcessor
Puedo obtener todos los métodos de una clase anotados con alguna anotación, he creado:
List<? extends Element> allElements = processingEnv.getElementUtils().getAllMembers((TypeElement) bean);
List<ExecutableElement> methods = ElementFilter.methodsIn(allElements);
Es posible obtener el cuerpo del método /ExecutableElement
? La API solo parece tratar con la firma y los modificadores.
Probablemente podría usar alguna variación de esta respuesta:https://stackoverflow.com/a/34568708/6095334, para acceder a clases desde el paquete propietario * .sun. **, comocom.sun.tools.javac.tree.JCTree$MethodTree
:
MethodTree methodTree = trees.getTree(executableElement);
dóndetrees
es una instancia decom.sun.source.util.Trees
establecido en el método init () de AbstractProcessor de la siguiente manera:trees = Trees.instance(processingEnv);
Pero estas clases vienen con una advertencia:Esto NO es parte de ninguna API compatible. Si escribe código que depende de esto, lo hace bajo su propio riesgo. Este código y sus interfaces internas están sujetos a cambio o eliminación sin previo aviso.
Espero que sea posible acceder al cuerpo de un método anotado desde el marco de procesamiento de anotaciones más general.