2010-05-20 12 views
5

Uso FreeMarker para generar código Java, pero como la mayoría se genera dinámicamente, es difícil controlar la formación del código.Java Code Formatting

Quiero obtener el código con formato. ¿Alguien sabe una lib o algo así como una bonita impresora para código Java?

+0

http://stackoverflow.com/questions/996646/stand-alone-java-code-formatter-beautifier-pretty-printer –

Respuesta

0

Creo que voy a utilizar CodeFormatter de Eclipse, al igual que este chico: http://ssscripting.wordpress.com/2009/06/10/how-to-use-the-eclipse-code-formatter-from-your-code/

ACTUALIZACIÓN: acabaron utilizando jastyle (http://sourceforge.net/projects/jastyle/). He aquí un ejemplo:

public static String formatJavaCode(String code) throws Exception { 
    ASFormatter formatter = new ASFormatter(); 

    // bug on lib's implementation. reported here: http://barenka.blogspot.com/2009/10/source-code-formatter-library-for-java.html 
    code.replace("{", "{\n"); 

    Reader in = new BufferedReader(new StringReader(code)); 
    formatter.setJavaStyle(); 
    in.close(); 
    return FormatterHelper.format(in,formatter); 
} 
1

Puede usar los formateadores de código Eclipse o Jalopy para reformatear el código generado.

+0

pero quiero hacerlo programáticamente. El formateador de código de eclipse se puede usar como una lib independiente? –

+0

Teóricamente sí, pero no va a ser un ejercicio trivial. Pero creo que el formateador de jalopy puede integrarse mucho más fácilmente. –

+0

sí, mi primera implementación se realizó utilizando el formateador de Eclipse. pero terminé intercambiando eso con http: // sourceforge.net/projects/jastyle/debido a su simplicidad. –

1

puede ejecutar un programa de formato como astyle

+0

conoces una lib en java que hace lo mismo. Quiero incluir uno en mi proyecto y pasar todas las cadenas generadas al formateador. –

+1

y hay un puerto de Java: http://sourceforge.net/projects/jastyle/ –

0

puede darle formato al editar el archivo .java en Eclipse. Cuando no lo edita, no importa si está formateado o no.

0

Cambié de FreeMarker a mi propia utilidad de generación de código fuente de Java. Se puede acceder a las fuentes desde aquí: https://source.mysema.com/svn/mysema/projects/codegen/trunk/

Está diseñado de tal manera que solo llame a la API y la salida esté formateada correctamente. Aquí está un ejemplo:

JavaWriter writer = new JavaWriter(new StringWriter()); 
    writer.beginClass("FieldTests"); 
    writer.privateField("String", "privateField"); 
    writer.privateStaticFinal("String", "privateStaticFinal", "\"val\""); 
    writer.protectedField("String","protectedField"); 
    writer.field("String","field"); 
    writer.publicField("String","publicField"); 
    writer.publicStaticFinal("String", "publicStaticFinal", "\"val\""); 
    writer.publicFinal("String", "publicFinalField"); 
    writer.publicFinal("String", "publicFinalField2", "\"val\"");   
    writer.end(); 

que se convierte en

public class FieldTests { 

    private String privateField; 

    private static final String privateStaticFinal = "val"; 

    protected String protectedField; 

    String field; 

    public String publicField; 

    public static final String publicStaticFinal = "val"; 

    public final String publicFinalField; 

    public final String publicFinalField2 = "val"; 

} 

he desarrollado la utilidad codegen para Querydsl que refleja los tipos de dominio Java en los tipos de consulta. Entonces las necesidades de serialización son muy complejas. El uso de plantillas FreeMarker simple no se escalo. Hubo demasiada personalización en la salida, que es mejor controlar en Java que una sintaxis de lenguaje de plantilla.

Esto no es un anuncio del módulo Codegen. Solo quería señalar que para una serialización altamente personalizable, FreeMarker podría no escalar.

+0

Las fuentes se movieron a https://source.mysema.com/svn/mysema/projects/deprecated/codegen/trunk – migu

1

El formato de Google Java funciona perfecto para mí. https://github.com/google/google-java-format

Después de acumulación experto, localice el google-java-formato-0,1-SNAPSHOT.jar en la carpeta de núcleo/objetivo, y tratar java -jar google-java-format-0.1-SNAPSHOT.jar para ver información de uso.

0

El enfoque más simple sería pegar el código en el eclipse java IDE y hacer un ctrl + f en el código seleccionado. que formatearía su código en forma fácilmente legible.