java – JDT:将MethodInvocation替换为另一个时缺少分号
作者:互联网
我正在尝试使用Eclipse JDT的AST模型将一个MethodInvocation替换为另一个.举一个简单的例子 – 我试图通过调用System.out.println()来替换对Log.(i / e / d / w)的所有调用.我正在使用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")
注意:语句末尾的分号丢失
问题:如何在新语句的末尾插入分号?
解决方法:
找到了答案.诀窍是将newMethodInvocation对象包装在ExpressionStatement类型的对象中,如下所示:
ExpressionStatement statement = ast.newExpressionStatement(newMethodInvocation);
mASTRewrite.replace(node, statement, null);
基本上,用上面的两行代替我的代码示例中的最后一行.
标签:java,abstract-syntax-tree,eclipse-jdt 来源: https://codeday.me/bug/20190625/1285664.html