Промывка АСТ CDT - PullRequest
       37

Промывка АСТ CDT

0 голосов
/ 14 октября 2018

Я сделал некоторые изменения в AST через ASTRewrite и применил изменения через Change.perform, файл C был корректно обновлен с новыми изменениями (вставка нового узла), но в режиме отладки объект AST не чувствует эти изменения

    ast.getRawSignature(); // C file code as text
    ASTRewrite rewriter = ASTRewrite.create(ast);
    addNewNode(node, ast, rewriter); //Inserting some node
    Change c = rewriter.rewriteAST();
            try {
                c.perform(new NullProgressMonitor());
            } catch (CoreException e) {
                e.printStackTrace();
            }
    /**WHAT I WANT TO FLUSH THE AST HERE TO FEEL THE CHANGES**/
    ast.getRawSignature(); //it still the same C old code and the C file already updated

Мне нужно очистить AST, чтобы почувствовать эти изменения в самом объекте AST. Как мне этого добиться?

1 Ответ

0 голосов
/ 14 октября 2018

После того, как AST изначально создан, он больше не является изменяемым (IASTTranslationUnit.freeze() вызывается для него, и любые дальнейшие попытки вызвать сеттеры на узлах в этом AST завершатся неудачей).

Это означает, что Change.perform() не может выполнить изменения в AST, только в файле.Чтобы получить AST, отражающий изменения, вам нужно создать новый.

...