diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp index 6f0caaac81c..2b218d87e53 100644 --- a/src/plugins/cpptools/cppcompletion_test.cpp +++ b/src/plugins/cpptools/cppcompletion_test.cpp @@ -72,7 +72,7 @@ struct TestCase QTextDocument *doc; }; -static QStringList getCompletions(TestCase &data) +static QStringList getCompletions(TestCase &data, bool *replaceAccessOperator = 0) { QStringList completions; @@ -86,13 +86,16 @@ static QStringList getCompletions(TestCase &data) IAssistProposalModel *model = proposal->model(); if (!model) return completions; - BasicProposalItemListModel *listmodel = dynamic_cast(model); + CppAssistProposalModel *listmodel = dynamic_cast(model); if (!listmodel) return completions; for (int i = 0; i < listmodel->size(); ++i) completions << listmodel->text(i); + if (replaceAccessOperator) + *replaceAccessOperator = listmodel->m_replaceDotForArrow; + return completions; } @@ -1288,3 +1291,30 @@ void CppToolsPlugin::test_completion_instantiate_nested_of_nested_class_when_enc QVERIFY(completions.contains(QLatin1String("Foo"))); QVERIFY(completions.contains(QLatin1String("foo_i"))); } + +void CppToolsPlugin::test_completion_member_access_operator_1() +{ + TestCase data; + data.srcText = "\n" + "struct S { void t(); };\n" + "void f() { S *s;\n" + "@\n" + "}\n" + ; + setup(&data); + + Utils::ChangeSet change; + QString txt = QLatin1String("s."); + change.insert(data.pos, txt); + QTextCursor cursor(data.doc); + change.apply(&cursor); + data.pos += txt.length(); + + bool replaceAccessOperator = false; + QStringList completions = getCompletions(data, &replaceAccessOperator); + + QCOMPARE(completions.size(), 2); + QVERIFY(completions.contains(QLatin1String("S"))); + QVERIFY(completions.contains(QLatin1String("t"))); + QVERIFY(replaceAccessOperator); +} diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp index 859ee4660ff..9ff1562727b 100644 --- a/src/plugins/cpptools/cppcompletionassist.cpp +++ b/src/plugins/cpptools/cppcompletionassist.cpp @@ -58,7 +58,6 @@ #include #include #include -#include #include #include #include @@ -91,29 +90,6 @@ struct CompleteFunctionDeclaration Function *function; }; -// ---------------------- -// CppAssistProposalModel -// ---------------------- -class CppAssistProposalModel : public TextEditor::BasicProposalItemListModel -{ -public: - CppAssistProposalModel() - : TextEditor::BasicProposalItemListModel() - , m_completionOperator(T_EOF_SYMBOL) - , m_replaceDotForArrow(false) - , m_typeOfExpression(new TypeOfExpression) - { - m_typeOfExpression->setExpandTemplates(true); - } - - virtual bool isSortable(const QString &prefix) const; - virtual IAssistProposalItem *proposalItem(int index) const; - - unsigned m_completionOperator; - bool m_replaceDotForArrow; - QSharedPointer m_typeOfExpression; -}; - // --------------------- // CppAssistProposalItem // --------------------- diff --git a/src/plugins/cpptools/cppcompletionassist.h b/src/plugins/cpptools/cppcompletionassist.h index f49a161128f..fd11b7e4445 100644 --- a/src/plugins/cpptools/cppcompletionassist.h +++ b/src/plugins/cpptools/cppcompletionassist.h @@ -41,10 +41,12 @@ # include #endif +#include #include #include #include #include +#include #include #include @@ -64,7 +66,26 @@ namespace CppTools { namespace Internal { class CppCompletionAssistInterface; -class CppAssistProposalModel; + +class CppAssistProposalModel : public TextEditor::BasicProposalItemListModel +{ +public: + CppAssistProposalModel() + : TextEditor::BasicProposalItemListModel() + , m_completionOperator(CPlusPlus::T_EOF_SYMBOL) + , m_replaceDotForArrow(false) + , m_typeOfExpression(new CPlusPlus::TypeOfExpression) + { + m_typeOfExpression->setExpandTemplates(true); + } + + virtual bool isSortable(const QString &prefix) const; + virtual TextEditor::IAssistProposalItem *proposalItem(int index) const; + + unsigned m_completionOperator; + bool m_replaceDotForArrow; + QSharedPointer m_typeOfExpression; +}; class InternalCompletionAssistProvider : public CppCompletionAssistProvider { diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h index 41a7ac4cac5..012d03112cf 100644 --- a/src/plugins/cpptools/cpptoolsplugin.h +++ b/src/plugins/cpptools/cpptoolsplugin.h @@ -112,6 +112,7 @@ private slots: void test_completion_enclosing_template_class_data(); void test_completion_instantiate_nested_class_when_enclosing_is_template(); void test_completion_instantiate_nested_of_nested_class_when_enclosing_is_template(); + void test_completion_member_access_operator_1(); void test_format_pointerdeclaration_in_simpledeclarations(); void test_format_pointerdeclaration_in_simpledeclarations_data();