Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-dev] Two Phase Refactoring

So the key is the change.perform which reflects the change in mainAST? 

On Dec 4, 2016 2:44 PM, "sim0s" <gerasimu_s@xxxxxxxxxxx> wrote:
Hi Krishna,

Basically, if you are working in the AST level, i.e., without exposing any
UI, Sergey's suggestion should work. This is what I am working too at the
moment.

Have a look in this minimal (toy) example. I hope it helps you.

       protected void addNewFunction(String name){
                 try {
                         //find node of interest
                         IASTNode node = ASTUtilities.findNodeInTree(mainAST, 1,
Class.forName("org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator"),
"getName", "test");

                        if (node != null && node instanceof IASTFunctionDeclarator){
                                //get the rewriter
                                ASTRewrite rewriter             = ASTRewrite.create(mainAST);
                                //get the factory
                                ICPPNodeFactory nodeFactory =
(ICPPNodeFactory)mainAST.getASTNodeFactory();

                                //create a new ASTFunctionDefinition
                                IASTNode n      = nodeFactory.newFunctionDefinition(

((IASTFunctionDefinition)node.getParent()).getDeclSpecifier().copy(CopyStyle.withoutLocations),

nodeFactory.newFunctionDeclarator(nodeFactory.newName(name)),

((IASTFunctionDefinition)node.getParent()).getBody().copy(CopyStyle.withoutLocations)
                                                  );

                                 //specify its position in the ast
                                rewriter.insertBefore(node.getParent(),
node.getParent().getChildren()[0], n, null);

                                //ask the rewriter to suggest a change
                                Change c = rewriter.rewriteAST();

                                //make the change
                                c.perform(new NullProgressMonitor());
                        }
                }
                catch (ClassNotFoundException e) {
                        e.printStackTrace();
                }
        }



--
View this message in context: http://eclipse.1072660.n5.nabble.com/Two-Phase-Refactoring-tp186513p186549.html
Sent from the Eclipse CDT - Development mailing list archive at Nabble.com.
_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/cdt-dev

Back to the top