diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 1645d799610..d60c485ee38 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -726,7 +726,7 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac return reference; const TemplateNameId *templId = name->asTemplateNameId(); - if (_alreadyConsideredClasses.contains(referenceClass) || + if ((! templId && _alreadyConsideredClasses.contains(referenceClass)) || (templId && _alreadyConsideredTemplates.contains(templId))) { return reference; diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp index 1ebf2282dfb..70d1dd12321 100644 --- a/src/plugins/cpptools/cppcompletion_test.cpp +++ b/src/plugins/cpptools/cppcompletion_test.cpp @@ -370,6 +370,45 @@ void CppToolsPlugin::test_completion_template_5() QVERIFY(completions.contains("b")); } +void CppToolsPlugin::test_completion_template_6() +{ + TestData data; + data.srcText = "\n" + "class Item\n" + "{\n" + " int i;\n" + "};\n" + "\n" + "template \n" + "class Container\n" + "{\n" + " T get();\n" + "};\n" + "\n" + "template class Container;\n" + "\n" + "class ItemContainer: public Container\n" + "{};\n" + "ItemContainer container;\n" + "@\n" + ; + + setup(&data); + + Utils::ChangeSet change; + QString txt = QLatin1String("container.get()."); + change.insert(data.pos, txt); + QTextCursor cursor(data.doc); + change.apply(&cursor); + data.pos += txt.length(); + + QStringList completions = getCompletions(data); + + QCOMPARE(completions.size(), 2); + QVERIFY(completions.contains("Item")); + QVERIFY(completions.contains("i")); +} + void CppToolsPlugin::test_completion() { QFETCH(QByteArray, code); @@ -1013,4 +1052,6 @@ void CppToolsPlugin::test_completion_enclosing_template_class_data() completions.append("Nested"); completions.append("int_nested"); QTest::newRow("case: nested template class with enclosing template class") - << code << completions;} + << code << completions; + +} diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h index 68d91ca5293..1c026685fed 100644 --- a/src/plugins/cpptools/cpptoolsplugin.h +++ b/src/plugins/cpptools/cpptoolsplugin.h @@ -96,6 +96,7 @@ private slots: void test_completion_template_3(); void test_completion_template_4(); void test_completion_template_5(); + void test_completion_template_6(); void test_completion_template_as_base(); void test_completion_template_as_base_data(); void test_completion_use_global_identifier_as_base_class();