diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index abd98528840..28fe3d8bcb7 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -216,7 +216,14 @@ LookupContext &LookupContext::operator=(const LookupContext &other) QList LookupContext::fullyQualifiedName(Symbol *symbol, InlineNamespacePolicy policy) { QList qualifiedName = path(symbol->enclosingScope(), policy); - addNames(symbol->name(), &qualifiedName, /*add all names*/ true); + QList symbolNames; + addNames(symbol->name(), &symbolNames, /*add all names*/ true); + if (const UsingDeclaration * const usingDecl = symbol->asUsingDeclaration()) { + if (!symbolNames.isEmpty()) + qualifiedName << symbolNames.last(); + } else { + qualifiedName << symbolNames; + } return qualifiedName; } @@ -811,7 +818,7 @@ void CreateBindings::lookupInScope(const Name *name, Scope *scope, continue; // skip using namespace directives else if (! id->match(s->identifier())) continue; - else if (s->name() && s->name()->isQualifiedNameId()) + else if (s->name() && s->name()->isQualifiedNameId() && !s->asUsingDeclaration()) continue; // skip qualified ids. if (Q_UNLIKELY(debug)) { diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h index 37c9229ed58..13e33cfb2c0 100644 --- a/src/plugins/cppeditor/cppeditorplugin.h +++ b/src/plugins/cppeditor/cppeditorplugin.h @@ -155,6 +155,7 @@ private slots: void test_quickfix_InsertDefFromDecl_erroneousStatementAtEndOfFile(); void test_quickfix_InsertDefFromDecl_rvalueReference(); void test_quickfix_InsertDefFromDecl_functionTryBlock(); + void test_quickfix_InsertDefFromDecl_usingDecl(); void test_quickfix_InsertDefFromDecl_findImplementationFile(); void test_quickfix_InsertDefFromDecl_unicodeIdentifier(); void test_quickfix_InsertDefFromDecl_templateClass(); diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index 757659911bb..4ad18cdc963 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -4322,6 +4322,41 @@ void Foo::otherFunc() QuickFixOperationTest(testDocuments, &factory); } +void CppEditorPlugin::test_quickfix_InsertDefFromDecl_usingDecl() +{ + QList testDocuments; + + QByteArray original; + QByteArray expected; + + // Header File + original = R"( +namespace N { struct S; } +using N::S; + +void @func(const S &s); +)"; + expected = original; + testDocuments << QuickFixTestDocument::create("file.h", original, expected); + + // Source File + original = R"( +#include "file.h" +)"; + expected = R"( +#include "file.h" + +void func(const S &s) +{ + +} +)"; + testDocuments << QuickFixTestDocument::create("file.cpp", original, expected); + + InsertDefFromDecl factory; + QuickFixOperationTest(testDocuments, &factory); +} + /// Find right implementation file. (QTCREATORBUG-10728) void CppEditorPlugin::test_quickfix_InsertDefFromDecl_findImplementationFile() {