2010-05-20 14 views
5

Sto utilizzando FreeMarker per generare codice java, ma poiché la maggior parte di esso è generato dinamicamente è difficile controllare la formazione del codice.Formattazione codice Java

Voglio ottenere il codice ben formattato. Qualcuno sa una lib o qualcosa come una bella stampante per il codice java?

+0

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

risposta

0

Credo che userò CodeFormatter di Eclipse, proprio come questo ragazzo: http://ssscripting.wordpress.com/2009/06/10/how-to-use-the-eclipse-code-formatter-from-your-code/

UPDATE: finito per usare jastyle (http://sourceforge.net/projects/jastyle/). ecco un esempio:

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

È possibile utilizzare i formattatori del codice Eclipse o Jalopy per riformattare il codice generato.

+0

ma voglio farlo programmaticamente. il formatore di codice di eclipse può essere usato come lib autonomo? –

+0

Teoricamente sì, ma non sarà un esercizio banale. Ma credo che il formatter di jalopy possa essere incorporato molto più facilmente. –

+0

sì, la mia prima implementazione è stata eseguita utilizzando il formattatore di Eclipse. ma ho finito per scambiarlo con http: // sourceforge.net/projects/jastyle/per la sua semplicità. –

1

è possibile eseguire un programma di formattazione come astyle

+0

conosci una lib in java che fa lo stesso. Voglio che uno includa nel mio progetto e passi tutte le stringhe generate al formattatore. –

+1

e c'è una porta java: http://sourceforge.net/projects/jastyle/ –

0

è possibile formattare quando si modifica il file .java in Eclipse. Quando non lo si modifica, non importa se è formattato o meno.

0

Sono passato da FreeMarker alla mia utilità di generazione del codice sorgente Java. Le fonti sono accessibili da qui: https://source.mysema.com/svn/mysema/projects/codegen/trunk/

È progettato in modo tale che basta chiamare l'API e l'output è formattato correttamente. Ecco un esempio:

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(); 

che si trasforma in

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"; 

} 

ho sviluppato il programma di utilità per il codegen Querydsl che rispecchia tipi di dominio Java in tipi di query. Quindi le esigenze di serializzazione sono molto complesse. L'uso semplice dei modelli di FreeMarker non è stato ridimensionato. C'era troppa personalizzazione nell'output, che è meglio controllare in Java rispetto alla sintassi del linguaggio template.

Questo non è un annuncio per il modulo Codegen. Volevo solo sottolineare che per la serializzazione altamente personalizzabile FreeMarker potrebbe non essere scalabile.

+0

Le fonti sono state spostate su https://source.mysema.com/svn/mysema/projects/deprecated/codegen/trunk – migu

1

Il formato java di Google funziona perfettamente per me. https://github.com/google/google-java-format

Dopo esperto di costruire, individuare il google-java-formato-0,1-SNAPSHOT.jar nella cartella di base/target, e cercare java -jar google-java-format-0.1-SNAPSHOT.jar per vedere le informazioni di utilizzo.

0

L'approccio più semplice sarebbe quello di incollare il codice nell'IDE di java eclipse e fare un ctrl + f sul codice selezionato. che formerebbe il tuo codice in forma facilmente leggibile.

Problemi correlati