ASTRewrite的修改不是递归的

时间:2013-10-18 11:54:16

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

我正在使用ASTRewrite来转换它:

new Targect1().asd(a);

进入这个:

Targect1 temp1 = new Targect1();
temp1.asd(a);

这是我的代码:

String temp_identifier = getNextVariableId();
VariableDeclarationFragment fragment = node.getAST().newVariableDeclarationFragment();
fragment.setName(node.getAST().newSimpleName(temp_identifier));
ClassInstanceCreation creation = (ClassInstanceCreation)rewrite.createCopyTarget(node.getExpression()));
fragment.setInitializer(creation);
VariableDeclarationStatement previous_declaration = node.getAST().newVariableDeclarationStatement(fragment);
rewrite.replace(node, previous_declaration,null);

它还没有完成,但是当检查片段的值时,它会在里面得到methoddeclaration,但是没有关于类型的内容。当我检查时显示:

temp1 = new MISSING()

1 个答案:

答案 0 :(得分:0)

ASTRewrite.createCopyTarget(...)仅创建一个占位符节点。在您致电ASTRewrite.rewriteAST()之前,不会创建表达式的实际副本。这就是您在检查new MISSING()时看到fragment的原因。

如果您想强制立即复制,则必须使用ASTNode.copySubtree(AST target, ASTNode node)