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

1

Я хочу создать очень распространенный код, используя Sun 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);
}

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

  • 0
    for (;;) { String sbt = reader.readLine(); if (sbt == null) break; ... } возможно в CodeModel. Нет никаких оснований предпочесть этот шаблон, как лучший стиль, наоборот.
  • 0
    Да спасибо. Но я думал, что в CodeModel будет способ достичь этого, в конце концов, он написан Sun.
Показать ещё 1 комментарий
Теги:
sun-codemodel
jcodemodel

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню