java code-generation abstract-syntax-tree eclipse-jdt

java - Cómo agregar un fragmento de código al cuerpo del método con JDT/AST



code-generation abstract-syntax-tree (2)

Estoy tratando de generar código fuente Java con JDT / AST. Ahora tengo MethodDeclaration y quiero agregar un fragmento de código (de otra fuente) al cuerpo del método. El fragmento de código puede contener cualquier código Java, incluso código sintácticamente no válido . Simplemente no puedo encontrar la manera de hacer esto.

Con JCodeModel usaría el método JBlock # directStatement (String s) .

¿Hay alguna manera de hacer esto con JDT / AST?


Ya que tiene un árbol bien formado para el resto de la aplicación, y desea insertar texto no bien formado en un lugar en particular, prácticamente no puede hacerlo con los mecanismos estándar de inserción de nodos de árbol.

Lo que importa es que produzca texto para el texto de programa válido con el fragmento insertado en el lugar correcto. En algún lugar debe haber una lógica que imprima el AST como texto. Lo que debe hacer es solicitar que el AST se imprima como texto y capturarlo en medio de ese proceso, en el punto preciso necesario, para insertar su texto arbitrario.

Nuestro kit de herramientas de reingeniería de software DMS tiene ganchos de nodos de impresión para entrar / salir en su bonita impresora para permitir que suceda este tipo de cosas.

Si tales cosas no existen en JDT / AST, puede intentar modificar su bonita impresora para darle ese gancho. Alternativamente, podría considerar la modificación de JDT / AST agregando otro tipo de nodo de árbol que no forme parte del conjunto estándar, que simplemente contenga texto arbitrario pero actúe como un nodo de método. Presumiblemente, cada nodo controla lo que se imprime; luego podría definir la impresión bonita para ese nodo de árbol, para que produzca su texto.

Una solución final realmente difícil: inserte un AST perfectamente válido donde irá el texto arbitrario, que contenga en algún lugar un identificador falso con un nombre único, por ejemplo, ZZZ. Luego, imprima el AST en una cadena y procese la cadena para reemplazar los árboles falsos que contienen el nombre único con el texto del usuario real.