Форматирование кода Java

Я использую FreeMarker, чтобы сгенерировать код Java, но поскольку большая часть из него динамично сгенерирована, трудно управлять формированием кода.

Я хочу получить код, хорошо форматированный. Кто-либо знает lib или что-то как симпатичный принтер для кода Java?

5
задан Cœur 1 January 2017 в 16:10
поделиться

6 ответов

Думаю, я буду использовать Eclipse CodeFormatter, как этот парень: http://ssscripting.wordpress.com/2009 / 06/10 / как использовать-код-форматировщик-затмения из-вашего-кода /

ОБНОВЛЕНИЕ: закончил использование jastyle ( http://sourceforge.net/projects/jastyle/ ). вот пример:

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);
}
0
ответ дан 14 December 2019 в 19:04
поделиться

Вы можете использовать программы форматирования кода Eclipse или Jalopy для переформатирования сгенерированного кода.

1
ответ дан 14 December 2019 в 19:04
поделиться

Вы можете запустить программу форматирования, например astyle

1
ответ дан 14 December 2019 в 19:04
поделиться

Jalopy работает великолепно. Вы можете использовать его CLI для автономного использования. Japlopy Console Plugin

1
ответ дан 14 December 2019 в 19:04
поделиться

Вы можете отформатировать его при редактировании файла .java в Eclipse. Когда вы не редактируете его, не имеет значения, отформатирован он или нет.

0
ответ дан 14 December 2019 в 19:04
поделиться

Я переключился с FreeMarker на свою собственную утилиту генерации исходного кода Java. Источники доступны отсюда: https://source.mysema.com/svn/mysema/projects/codegen/trunk/

Он спроектирован таким образом, что вы просто вызываете API, и вывод правильно отформатирован. Вот пример:

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

Что превращается в

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

}

Я разработал утилиту кодогенерации для Querydsl , которая отображает типы домена Java в типы запросов. Таким образом, потребности в сериализации очень сложны. Использование шаблонов FreeMarker просто не масштабируется.В выводе было слишком много настроек, которые лучше контролировать на Java, чем синтаксис языка шаблонов.

Это не реклама модуля Codegen. Я просто хотел подчеркнуть, что FreeMarker может не масштабироваться для настраиваемой сериализации.

0
ответ дан 14 December 2019 в 19:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: