From e98664690558aafa2833e07fd0c13a003cec8b32 Mon Sep 17 00:00:00 2001 From: Lorenz Haas <lykurg@gmail.com> Date: Wed, 12 Jun 2013 17:40:11 +0200 Subject: [PATCH] CppEditor: Resolve templates in AssignToLocalVariable Task-number: QTCREATORBUG-9525 Change-Id: Ibe6c054c289f564a073a455f9b200bfffe5868eb Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com> --- src/plugins/cppeditor/cppeditorplugin.h | 1 + src/plugins/cppeditor/cppquickfix_test.cpp | 38 ++++++++++++++++++++++ src/plugins/cppeditor/cppquickfixes.cpp | 2 ++ 3 files changed, 41 insertions(+) diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h index c0fb4094c69..50b5bc141be 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 1ce9ed1aa7f..dd22a5d0892 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 cc11e9aee11..14456b0eb24 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(), -- GitLab