2010-03-28 15 views
7

Tengo un conjunto de archivos fuente de Java 5 con etiquetas Doclet de estilo antiguo, comentarios y anotaciones. Y en base a eso, me gustaría escribir un generador para otro conjunto de clases de Java.frameworks de generación de código fuente de Java

¿Cuál es la mejor manera de hacerlo? ¿Y hay alguna buena biblioteca independiente para el análisis/generación de código en Java? Se agradece cualquier experiencia compartida en este campo.

Por lo tanto, ahora he encontrado estas:

  • JaxME's Java Source Reflection - parece buena, pero no parece apoyar anotaciones. También no tenía lanzamiento desde 2006.

  • Annogen - utiliza el generador de Doclet de JDK, que tiene algunos errores debajo de 1.5 JDK. Además, no tuvo lanzamientos durante mucho tiempo.

  • Javaparser - parece bueno y bastante reciente, pero solo es compatible con el patrón de visitante para una sola clase, es decir, sin mecanismo de consulta como en los 2 paquetes anteriores.

Respuesta

1

Tanto el IDE NetBeans y Eclipse JDT proyectos tienen una considerable código Java lógica de análisis/generación. No sé cuáles son sus dependencias (es decir, ¿puedes usarlas como libs independientes), pero aparte de eso, echaré un buen vistazo a esas dos: es poco probable que exista una biblioteca de análisis de código java bajo un desarrollo más intensivo y más A hoy.

Actualización:

PMD podría ser de interés, así:

PMD escanea el código fuente de Java y busca problemas potenciales como:

* Possible bugs - empty try/catch/finally/switch statements 
* Dead code - unused local variables, parameters and private methods 
* Suboptimal code - wasteful String/StringBuffer usage 
* Overcomplicated expressions - unnecessary if statements, for loops that could be while loops 
* Duplicate code - copied/pasted code means copied/pasted bugs 

Además, este blog entrada discute varias herramientas de análisis de código estático.

+0

Eclipse tiene JET (Plantillas Java Emmiter), pero no funciona fuera de Eclipse (http://wiki.eclipse.org/JET_FAQ_How_do_I_run_a_JET_transformation_from_Java%3F). –

+0

He actualizado mi respuesta con un par de artículos nuevos. –

+0

He intentado jugar un poco con PMD, pero su API es un poco compleja. Continuaré experimentando y publicando mis resultados. –

4

Si solo necesita generar código Java sintácticamente correcto, consulte Codemodel.

+0

Codemodel es solo un generador de código, y no tiene una herramienta para analizar código java. Aunque +1 para el enlace :). –

+0

Sí, es solo un generador de código, me gustaría recalcarlo una vez más.Muy buena API para mi gusto. – lexicore

+0

Exactamente lo que quiero. – Mike

3

Terminé usando PMD. ejemplo de código se puede ver a continuación:

final Java15Parser parser = new Java15Parser(); 
    final FileInputStream stream = new FileInputStream("VehicleServiceType.java"); 

    final Object c = parser.parse(new InputStreamReader(stream)); 

    final XPath xpath = new BaseXPath("//TypeDeclaration/Annotation/NormalAnnotation[Name/@Image = 'WebService']", 
     new DocumentNavigator()); 

    for (final Iterator iter = xpath.selectNodes(c).iterator(); iter.hasNext();) { 
     final Object obj = iter.next(); 
     // Do code generation based on annotations... 
    } 
+0

Gracias por los comentarios, es bueno saber que puede atravesar una definición de clase con XPath. –