diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/cplusplus/LookupContext.cpp | 5 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcompletion_test.cpp | 34 | ||||
-rw-r--r-- | src/plugins/cpptools/cpptoolsplugin.h | 1 |
3 files changed, 39 insertions, 1 deletions
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index dae8eb6a02..5fb0e2e3ec 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -416,6 +416,8 @@ QList<LookupItem> ClassOrNamespace::lookup_helper(const Name *name, bool searchI QList<LookupItem> result; if (name) { + QSet<ClassOrNamespace *> processed; + if (const QualifiedNameId *q = name->asQualifiedNameId()) { if (! q->base()) result = globalNamespace()->find(q->name()); @@ -423,10 +425,11 @@ QList<LookupItem> ClassOrNamespace::lookup_helper(const Name *name, bool searchI else if (ClassOrNamespace *binding = lookupType(q->base())) result = binding->find(q->name()); + lookup_helper(name, this, &result, &processed, /*templateId = */ 0); + return result; } - QSet<ClassOrNamespace *> processed; ClassOrNamespace *binding = this; do { lookup_helper(name, binding, &result, &processed, /*templateId = */ 0); diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp index 7d9d9f3417..a6681bb398 100644 --- a/src/plugins/cpptools/cppcompletion_test.cpp +++ b/src/plugins/cpptools/cppcompletion_test.cpp @@ -121,6 +121,40 @@ static void setup(TestData *data) data->doc = data->editor->document(); } +void CppToolsPlugin::test_completion_forward_declarations_present() +{ + TestData data; + data.srcText = "\n" + "class Foo\n" + "{\n" + " struct Bar;\n" + " int i;\n" + "};\n" + "\n" + "struct Foo::Bar \n" + "{\n" + " Bar() {}\n" + "};\n" + "\n" + "@\n" + "// padding so we get the scope right\n"; + + setup(&data); + + Utils::ChangeSet change; + change.insert(data.pos, "Foo::Bar::"); + QTextCursor cursor(data.doc); + change.apply(&cursor); + data.pos += 10; + + QStringList expected; + expected.append("Bar"); + + QStringList completions = getCompletions(data); + + QCOMPARE(completions, expected); +} + void CppToolsPlugin::test_completion_basic_1() { TestData data; diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h index 5a07c0add3..ba88d11896 100644 --- a/src/plugins/cpptools/cpptoolsplugin.h +++ b/src/plugins/cpptools/cpptoolsplugin.h @@ -90,6 +90,7 @@ private slots: void test_codegen_definition_last_member(); void test_codegen_definition_middle_member(); + void test_completion_forward_declarations_present(); void test_completion_basic_1(); void test_completion_template_1(); void test_completion_template_as_base(); |