编程语言
首页 > 编程语言> > java – JDT:将MethodInvocation替换为另一个时缺少分号

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