代码之家  ›  专栏  ›  技术社区  ›  deathyr

EclipseJavaAST解析器:在if/for/while之前插入语句

  •  1
  • deathyr  · 技术社区  · 9 年前

    我正在使用org.eclipse.jdt解析器。

    我想重写以下代码:

    public void foo(){
    ...
    ...
    if(a>b)
    ...
    ...
    }
    

    在这方面:

    public void foo(){
    ...
    ...
    System.out.println("hello");
    if(a>b)
    ...
    ...
    }
    

    假设ifnode是IF_STATEMENT节点,我可以执行类似的操作:

    Block block = ast.newBlock();
    TextElement siso = ast.newTextElement();
    siso.setText("System.out.println(\"hello\");");
    
    ListRewrite listRewrite = rewriter.getListRewrite(block, Block.STATEMENTS_PROPERTY);    
    listRewrite.insertFirst(ifnode, null);
    listRewrite.insertFirst(siso, null);
    
    rewriter.replace(ifnode, block, null);
    

    但这将在方法的开头插入syso语句,而我希望它正好在if之前。

    有办法实现吗?

    1 回复  |  直到 9 年前
        1
  •  0
  •   Unni Kris Jan    9 年前

    您可以使用以下代码来实现这一点(这将在第一个 IfStatement ) :

    Block block = ast.newBlock();
    TextElement siso = ast.newTextElement();
    siso.setText("System.out.println(\"hello\");");
    
    ListRewrite listRewrite = rewriter.getListRewrite(block,  CompilationUnit.IF_STATEMENT);    
    listRewrite.insertFirst(siso, null);
    
    TextEdit edits = rewriter.rewriteAST(document, null);
    

    您还可以将重写范围限制为 If语句 :

    ASTRewrite rewriter = ASTRewrite.create(ifNode.getAST());
    

    注:代码未测试。如果你发现任何问题,请告诉我。