JDT - привязки теряются после копирования поддерева

У меня есть код, который удаляет все сложные (не выражения SimpleName) из ifs. Работает нормально и код вроде

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 потеряны

0 ответов

Другие вопросы по тегам