Commit 7879aa5f authored by Lorenz Haas's avatar Lorenz Haas Committed by Nikolai Kosjar

CppEditor: Fix added newlines for GenerateGetterSetter quick fix

As a nice side effect superfluous new lines - introduced by quick fixes
that are using InsertionPointLocator::methodDefinition - vanished.

Task-number: QTCREATORBUG-13872
Change-Id: Ib3df2b2acbc22449f16f4444092a57ae93d53d35
Reviewed-by: default avatarJochen Becher <jochen_becher@gmx.de>
Reviewed-by: default avatarNikolai Kosjar <nikolai.kosjar@theqtcompany.com>
parent 03212d6e
......@@ -567,6 +567,7 @@ void CppEditorPlugin::test_quickfix_data()
" int getIt() const;\n"
" void setIt(int value);\n"
"};\n"
"\n"
"int Something::getIt() const\n"
"{\n"
" return it;\n"
......@@ -1098,7 +1099,6 @@ void CppEditorPlugin::test_quickfix_data()
<< CppQuickFixFactoryPtr(new InsertDefFromDecl) << original
<< original + _(
"\n"
"\n"
"Foo::Foo()\n"
"{\n\n"
"}\n"
......@@ -1772,6 +1772,7 @@ void CppEditorPlugin::test_quickfix_GenerateGetterSetter_basicGetterWithPrefixAn
expected =
"#include \"file.h\"\n"
"namespace SomeNamespace {\n"
"\n"
"int Something::getIt() const\n"
"{\n"
" return it;\n"
......@@ -1780,7 +1781,8 @@ void CppEditorPlugin::test_quickfix_GenerateGetterSetter_basicGetterWithPrefixAn
"void Something::setIt(int value)\n"
"{\n"
" it = value;\n"
"}\n\n"
"}\n"
"\n"
"}\n";
testDocuments << QuickFixTestDocument::create("file.cpp", original, expected);
......@@ -2040,7 +2042,6 @@ void CppEditorPlugin::test_quickfix_InsertDefFromDecl_headerSource_basic2()
"\n"
"int x;\n"
"\n"
"\n"
"void f()\n"
"{\n"
"\n"
......@@ -2070,7 +2071,6 @@ void CppEditorPlugin::test_quickfix_InsertDefFromDecl_headerSource_basic3()
" Foo()@;\n"
"};\n";
expected = original +
"\n"
"\n"
"Foo::Foo()\n"
"{\n\n"
......@@ -2142,7 +2142,6 @@ void CppEditorPlugin::test_quickfix_InsertDefFromDecl_headerSource_namespace2()
"using namespace N;\n"
;
expected = original +
"\n"
"\n"
"Foo::Foo()\n"
"{\n\n"
......@@ -2304,7 +2303,6 @@ void CppEditorPlugin::test_quickfix_InsertDefFromDecl_respectWsInOperatorNames1(
" Foo &operator =();\n"
"};\n"
"\n"
"\n"
"Foo &Foo::operator =()\n"
"{\n"
"\n"
......@@ -2328,7 +2326,6 @@ void CppEditorPlugin::test_quickfix_InsertDefFromDecl_respectWsInOperatorNames2(
" Foo &operator=();\n"
"};\n"
"\n"
"\n"
"Foo &Foo::operator=()\n"
"{\n"
"\n"
......@@ -2512,7 +2509,6 @@ void CppEditorPlugin::test_quickfix_InsertDefFromDecl_findImplementationFile()
expected =
"#include \"file.h\"\n"
"\n"
"\n"
"void Foo::baz()\n"
"{\n"
"\n"
......@@ -2551,7 +2547,6 @@ void CppEditorPlugin::test_quickfix_InsertDefFromDecl_unicodeIdentifier()
;
expected = original;
expected +=
"\n"
"\n"
"void Foo::" TEST_UNICODE_IDENTIFIER "()\n"
"{\n"
......@@ -3372,7 +3367,6 @@ void CppEditorPlugin::test_quickfix_MoveFuncDefOutside_MemberFuncToCpp()
expected =
"#include \"file.h\"\n"
"\n"
"\n"
"int Foo::number() const\n"
"{\n"
" return 5;\n"
......@@ -3537,7 +3531,6 @@ void CppEditorPlugin::test_quickfix_MoveFuncDefOutside_MemberFuncToCppNS()
expected =
"#include \"file.h\"\n"
"\n"
"\n"
"int MyNs::Foo::number() const\n"
"{\n"
" return 5;\n"
......@@ -3581,7 +3574,6 @@ void CppEditorPlugin::test_quickfix_MoveFuncDefOutside_MemberFuncToCppNSUsing()
"#include \"file.h\"\n"
"using namespace MyNs;\n"
"\n"
"\n"
"int Foo::number() const\n"
"{\n"
" return 5;\n"
......@@ -3643,7 +3635,6 @@ void CppEditorPlugin::test_quickfix_MoveFuncDefOutside_FreeFuncToCpp()
expected =
"#include \"file.h\"\n"
"\n"
"\n"
"int number() const\n"
"{\n"
" return 5;\n"
......@@ -3681,7 +3672,6 @@ void CppEditorPlugin::test_quickfix_MoveFuncDefOutside_FreeFuncToCppNS()
expected =
"#include \"file.h\"\n"
"\n"
"\n"
"int MyNamespace::number() const\n"
"{\n"
" return 5;\n"
......@@ -3723,7 +3713,6 @@ void CppEditorPlugin::test_quickfix_MoveFuncDefOutside_CtorWithInitialization1()
expected =
"#include \"file.h\"\n"
"\n"
"\n"
"Foo::Foo() : a(42), b(3.141) {}\n"
;
testDocuments << QuickFixTestDocument::create("file.cpp", original, expected);
......@@ -3766,7 +3755,6 @@ void CppEditorPlugin::test_quickfix_MoveFuncDefOutside_CtorWithInitialization2()
expected =
"#include \"file.h\"\n"
"\n"
"\n"
"Foo::Foo() : member(2)\n"
"{\n"
"}\n"
......@@ -3833,7 +3821,6 @@ void CppEditorPlugin::test_quickfix_MoveFuncDefOutside_respectWsInOperatorNames1
" Foo &operator =();\n"
"};\n"
"\n"
"\n"
"Foo &Foo::operator =() {}\n"
;
......@@ -3855,7 +3842,6 @@ void CppEditorPlugin::test_quickfix_MoveFuncDefOutside_respectWsInOperatorNames2
" Foo &operator=();\n"
"};\n"
"\n"
"\n"
"Foo &Foo::operator=() {}\n"
;
......@@ -4292,12 +4278,11 @@ void CppEditorPlugin::test_quickfix_MoveAllFuncDefOutside_MemberFuncToCpp()
expected =
"#include \"file.h\"\n"
"\n"
"\n"
"int Foo::numberA() const\n"
"{\n"
" return 5;\n"
"}\n"
"\n\n"
"\n"
"int Foo::numberB() const\n"
"{\n"
" return 5;\n"
......@@ -4328,12 +4313,12 @@ void CppEditorPlugin::test_quickfix_MoveAllFuncDefOutside_MemberFuncOutside()
" int f1();\n"
" int f2() const;\n"
"};\n"
"\n\n"
"\n"
"int Foo::f1()\n"
"{\n"
" return 1;\n"
"}\n"
"\n\n"
"\n"
"int Foo::f2() const\n"
"{\n"
" return 2;\n"
......@@ -4375,7 +4360,7 @@ void CppEditorPlugin::test_quickfix_MoveAllFuncDefOutside_classWithBaseClass()
"class Foo : public Bar {\n"
" int f1();\n"
"};\n"
"\n\n"
"\n"
"int Foo::f1()\n"
"{\n"
" return 1;\n"
......@@ -4403,7 +4388,7 @@ void CppEditorPlugin::test_quickfix_MoveAllFuncDefOutside_ignoreMacroCode()
" FAKE_Q_OBJECT\n"
" int f1();\n"
"};\n"
"\n\n"
"\n"
"int Foo::f1()\n"
"{\n"
" return 1;\n"
......
......@@ -3046,26 +3046,30 @@ public:
const QString implementationGetterTypeAndNameString = oo.prettyType(
getterType, QString::fromLatin1("%1::%2").arg(classString, m_getterName));
const QString implementationGetter = QString::fromLatin1(
"\n%1()%2\n"
"%1()%2\n"
"{\n"
"return %3;\n"
"}\n")
"}")
.arg(implementationGetterTypeAndNameString)
.arg(isStatic ? QString() : QLatin1String(" const"))
.arg(m_variableString);
const QString implementationSetter = QString::fromLatin1(
"\nvoid %1::%2(%3)\n"
"void %1::%2(%3)\n"
"{\n"
"%4 = %5;\n"
"}\n")
"}")
.arg(classString).arg(m_setterName)
.arg(paramString).arg(m_variableString)
.arg(paramName);
QString implementation;
if (generateGetter())
implementation += implementationGetter;
if (generateSetter())
if (generateSetter() && !fullySpecifiedType.isConst()) {
if (!implementation.isEmpty())
implementation += QLatin1String("\n\n");
implementation += implementationSetter;
}
// Create and apply changes
ChangeSet currChanges;
......@@ -3076,6 +3080,7 @@ public:
if (sameFile) {
InsertionLocation loc = insertLocationForMethodDefinition(m_symbol, false, refactoring,
currentFile->fileName());
implementation = loc.prefix() + implementation + loc.suffix();
currChanges.insert(currentFile->position(loc.line(), loc.column()), implementation);
} else {
CppRefactoringChanges implRef(snapshot());
......@@ -3083,6 +3088,7 @@ public:
ChangeSet implChanges;
InsertionLocation loc = insertLocationForMethodDefinition(m_symbol, false,
implRef, implFileName);
implementation = loc.prefix() + implementation + loc.suffix();
const int implInsertPos = implFile->position(loc.line(), loc.column());
implChanges.insert(implInsertPos, implementation);
implFile->setChangeSet(implChanges);
......
......@@ -617,8 +617,16 @@ QList<InsertionLocation> InsertionPointLocator::methodDefinition(Symbol *declara
} else {
QTC_ASSERT(column, return result);
prefix = QLatin1String("\n\n");
int firstNonSpace = targetFile->position(line, column);
prefix = QLatin1String("\n\n");
// Only one new line if at the end of file
if (const QTextDocument *doc = targetFile->document()) {
if (firstNonSpace + 1 == doc->characterCount() /* + 1 because zero based index */
&& doc->characterAt(firstNonSpace) == QChar::ParagraphSeparator) {
prefix = QLatin1String("\n");
}
}
QChar c = targetFile->charAt(firstNonSpace);
while (c == QLatin1Char(' ') || c == QLatin1Char('\t')) {
++firstNonSpace;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment