diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriter.java
index dc19453bfbc..83dd18fdf43 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriter.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriter.java
@@ -12,6 +12,8 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.rewrite.astwriter;
+import java.util.List;
+
import org.eclipse.cdt.core.dom.ast.IASTASMDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement;
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
@@ -144,6 +146,24 @@ public class ASTWriter {
* @return true
if the blank line between the nodes is needed.
*/
public static boolean requireBlankLineInBetween(IASTNode node1, IASTNode node2) {
+ if (node1 instanceof ContainerNode) {
+ List nodes = ((ContainerNode) node1).getNodes();
+ if (!nodes.isEmpty()) {
+ node1 = nodes.get(nodes.size() - 1);
+ }
+ }
+ if (node2 instanceof ContainerNode) {
+ List nodes = ((ContainerNode) node2).getNodes();
+ if (!nodes.isEmpty()) {
+ node2 = nodes.get(0);
+ }
+ }
+ while (node1 instanceof ICPPASTTemplateDeclaration) {
+ node1 = ((ICPPASTTemplateDeclaration) node1).getDeclaration();
+ }
+ while (node2 instanceof ICPPASTTemplateDeclaration) {
+ node2 = ((ICPPASTTemplateDeclaration) node2).getDeclaration();
+ }
if (node1 instanceof ICPPASTVisibilityLabel && node2 instanceof ICPPASTVisibilityLabel) {
return true;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriterVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriterVisitor.java
index 4ff5321d55a..cd1e5c363d9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriterVisitor.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriterVisitor.java
@@ -132,6 +132,7 @@ public class ASTWriterVisitor extends ASTVisitor {
}
public void visit(ASTLiteralNode lit) {
+ insertBlankLineIfNeeded(lit);
scribe.print(lit.getRawSignature());
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java
index cb3d3f9df9f..db3ed821391 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java
@@ -75,7 +75,6 @@ import org.eclipse.jface.text.TextUtilities;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.CompositeChange;
import org.eclipse.ltk.core.refactoring.TextFileChange;
-import org.eclipse.text.edits.InsertEdit;
import org.eclipse.text.edits.MalformedTreeException;
import org.eclipse.text.edits.MultiTextEdit;
import org.eclipse.text.edits.ReplaceEdit;
@@ -559,26 +558,47 @@ public class ChangeGenerator extends ASTVisitor {
if (modifications.isEmpty())
return;
- ASTWriter synthWriter = new ASTWriter();
- synthWriter.setModificationStore(modificationStore);
+ IASTNode prevNode = null;
+ IASTDeclaration[] declarations = tu.getDeclarations();
+ if (declarations.length != 0) {
+ prevNode = declarations[declarations.length - 1];
+ } else {
+ IASTPreprocessorStatement[] preprocessorStatements = tu.getAllPreprocessorStatements();
+ if (preprocessorStatements.length != 0) {
+ prevNode = preprocessorStatements[preprocessorStatements.length - 1];
+ }
+ }
+ int offset = prevNode != null ? getEndOffsetIncludingComments(prevNode) : 0;
+ String source = tu.getRawSignature();
+ int endOffset = skipTrailingBlankLines(source, offset);
- IASTFileLocation targetLocation = tu.getFileLocation();
+ ChangeGeneratorWriterVisitor writer =
+ new ChangeGeneratorWriterVisitor(modificationStore, commentMap);
+ IASTNode newNode = null;
+ for (ASTModification modification : modifications) {
+ boolean first = newNode == null;
+ newNode = modification.getNewNode();
+ if (first) {
+ if (prevNode != null) {
+ writer.newLine();
+ if (ASTWriter.requireBlankLineInBetween(prevNode, newNode)) {
+ writer.newLine();
+ }
+ }
+ }
+ newNode.accept(writer);
+ }
+ if (prevNode != null) {
+ IASTNode nextNode = getNextSiblingOrPreprocessorNode(prevNode);
+ if (nextNode != null && ASTWriter.requireBlankLineInBetween(newNode, nextNode)) {
+ writer.newLine();
+ }
+ }
+
+ String code = writer.toString();
IFile file = FileHelper.getFileFromNode(tu);
MultiTextEdit parentEdit = getEdit(tu, file);
-
- IASTDeclaration[] declarations = tu.getDeclarations();
-
- for (ASTModification modification : modifications) {
- String code = synthWriter.write(modification.getNewNode(), commentMap);
-
- if (declarations.length > 0) {
- IASTDeclaration lastDecl = declarations[declarations.length - 1];
- targetLocation = lastDecl.getFileLocation();
- }
- String lineDelimiter = FileHelper.determineLineDelimiter(tu.getRawSignature());
- parentEdit.addChild(new InsertEdit(endOffset(targetLocation),
- lineDelimiter + lineDelimiter + code));
- }
+ parentEdit.addChild(new ReplaceEdit(offset, endOffset - offset, code));
}
/**
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/GenerateGettersAndSetters.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/GenerateGettersAndSetters.rts
index faac2f0f1cb..9d55f345d59 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/GenerateGettersAndSetters.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/GenerateGettersAndSetters.rts
@@ -1173,7 +1173,6 @@ private:
};
#endif /* A_H_ */
-
//=
#ifndef A_H_
#define A_H_
@@ -1195,9 +1194,7 @@ inline void Person::setId(int id) {
this->id = id;
}
-
#endif /* A_H_ */
-
//!No Methods Separate Definition
//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
//@.config
@@ -1248,7 +1245,6 @@ inline void test::setI(int i) {
this->i = i;
}
-
#endif /* TEST_H_ */
//!Bug 323780 "Generate Getters and Setters..." crashes
//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
@@ -1349,7 +1345,6 @@ public:
//@Test.cxx
//=
-
int Test::getTestField() const {
return testField;
}
@@ -1390,7 +1385,6 @@ public:
//@component_b/implementation/Test.cpp
//=
-
int Test::getTestField() const {
return testField;
}
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ImplementMethod.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ImplementMethod.rts
index df5711bf73b..43703879fe8 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ImplementMethod.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ImplementMethod.rts
@@ -17,8 +17,6 @@ public:
inline bool X::a(int int1) const {
}
-
-
//!Param const and reference and pointer two params
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
@@ -38,8 +36,6 @@ public:
inline bool X::xy(int int1, int i) const {
}
-
-
//!Test if TemplateMethod stays in header
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
@@ -62,15 +58,13 @@ public:
template
inline void A::test() {
}
-
-
//@A.cpp
#include "A.h"
//=
#include "A.h"
-//!class template member functions
+//!Class template member functions
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
filename=A.h
@@ -102,9 +96,7 @@ A::A() {
template
inline void A::test() {
}
-
-
-//!member class
+//!Member class
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
filename=A.h
@@ -144,8 +136,6 @@ public:
inline void A::test() {
}
-
-
//!Method declared in otherwise empty class
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
@@ -165,7 +155,6 @@ public:
//@A.cpp
//=
-
void A::test() {
}
//!Implement in existing namespace
@@ -205,7 +194,7 @@ void ClassInNamespace::test2() {
}
}
-//!virtual method in the middle of con/destructor, without parameters and void return value
+//!Virtual method in the middle of con/destructor, without parameters and void return value
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
filename=A.h
@@ -287,8 +276,6 @@ A::A() {
void A::foo() {
}
-
-
//!Method at beginning, without parameters, void return value and const
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
@@ -348,8 +335,6 @@ A::A() {
int A::foo() {
}
-
-
//!Method with two int parameters
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
@@ -379,8 +364,6 @@ A::A() {
int A::foo(int param1, int param2) {
}
-
-
//!Method defined in header
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
@@ -408,8 +391,6 @@ A::A() {
inline void A::test() {
}
-
-
//!Implement a function at end of source file
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
@@ -426,7 +407,6 @@ void function_with_impl() {
void function() {
}
-
//!Implement with namespace
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
@@ -453,7 +433,6 @@ void Namespace::ClassInNamespace::other_test() {
void Namespace::ClassInNamespace::test() {
}
-
//!Implement function within namespace
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
@@ -524,7 +503,7 @@ int test2() {
}
}
-//!class template member functions with multiple templates
+//!Class template member functions with multiple templates
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
filename=A.h
@@ -538,7 +517,7 @@ public:
};
template
-A::A() {
+A::A() {
}
//=
@@ -550,15 +529,13 @@ public:
};
template
-A::A() {
+A::A() {
}
template
inline void A::test() {
}
-
-
-//!with default parameters
+//!With default parameters
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
filename=A.h
@@ -578,7 +555,7 @@ public:
void Class::test(int param1, int param2, int param3) {
}
-//!static method
+//!Static method
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
filename=A.h
@@ -672,7 +649,6 @@ class TestClass {
inline void nspace::TestClass::testMethod() {
}
-
#endif /* TESTCLASS_H_ */
//!Bug 290110 Source-> Implement Method
@@ -736,8 +712,6 @@ A::~A() {
void n1::n2::A::B::testmethod2() {
}
-
-
//!Bug 337040 - Insert definition in empty implementation file (.cxx)
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
@@ -753,7 +727,6 @@ public:
//@A.cxx
//=
-
void TestClass::foo() {
}
//!Bug 355006 - NPE implementing template function
@@ -773,7 +746,6 @@ void func(T&);
template
inline void func(T&) {
}
-
//!Bug 363111 - Remove explicit in constructor definition
//#org.eclipse.cdt.ui.tests.refactoring.implementmethod.ImplementMethodRefactoringTest
//@.config
@@ -789,6 +761,5 @@ public:
//@A.cpp
//=
-
TestClass::TestClass() {
}
\ No newline at end of file
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsClassToHeader.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsClassToHeader.rts
index 30546140280..f84ae165492 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsClassToHeader.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsClassToHeader.rts
@@ -18,7 +18,6 @@ inline void A::member() {
// return comment
return;
}
-
//!ClassToHeaderTopCommentOrder
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -41,7 +40,6 @@ class A {
inline void A::member() {
return;
}
-
//!ClassToHeaderCatchComment
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -68,7 +66,6 @@ try {
catch (int i) {
// catch comment
}
-
//!ClassToHeaderTopComment
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -89,7 +86,6 @@ class A {
inline void A::member() {
return;
}
-
//!ClassToHeaderTemplateTopComment
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -114,7 +110,6 @@ template
inline T A::member() {
return T();
}
-
//!ClassToHeaderTrailingComment
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -133,7 +128,6 @@ class A {
inline void A::member() {
return;
} // Trailing comment
-
//!ClassToHeaderTrailingCommentWithTryBlock
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsImplToHeader.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsImplToHeader.rts
index 628d3debd6b..64a295bb055 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsImplToHeader.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsImplToHeader.rts
@@ -93,7 +93,6 @@ void /*$*/member/*$$*/() {
//@A.h
//=
-
void member() {
// body comment
return;
@@ -115,7 +114,6 @@ void /*$*/member/*$$*/() {
//@A.h
//=
-
// Top comment
void member() {
// body comment
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCtorDtorRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCtorDtorRefactoring.rts
index ffef1312d81..f4832deaec6 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCtorDtorRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCtorDtorRefactoring.rts
@@ -34,7 +34,6 @@ public:
inline A::A(int x, int y) :
a(x), b(y) {
}
-
//!TestConstructorToggleInHeaderToImplementation
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -85,7 +84,6 @@ int main() {
A::A(int x, int y) :
a(x), b(y) {
}
-
//!TestConstructorToggleInImplementationToClass
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -154,7 +152,6 @@ public:
inline A::~A() {
}
-
//!TestDestructorToggleInHeaderToImplementation
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -199,7 +196,6 @@ int main() {
A::~A() {
}
-
//!TestDestructorToggleInImplementationToClass
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleDefaultParameterRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleDefaultParameterRefactoring.rts
index 7a1eeb54057..8c7d3b7c23a 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleDefaultParameterRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleDefaultParameterRefactoring.rts
@@ -20,7 +20,6 @@ class A {
inline void A::member(int a, int b) {
return;
}
-
//!TestDefaultParameterInitializerInHeaderToImplementation
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -57,7 +56,6 @@ int main() {
void A::member(int a, int b) {
return;
}
-
//!TestDefaultParameterInitializerInImplementationToClass
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleFreeFunction.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleFreeFunction.rts
index 7000fe3ac22..d17f1fb9365 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleFreeFunction.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleFreeFunction.rts
@@ -54,7 +54,6 @@ int main() {
int freeFunction(int* a, int& b) {
return 42;
}
-
//!TestFreeFunctionToggleFromImplementationToHeaderWithDeclaration
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -172,7 +171,6 @@ try {
}
catch (std::exception& e) {
}
-
//!TestFreeFunction
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -260,4 +258,3 @@ void freefunction() {
}
}
-
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNamespaceRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNamespaceRefactoring.rts
index e002c3cffde..ec4baa9d2ce 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNamespaceRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNamespaceRefactoring.rts
@@ -1,4 +1,4 @@
-//!TestSimpleNamespaceInClassToInHeader
+//!Test simple namespace in class to in header
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -30,7 +30,7 @@ inline void A::foo() {
}
}
-//!TestSimpleNamespaceInHeaderToImplementationWithinNSDefinition
+//!Test simple namespace in header to implementation within namespace definition
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -80,8 +80,7 @@ void A::foo() {
}
}
-
-//!TestSimpleNamespaceInHeaderToImplementationWithNSDefinitionInImpl
+//!Test simple namespace in header to implementation with namespace definition in implementation
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -134,7 +133,7 @@ void A::foo() {
}
}
-//!TestSimpleNamespaceInHeaderToImplementationWithNamespaceQualifiedName
+//!Test simple namespace in header to implementation with namespace qualified name
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -184,7 +183,6 @@ void A::foo() {
}
}
-
//!TestSimpleNamespaceFromImplementationToInHeader
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNestedRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNestedRefactoring.rts
index 3e53d81da6d..c2e2372d430 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNestedRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNestedRefactoring.rts
@@ -24,7 +24,6 @@ class A {
inline void A::B::member(int a, int b) {
return;
}
-
//!TestNestedClassInHeaderToImplementation
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -65,7 +64,6 @@ int main() {
void A::B::member(int a, int b) {
return;
}
-
//!TestNestedClassInImplementationToClass
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleSelection.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleSelection.rts
index 8551a6ca67e..0518f02bad3 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleSelection.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleSelection.rts
@@ -1,4 +1,4 @@
-//!TestZeroLengthSelection
+//!Test zero length selection
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -16,8 +16,7 @@ class A {
inline void A::member() {
return;
}
-
-//!TestSubstringSelection
+//!Test substring selection
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -35,8 +34,7 @@ class A {
inline void A::member() {
return;
}
-
-//!TestBodySelection
+//!Test body selection
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -54,8 +52,7 @@ class A {
inline void A::member() {
return;
}
-
-//!TestBodySelectionWithConfusingName
+//!Test body selection with confusing name
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -75,8 +72,7 @@ inline void A::member() {
int abcd = 42;
return;
}
-
-//!TestLeftBorderSelection
+//!Test left border selection
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -94,8 +90,7 @@ class A {
inline void A::member() {
return;
}
-
-//!TestRightBorderSelection
+//!Test right border selection
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -113,8 +108,7 @@ class A {
inline void A::member() {
return;
}
-
-//!TestOverlappingSelection
+//!Test overlapping selection
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -132,4 +126,3 @@ class A {
inline void A::member() {
return;
}
-
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleSimpleFunctionRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleSimpleFunctionRefactoring.rts
index aaec086264d..b15bc2123c5 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleSimpleFunctionRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleSimpleFunctionRefactoring.rts
@@ -1,4 +1,4 @@
-//!TestSimpleFunctionInClassToInHeader
+//!Test simple function in class to in header
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -28,8 +28,7 @@ private:
inline int A::function() {
return 0;
}
-
-//!TestSimpleFunctionInHeaderToImplementation
+//!Test simple function in header to implementation
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -73,7 +72,6 @@ int main() {
int A::function() {
return 0;
}
-
//!TestSimpleFunctionInImplementationToInClass
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTemplateRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTemplateRefactoring.rts
index af12e2930d3..b3249535f8d 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTemplateRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTemplateRefactoring.rts
@@ -1,4 +1,4 @@
-//!TestTemplateFunctionInClassToInHeader
+//!Test template function in class to in header
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -27,8 +27,7 @@ template
inline T A::B::member() {
return T();
}
-
-//!TestTemplateFunctionInHeaderToInClass
+//!Test template function in header to in class
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -57,7 +56,7 @@ class A {
}
};
};
-//!TestTemplateFunctionInHeaderToInClassWithTemplateSelected
+//!Test template function in header to in class with template selected
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -78,8 +77,7 @@ template
inline T A::foo() {
return T();
}
-
-//!TestComplexTemplateFunctionFromInClassToInheader
+//!Test complex template function from in class to in header
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
@@ -105,8 +103,7 @@ template
inline void A::foo(const U& u, const V& v) {
return;
}
-
-//!TestComplexTemplateFunctionFromInHeaderToInClass
+//!Test complex template function from in header to in class
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
filename=A.h
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTryCatchRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTryCatchRefactoring.rts
index d5777071018..1aa25624edb 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTryCatchRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTryCatchRefactoring.rts
@@ -30,7 +30,6 @@ try {
catch (std::exception& e1) {
return;
}
-
//!TestTryCatchFromInHeaderToImplementation
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -77,7 +76,6 @@ try {
catch (std::exception& e1) {
return;
}
-
//!TestTryCatchFromInImplementationToClass
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -160,7 +158,6 @@ catch (std::exception& e1) {
catch (std::exception& e2) {
return;
}
-
//!TestMultipleTryCatchFromInHeaderToImplementation
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -213,7 +210,6 @@ catch (std::exception& e1) {
catch (std::exception& e2) {
return;
}
-
//!TestMultipleTryCatchFromInImplementationToClass
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
@@ -263,4 +259,4 @@ class A {
catch (std::exception& e2) {
return;
}
-};
\ No newline at end of file
+};
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleVirtualFunction.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleVirtualFunction.rts
index a0af0150b1b..5be3a7a7612 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleVirtualFunction.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleVirtualFunction.rts
@@ -18,7 +18,6 @@ class A {
inline int A::foo() {
return 0;
}
-
//!TestVirtualSpecifierFromInHeaderToImplementation
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//%CPP
@@ -52,7 +51,6 @@ int main() {
int A::foo() {
return 0;
}
-
//!TestVirtualSpecifierFromImplementationToHeader
//#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
//@.config
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFileCreator.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFileCreator.java
index 36d091d4cde..0e8480badae 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFileCreator.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFileCreator.java
@@ -6,8 +6,8 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
- * Contributors:
- * Martin Schwab & Thomas Kallenberg - initial API and implementation
+ * Contributors:
+ * Martin Schwab & Thomas Kallenberg - initial API and implementation
******************************************************************************/
package org.eclipse.cdt.internal.ui.refactoring.togglefunction;
@@ -29,7 +29,6 @@ import org.eclipse.cdt.internal.ui.refactoring.Container;
import org.eclipse.cdt.internal.ui.refactoring.CreateFileChange;
public class ToggleFileCreator {
-
private static final String EMPTY_STRING = ""; //$NON-NLS-1$
private static final String H = ".h"; //$NON-NLS-1$
private ToggleRefactoringContext context;
@@ -71,7 +70,7 @@ public class ToggleFileCreator {
CreateFileChange change;
String filename = getNewFileName();
try {
- change = new CreateFileChange(filename, new Path(getPath()+filename),
+ change = new CreateFileChange(filename, new Path(getPath() + filename),
EMPTY_STRING, context.getSelectionFile().getCharset());
change.perform(new NullProgressMonitor());
} catch (CoreException e) {
@@ -85,6 +84,7 @@ public class ToggleFileCreator {
}
final Container answer = new Container();
Runnable r = new Runnable() {
+ @Override
public void run() {
Shell shell = CUIPlugin.getDefault().getWorkbench().getWorkbenchWindows()[0].getShell();
String functionname;
@@ -103,7 +103,7 @@ public class ToggleFileCreator {
}
public String getIncludeStatement() {
- return "#include \"" + ToggleNodeHelper.getFilenameWithoutExtension(getNewFileName()) + ".h\""; //$NON-NLS-1$//$NON-NLS-2$
+ return "#include \"" + ToggleNodeHelper.getFilenameWithoutExtension(getNewFileName()) + ".h\"\n"; //$NON-NLS-1$//$NON-NLS-2$
}
private String getNewFileName() {
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFromInHeaderToImplementationStrategy.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFromInHeaderToImplementationStrategy.java
index 36eba0e5d17..701396beaaa 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFromInHeaderToImplementationStrategy.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFromInHeaderToImplementationStrategy.java
@@ -7,7 +7,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * Martin Schwab & Thomas Kallenberg - initial API and implementation
+ * Martin Schwab & Thomas Kallenberg - initial API and implementation
******************************************************************************/
package org.eclipse.cdt.internal.ui.refactoring.togglefunction;
@@ -57,7 +57,6 @@ import org.eclipse.cdt.internal.ui.refactoring.Container;
import org.eclipse.cdt.internal.ui.refactoring.ModificationCollector;
public class ToggleFromInHeaderToImplementationStrategy implements IToggleRefactoringStrategy {
-
private IASTTranslationUnit impl_unit;
private ToggleRefactoringContext context;
private TextEditGroup infoText;
@@ -68,16 +67,16 @@ public class ToggleFromInHeaderToImplementationStrategy implements IToggleRefact
this.context = context;
}
+ @Override
public void run(ModificationCollector collector) {
- if(!newFileCheck()) {
+ if (!newFileCheck()) {
return;
}
// newFileCheck();
ICPPASTFunctionDefinition newDefinition = getNewDefinition();
if (context.getDeclaration() != null) {
removeDefinitionFromHeader(collector);
- }
- else {
+ } else {
replaceDefinitionWithDeclaration(collector);
}
@@ -97,8 +96,7 @@ public class ToggleFromInHeaderToImplementationStrategy implements IToggleRefact
implRewrite = implRewrite.insertBefore(impl_unit.getTranslationUnit(),
null, insertionParent, infoText);
}
- }
- else {
+ } else {
insertionParent = impl_unit.getTranslationUnit();
}
@@ -115,25 +113,6 @@ public class ToggleFromInHeaderToImplementationStrategy implements IToggleRefact
private void copyCommentsToNewFile(ICPPASTFunctionDefinition newDefinition, final ASTRewrite newRewriter,
final ASTRewrite oldRewriter) {
newDefinition.accept(new ASTVisitor(true) {
-
- private void copy(IASTNode node) {
- copyComments(node, newRewriter, oldRewriter, CommentPosition.leading);
- copyComments(node, newRewriter, oldRewriter, CommentPosition.trailing);
- copyComments(node, newRewriter, oldRewriter, CommentPosition.freestanding);
- }
-
- private void copyComments(IASTNode node, ASTRewrite newRewriter, ASTRewrite oldRewriter,
- CommentPosition pos) {
- if (node.getNodeLocations().length > 0 && node.getNodeLocations()[0] instanceof IASTCopyLocation) {
- IASTCopyLocation copyLoc = (IASTCopyLocation) node.getNodeLocations()[0];
- List comments = oldRewriter.getComments(copyLoc.getOriginalNode(), pos);
- for (IASTComment comment : comments) {
- newRewriter.addComment(node, comment, pos);
- }
- }
-
- }
-
@Override
public int visit(IASTName name) {
copy(name);
@@ -241,20 +220,36 @@ public class ToggleFromInHeaderToImplementationStrategy implements IToggleRefact
copy(designator);
return super.visit(designator);
}
+
+ private void copy(IASTNode node) {
+ copyComments(node, newRewriter, oldRewriter, CommentPosition.leading);
+ copyComments(node, newRewriter, oldRewriter, CommentPosition.trailing);
+ copyComments(node, newRewriter, oldRewriter, CommentPosition.freestanding);
+ }
+
+ private void copyComments(IASTNode node, ASTRewrite newRewriter, ASTRewrite oldRewriter,
+ CommentPosition pos) {
+ if (node.getNodeLocations().length > 0 && node.getNodeLocations()[0] instanceof IASTCopyLocation) {
+ IASTCopyLocation copyLoc = (IASTCopyLocation) node.getNodeLocations()[0];
+ List comments = oldRewriter.getComments(copyLoc.getOriginalNode(), pos);
+ for (IASTComment comment : comments) {
+ newRewriter.addComment(node, comment, pos);
+ }
+ }
+ }
});
-
}
private boolean newFileCheck() {
impl_unit = context.getTUForSiblingFile();
- if (this.impl_unit == null) {
+ if (impl_unit == null) {
ToggleFileCreator filecreator = new ToggleFileCreator(context, ".cpp"); //$NON-NLS-1$
if (filecreator.askUserForFileCreation(context)) {
filecreator.createNewFile();
impl_unit = filecreator.loadTranslationUnit();
includenode = new ASTLiteralNode(filecreator.getIncludeStatement());
return true;
- }else {
+ } else {
return false;
}
}
@@ -269,8 +264,7 @@ public class ToggleFromInHeaderToImplementationStrategy implements IToggleRefact
return ToggleNodeHelper.getAncestorOfType(toquery, ICPPASTNamespaceDefinition.class);
}
- private IASTNode findInsertionPoint(IASTNode insertionParent,
- IASTTranslationUnit unit) {
+ private IASTNode findInsertionPoint(IASTNode insertionParent, IASTTranslationUnit unit) {
IASTFunctionDeclarator declarator = context.getDeclaration();
if (unit == null) {
unit = context.getDefinitionUnit();
@@ -283,34 +277,33 @@ public class ToggleFromInHeaderToImplementationStrategy implements IToggleRefact
return insertion_point;
}
- private void restoreLeadingComments(
- ICPPASTFunctionDefinition newDefinition, ASTRewrite newRewriter, ModificationCollector collector) {
+ private void restoreLeadingComments(ICPPASTFunctionDefinition newDefinition,
+ ASTRewrite newRewriter, ModificationCollector collector) {
ASTRewrite rw = collector.rewriterForTranslationUnit(context.getDefinitionUnit());
Listcomments = rw.getComments(context.getDefinition(), CommentPosition.leading);
- if(comments != null) {
+ if (comments != null) {
for (IASTComment comment : comments) {
newRewriter.addComment(newDefinition, comment, CommentPosition.leading);
- if(context.getDeclaration() != null) {
+ if (context.getDeclaration() != null) {
rw.remove(comment, infoText);
}
}
}
}
- private void replaceDefinitionWithDeclaration(
- ModificationCollector collector) {
- IASTSimpleDeclaration newdeclarator =
- ToggleNodeHelper.createDeclarationFromDefinition(context.getDefinition());
+ private void replaceDefinitionWithDeclaration(ModificationCollector collector) {
+ IASTSimpleDeclaration newdeclarator =
+ ToggleNodeHelper.createDeclarationFromDefinition(context.getDefinition());
ASTRewrite rewrite = collector.rewriterForTranslationUnit(context.getDefinitionUnit());
rewrite.replace(context.getDefinition(), newdeclarator, infoText);
}
private ICPPASTFunctionDefinition getNewDefinition() {
ICPPASTFunctionDefinition newDefinition =
- ToggleNodeHelper.createFunctionSignatureWithEmptyBody(
- context.getDefinition().getDeclSpecifier().copy(CopyStyle.withLocations), context
- .getDefinition().getDeclarator().copy(CopyStyle.withLocations), context
- .getDefinition().copy(CopyStyle.withLocations));
+ ToggleNodeHelper.createFunctionSignatureWithEmptyBody(
+ context.getDefinition().getDeclSpecifier().copy(CopyStyle.withLocations),
+ context.getDefinition().getDeclarator().copy(CopyStyle.withLocations),
+ context.getDefinition().copy(CopyStyle.withLocations));
newDefinition.getDeclSpecifier().setInline(false);
newDefinition.setBody(context.getDefinition().getBody().copy(CopyStyle.withLocations));
if (newDefinition instanceof ICPPASTFunctionWithTryBlock) {
@@ -328,8 +321,8 @@ public class ToggleFromInHeaderToImplementationStrategy implements IToggleRefact
if (parent instanceof ICPPASTNamespaceDefinition) {
ICPPASTNamespaceDefinition ns = (ICPPASTNamespaceDefinition) parent;
if (new_definition.getDeclarator().getName() instanceof ICPPASTQualifiedName) {
- ICPPASTQualifiedName qname =
- (ICPPASTQualifiedName) new_definition.getDeclarator().getName();
+ ICPPASTQualifiedName qname =
+ (ICPPASTQualifiedName) new_definition.getDeclarator().getName();
ICPPASTQualifiedName qname_new = new CPPASTQualifiedName();
boolean start = false;
for(IASTName partname: qname.getNames()) {
@@ -346,11 +339,9 @@ public class ToggleFromInHeaderToImplementationStrategy implements IToggleRefact
}
}
- private CPPASTNamespaceDefinition createNamespace(
- ICPPASTNamespaceDefinition parent_namespace) {
+ private CPPASTNamespaceDefinition createNamespace(ICPPASTNamespaceDefinition parent_namespace) {
CPPASTNamespaceDefinition insertionParent = new CPPASTNamespaceDefinition(
-parent_namespace.getName()
- .copy(CopyStyle.withLocations));
+ parent_namespace.getName().copy(CopyStyle.withLocations));
insertionParent.setParent(impl_unit);
return insertionParent;
}
@@ -363,19 +354,19 @@ parent_namespace.getName()
private IASTNode searchNamespaceInImplementation(final IASTName name) {
final Container result = new Container();
- this.impl_unit.accept(
-new ASTVisitor() {
- {
- shouldVisitNamespaces = true;
- }
- @Override
- public int visit(ICPPASTNamespaceDefinition namespaceDefinition) {
- if (name.toString().equals(namespaceDefinition.getName().toString())) {
- result.setObject(namespaceDefinition);
- return PROCESS_ABORT;
- }
- return super.visit(namespaceDefinition);
- }
+ this.impl_unit.accept(new ASTVisitor() {
+ {
+ shouldVisitNamespaces = true;
+ }
+
+ @Override
+ public int visit(ICPPASTNamespaceDefinition namespaceDefinition) {
+ if (name.toString().equals(namespaceDefinition.getName().toString())) {
+ result.setObject(namespaceDefinition);
+ return PROCESS_ABORT;
+ }
+ return super.visit(namespaceDefinition);
+ }
});
return result.getObject();
}