如何将CodeModel表达式强制括在括号中?

时间:2014-09-25 11:05:28

标签: java sun-codemodel jcodemodel

我想使用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);
}

请注意,缺少括号。 如何强制括号出现在代码中?

1 个答案:

答案 0 :(得分:1)

不幸的是,我无法找到预先存在的添加括号的方法。但是,你可以通过添加一个特殊的JExpression来渲染paenthesis来扩展JCodeModel来处理这个问题:

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