2014-09-25 42 views
1

我要生成使用Sun的CodeModel如何在括号内强制使用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

'为( ;;){String sbt = reader.readLine();如果(sbt == null)break; ...}在CodeModel中是可行的。没有理由更喜欢这种模式,而是更好的风格,相反。 – 2014-09-25 11:31:30

+0

是的,谢谢。但是我认为在codeModel中会有一种方法可以实现,毕竟它是由Sun编写的。例如 – user3184974 2014-09-25 11:52:11

+0

似乎只有一个赋值语句的子集。我在逗号表达之后很快找到了 - 无济于事。 – 2014-09-25 12:24:12

回答

1

不幸的是我无法找到添加括号的预先存在的方式。你可以,但是,延长JCodeModel加入了特殊JExpression处理这种渲染paraenthesis:

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); 
相关问题