Как принудительно заключить выражение CodeModel в скобки?

Я хочу сгенерировать очень распространенный код с использованием Sun's CodeModel

while ((sbt = reader.readLine()) != null)
{

}

Однако, когда я пишу:

JWhileLoop whileJsonBuilder = block._while(JExpr
                            .ref("partJsonString").assign(JExpr.ref("reader"))
                            .ne(JExpr._null()));

я получил

while (partJsonString = reader!= null) {
    stringBuilder.append(partJsonString);
}

Обратите внимание, что скобки отсутствуют. Как я могу заставить скобки появляться в коде?

1 ответ

Решение

К сожалению, мне не удалось найти существующий способ добавить скобки. Однако вы можете расширить JCodeModel, чтобы обработать это, добавив специальное JExpression для рендеринга параэнтеза:

public class ParensExpession extends JExpressionImpl{

    private JExpression expression;

    public ParensExpession(JExpression expression) {
        this.expression = expression;
    }

    @Override
    public void generate(JFormatter formatter) {
        formatter.p('(').g(expression).p(')');
    }
}

Включено в ваш код:

JWhileLoop whileJsonBuilder = block._while(
    new ParensExpession(
        JExpr.ref("partJsonString").assign(JExpr.ref("reader"))
    ).ne(JExpr._null()));

дает:

while ((partJsonString = reader)!= null);
Другие вопросы по тегам