diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h index 3dbc5b2c589..77ddd7bae2f 100644 --- a/src/plugins/cppeditor/cppeditorplugin.h +++ b/src/plugins/cppeditor/cppeditorplugin.h @@ -130,6 +130,7 @@ private slots: void test_quickfix_ConvertQt4Connect_connectOutOfClass(); void test_quickfix_ConvertQt4Connect_connectWithinClass_data(); void test_quickfix_ConvertQt4Connect_connectWithinClass(); + void test_quickfix_ConvertQt4Connect_differentNamespace(); void test_quickfix_InsertDefFromDecl_afterClass(); void test_quickfix_InsertDefFromDecl_headerSource_basic1(); diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index bd9b1296ec7..c914f2a48bd 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -4796,5 +4796,38 @@ void CppEditorPlugin::test_quickfix_ConvertQt4Connect_connectWithinClass() QuickFixOperationTest(testDocuments, &factory); } +void CppEditorPlugin::test_quickfix_ConvertQt4Connect_differentNamespace() +{ + const QByteArray prefix = + "namespace NsA {\n" + "class ClassA : public QObject\n" + "{\n" + " static ClassA *instance();\n" + "signals:\n" + " void sig();\n" + "};\n" + "}\n" + "\n" + "namespace NsB {\n" + "class ClassB : public QObject\n" + "{\n" + " void slot();\n" + " void connector() {\n"; + + const QByteArray suffix = " }\n};\n}"; + + const QByteArray original = "co@nnect(NsA::ClassA::instance(), SIGNAL(sig()),\n" + " this, SLOT(slot()));\n"; + const QByteArray expected = "connect(NsA::ClassA::instance(), &NsA::ClassA::sig,\n" + " this, &ClassB::slot);\n"; + QList testDocuments; + testDocuments << QuickFixTestDocument::create("file.cpp", + prefix + original + suffix, + prefix + expected + suffix); + + ConvertQt4Connect factory; + QuickFixOperationTest(testDocuments, &factory); +} + } // namespace Internal } // namespace CppEditor diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index 9ef84adad2d..dd499591100 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -5783,7 +5783,10 @@ Class *senderOrReceiverClass(const CppQuickFixInterface &interface, QTC_ASSERT(objectType, return 0); ClassOrNamespace *objectClassCON = context.lookupType(objectType->name(), objectPointerScope); - QTC_ASSERT(objectClassCON, return 0); + if (!objectClassCON) { + objectClassCON = objectPointerExpressions.first().binding(); + QTC_ASSERT(objectClassCON, return 0); + } QTC_ASSERT(!objectClassCON->symbols().isEmpty(), return 0); Symbol *objectClassSymbol = skipForwardDeclarations(objectClassCON->symbols());