summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libs/cplusplus/LookupContext.cpp5
-rw-r--r--src/plugins/cpptools/cppcompletion_test.cpp34
-rw-r--r--src/plugins/cpptools/cpptoolsplugin.h1
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();