diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h index c0fb4094c69ac9523fd41d19e277c7447400f56a..50b5bc141be7e5604b6cb07981fa81e03d150b38 100644 --- a/src/plugins/cppeditor/cppeditorplugin.h +++ b/src/plugins/cppeditor/cppeditorplugin.h @@ -209,6 +209,7 @@ private slots: void test_quickfix_AssignToLocalVariable_memberFunction(); void test_quickfix_AssignToLocalVariable_staticMemberFunction(); void test_quickfix_AssignToLocalVariable_newExpression(); + void test_quickfix_AssignToLocalVariable_templates(); void test_quickfix_AssignToLocalVariable_noInitializationList(); void test_quickfix_AssignToLocalVariable_noVoidFunction(); void test_quickfix_AssignToLocalVariable_noVoidMemberFunction(); diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index 1ce9ed1aa7fce2d8ed25b30fd84ac974e9120403..dd22a5d0892961c79a2013d3789d969b5f271ab1 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -2507,6 +2507,44 @@ void CppEditorPlugin::test_quickfix_AssignToLocalVariable_newExpression() data.run(&factory); } +void CppEditorPlugin::test_quickfix_AssignToLocalVariable_templates() +{ + + QList<TestDocumentPtr> testFiles; + QByteArray original; + QByteArray expected; + + // Header File + original = + "template <typename T>\n" + "class List {\n" + "public:\n" + " T first();" + "};\n" + ; + expected = original + "\n"; + testFiles << TestDocument::create(original, expected, QLatin1String("file.h")); + + // Source File + original = + "#include \"file.h\"\n" + "void foo() {\n" + " List<int> list;\n" + " li@st.first();\n" + "}"; + expected = + "#include \"file.h\"\n" + "void foo() {\n" + " List<int> list;\n" + " int localFirst = list.first();\n" + "}\n"; + testFiles << TestDocument::create(original, expected, QLatin1String("file.cpp")); + + AssignToLocalVariable factory; + TestCase data(testFiles); + data.run(&factory); +} + /// Check: No trigger for function inside member initialization list. void CppEditorPlugin::test_quickfix_AssignToLocalVariable_noInitializationList() { diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index cc11e9aee1178ce6bbac63ed9f1b90d04d22ebbe..14456b0eb2462297098b9ad2a76f9139cd9940aa 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -4081,6 +4081,7 @@ public: TypeOfExpression typeOfExpression; typeOfExpression.init(assistInterface()->semanticInfo().doc, snapshot(), assistInterface()->context().bindings()); + typeOfExpression.setExpandTemplates(true); Scope *scope = file->scopeAt(m_ast->firstToken()); const QList<LookupItem> result = typeOfExpression(file->textOf(m_ast).toUtf8(), scope, TypeOfExpression::Preprocess); @@ -4220,6 +4221,7 @@ void AssignToLocalVariable::match(const CppQuickFixInterface &interface, QuickFi TypeOfExpression typeOfExpression; typeOfExpression.init(interface->semanticInfo().doc, interface->snapshot(), interface->context().bindings()); + typeOfExpression.setExpandTemplates(true); // If items are empty, AssignToLocalVariableOperation will fail. items = typeOfExpression(file->textOf(outerAST).toUtf8(),