JDT - 复制子树

时间:2015-10-14 10:07:12

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

我有一个代码可以从if中删除所有复杂(不是SimpleName表达式)。它工作正常,代码如

if(obj.getSomeInt() > 10)
{
/* body */
}

转换为

boolean value = obj.getSomeInt() > 10;
if(value)
{
/* body */
}

但是在更改AST之前,对resolveBinding()的调用和resolveTypeBinding() obj的调用会得到正确的结果,但在我获得两个调用的null之后。那是设计的吗?如果是,请告诉我如何解决这个问题?

我的代码:

if(node instanceof IfStatement)
{
    IfStatement stmt = (IfStatement) node;
    AST ast = node.getAST();
    Expression expr = stmt.getExpression();
    if(!(expr instanceof SimpleName))
    {
        SimpleName varName = ast.newSimpleName(generateVariableName());

        VariableDeclarationFragment vdf = ast.newVariableDeclarationFragment();
        vdf.setName((SimpleName) ASTNode.copySubtree(ast, varName));
        vdf.setInitializer((Expression) ASTNode.copySubtree(ast, expr));

        VariableDeclarationStatement vds = ast.newVariableDeclarationStatement(vdf);
        vds.setType(resolveType(expr));
        list.add(i++, vds);

        stmt.setExpression(varName);
    }
}

在此操作之前,expr的所有绑定都将被取消

0 个答案:

没有答案