我有一个代码可以从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
的所有绑定都将被取消