JDT - привязки теряются после копирования поддерева
У меня есть код, который удаляет все сложные (не выражения SimpleName) из if
s. Работает нормально и код вроде
if(obj.getSomeInt() > 10)
{
/* body */
}
преобразуется в
boolean value = obj.getSomeInt() > 10;
if(value)
{
/* body */
}
Но прежде чем менять АСТ, позвоните 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
потеряны