JDT:将MethodInvocation替换为另一个时缺少分号

时间:2013-03-01 05:03:40

标签: java eclipse-jdt abstract-syntax-tree

我正在尝试使用Eclipse JDT的AST模型将一个MethodInvocation替换为另一个Log.(i/e/d/w)。举一个简单的例子 - 我正试图通过调用System.out.println()来取代对ASTVisitor的所有来电。我正在使用ASTNode找到有趣的 MethodInvocation并将其替换为新的class StatementVisitor extends ASTVisitor { @Override public boolean visit(ExpressionStatement node) { // If node is a MethodInvocation statement and method // name is i/e/d/w while class name is Log // Code omitted for brevity AST ast = node.getAST(); MethodInvocation newMethodInvocation = ast.newMethodInvocation(); if (newMethodInvocation != null) { newMethodInvocation.setExpression( ast.newQualifiedName( ast.newSimpleName("System"), ast.newSimpleName("out"))); newMethodInvocation.setName(ast.newSimpleName("println")); // Copy the params over to the new MethodInvocation object mASTRewrite.replace(node, newMethodInvocation, null); } } } 节点。以下是代码大纲:

Log.i("Hello There");

然后将此重写保存回原始文档。这一切都很好,但是对于一个小问题 - 原始陈述:

System.out.println("Hello There")

更改为:

{{1}}

注意:语句末尾的分号缺失

问题:如何在新语句的末尾插入分号?

1 个答案:

答案 0 :(得分:4)

找到答案。诀窍是将newMethodInvocation对象包装在ExpressionStatement类型的对象中,如下所示:

ExpressionStatement statement = ast.newExpressionStatement(newMethodInvocation);
mASTRewrite.replace(node, statement, null);

基本上,将代码示例中的最后一行替换为上面两行。