Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 333842

Summary: The ASTRewriter looses one insertion edits if one both inserts before, and replaces an AST Statement
Product: [Tools] CDT Reporter: Fredrik Berg Kjolstad <fredrikbk>
Component: cdt-refactoringAssignee: Emanuel Graf <emanuel>
Status: RESOLVED FIXED QA Contact: Emanuel Graf <emanuel>
Severity: normal    
Priority: P3 CC: cdtdoug
Version: 8.0   
Target Milestone: 7.0.2   
Hardware: Macintosh   
OS: Mac OS X - Carbon (unsup.)   
Whiteboard:
Attachments:
Description Flags
[PATCH] Bug 333842 Changed the order insert and replace edits are applied
emanuel: iplog+
Test case emanuel: iplog-

Description Fredrik Berg Kjolstad CLA 2011-01-10 03:54:29 EST
Build Identifier: M20100909-0800

I know of no workaround for this bug.

Reproducible: Always

Steps to Reproduce:
Steps to reproduce:

Call the insertBefore and replace methods of the ASTRewrite class with the <statement>. The insertBefore edit will now be lost. For example:

rewriter.insertBefore(statement.getParent(), statement, leadingStatement, editGroup);
rewriter.replace(statement, replaceStatement, editGroup);

It does not matter in which order the insertBefore and replace methods are called.
Comment 1 Fredrik Berg Kjolstad CLA 2011-01-10 04:07:35 EST
Created attachment 186363 [details]
[PATCH] Bug 333842 Changed the order insert and replace edits are applied

The replace edits are now applied after inserts. In cases where one inserts a node B both before/after a node A, and replaces node A with node C this patch prevents node A from being removed before node B can be inserted, thus preserving that edit.
Comment 2 Emanuel Graf CLA 2011-01-12 07:52:22 EST
Created attachment 186617 [details]
Test case
Comment 3 Emanuel Graf CLA 2011-01-12 08:19:50 EST
Fixed in HEAD and 7.0 > 20110112
Comment 4 CDT Genie CLA 2011-01-12 08:23:04 EST
*** cdt cvs genie on behalf of egraf ***
Bug 333842: The ASTRewriter looses one insertion edits if one both inserts before, and replaces an AST Statement
<a  href=https://bugs.eclipse.org/bugs/show_bug.cgi?id=333842>https://bugs.eclipse.org/bugs/show_bug.cgi?id=333842</a>

[*] ReplaceTestSuite.java 1.3 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ReplaceTestSuite.java?root=Tools_Project&r1=1.2&r2=1.3
[+] ReplaceInsertStatementTest.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ReplaceInsertStatementTest.java?root=Tools_Project&revision=1.1&view=markup

[*] ASTModificationHelper.java 1.6 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ASTModificationHelper.java?root=Tools_Project&r1=1.5&r2=1.6

[*] ASTModificationHelper.java 1.4.14.2 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ASTModificationHelper.java?root=Tools_Project&r1=1.4.14.1&r2=1.4.14.2

[*] ReplaceTestSuite.java 1.2.14.1 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ReplaceTestSuite.java?root=Tools_Project&r1=1.2&r2=1.2.14.1
[+] ReplaceInsertStatementTest.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ReplaceInsertStatementTest.java?root=Tools_Project&revision=1.1&view=markup