diff --git a/src/plugins/cppeditor/quickfixes/cppquickfix_test.cpp b/src/plugins/cppeditor/quickfixes/cppquickfix_test.cpp index f487764101b..8107ce0baf4 100644 --- a/src/plugins/cppeditor/quickfixes/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/quickfixes/cppquickfix_test.cpp @@ -35,10 +35,10 @@ namespace CppEditor { namespace Internal { namespace Tests { -QList singleDocument(const QByteArray &original, - const QByteArray &expected) +QList singleDocument( + const QByteArray &original, const QByteArray &expected, const QByteArray fileName) { - return {CppTestDocument::create("file.cpp", original, expected)}; + return {CppTestDocument::create(fileName, original, expected)}; } BaseQuickFixTestCase::BaseQuickFixTestCase(const QList &testDocuments, diff --git a/src/plugins/cppeditor/quickfixes/cppquickfix_test.h b/src/plugins/cppeditor/quickfixes/cppquickfix_test.h index b1990629706..b6d3030ef31 100644 --- a/src/plugins/cppeditor/quickfixes/cppquickfix_test.h +++ b/src/plugins/cppeditor/quickfixes/cppquickfix_test.h @@ -86,8 +86,8 @@ public: int operationIndex = 0); }; -QList singleDocument(const QByteArray &original, - const QByteArray &expected); +QList singleDocument( + const QByteArray &original, const QByteArray &expected, const QByteArray fileName = "file.cpp"); } // namespace Tests } // namespace Internal diff --git a/src/plugins/cppeditor/quickfixes/movefunctiondefinition.cpp b/src/plugins/cppeditor/quickfixes/movefunctiondefinition.cpp index ef970f952fa..8a1429aeba9 100644 --- a/src/plugins/cppeditor/quickfixes/movefunctiondefinition.cpp +++ b/src/plugins/cppeditor/quickfixes/movefunctiondefinition.cpp @@ -107,9 +107,23 @@ public: Scope *scopeAtInsertPos = m_toFile->cppDocument()->scopeAt(l.line(), l.column()); // construct definition - const QString funcDec = inlinePrefix(m_toFile->filePath(), [this] { return m_type == MoveOutside; }) - + definitionSignature(m_operation, funcAST, m_fromFile, m_toFile, - scopeAtInsertPos); + const QString inlinePref = inlinePrefix(m_toFile->filePath(), [this] { + return m_type == MoveOutside; + }); + QString funcDec = definitionSignature(m_operation, funcAST, m_fromFile, m_toFile, + scopeAtInsertPos); + QString input = funcDec; + int inlineIndex = 0; + const QRegularExpression templateRegex("template\\s*<[^>]*>"); + while (input.startsWith("template")) { + const QRegularExpressionMatch match = templateRegex.match(input); + if (match.hasMatch()) { + inlineIndex += match.captured().size() + 1; + input = input.mid(match.captured().size() + 1); + } + } + funcDec.insert(inlineIndex, inlinePref); + QString funcDef = prefix + funcDec; const int startPosition = m_fromFile->endOf(funcAST->declarator); const int endPosition = m_fromFile->endOf(funcAST); @@ -1182,11 +1196,11 @@ private slots: "class Foo { void fu@nc(); };\n" "\n" "template\n" - "void Foo::func() {}\n"; + "inline void Foo::func() {}\n"; ; MoveFuncDefOutside factory; - QuickFixOperationTest(singleDocument(original, expected), &factory); + QuickFixOperationTest(singleDocument(original, expected, "file.h"), &factory); } void testMemberFunctionTemplate()