From c903f4974f3ed403b1cc4af4f143922d8ebc7961 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Mon, 1 Feb 2016 14:51:01 +0100 Subject: TextEditor: Introduce AssistProposalItemInterface For unit test we need to break every dependency to the TextEditor Widget etc.. With an abstract interface we can implement it in clang without relying on unwanted dependencies. It makes it also easier to compute the values deferred. Change-Id: I1b313a1625f4e80bd324ab4bf1a7c4f6b690abe9 Reviewed-by: Nikolai Kosjar --- src/plugins/cpptools/cppcompletionassist.cpp | 33 +++++++++++++++++++--------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'src/plugins/cpptools/cppcompletionassist.cpp') diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp index 0ac330c3af..7ce4c6c828 100644 --- a/src/plugins/cpptools/cppcompletionassist.cpp +++ b/src/plugins/cpptools/cppcompletionassist.cpp @@ -80,7 +80,7 @@ struct CompleteFunctionDeclaration // --------------------- // CppAssistProposalItem // --------------------- -class CppAssistProposalItem : public AssistProposalItem +class CppAssistProposalItem final : public AssistProposalItem { public: CppAssistProposalItem() : @@ -95,11 +95,14 @@ public: void keepTypeOfExpression(const QSharedPointer &typeOfExp) { m_typeOfExpression = typeOfExp; } + + quint64 hash() const override; + private: - bool m_isOverloaded; - mutable QChar m_typedChar; - unsigned m_completionOperator; QSharedPointer m_typeOfExpression; + unsigned m_completionOperator; + mutable QChar m_typedChar; + bool m_isOverloaded; }; } // Internal @@ -115,10 +118,10 @@ bool CppAssistProposalModel::isSortable(const QString &prefix) const return !prefix.isEmpty(); } -AssistProposalItem *CppAssistProposalModel::proposalItem(int index) const +AssistProposalItemInterface *CppAssistProposalModel::proposalItem(int index) const { - auto item = static_cast(GenericProposalModel::proposalItem(index)); - if (!item->data().canConvert()) { + AssistProposalItemInterface *item = GenericProposalModel::proposalItem(index); + if (!item->isSnippet()) { CppAssistProposalItem *cppItem = static_cast(item); cppItem->keepCompletionOperator(m_completionOperator); cppItem->keepTypeOfExpression(m_typeOfExpression); @@ -178,6 +181,16 @@ static bool isDereferenced(TextEditorWidget *editorWidget, int basePosition) return false; } +quint64 CppAssistProposalItem::hash() const +{ + if (data().canConvert()) + return quint64(data().value()->index()); + else if (data().canConvert()) + return quint64(data().value().function->index()); + + return 0; +} + void CppAssistProposalItem::applyContextualContent(TextEditorWidget *editorWidget, int basePosition) const { Symbol *symbol = 0; @@ -892,12 +905,12 @@ IAssistProposal *InternalCppCompletionAssistProcessor::createContentProposal() { // Duplicates are kept only if they are snippets. QSet processed; - QList::iterator it = m_completions.begin(); + auto it = m_completions.begin(); while (it != m_completions.end()) { CppAssistProposalItem *item = static_cast(*it); - if (!processed.contains(item->text()) || item->data().canConvert()) { + if (!processed.contains(item->text()) || item->isSnippet()) { ++it; - if (!item->data().canConvert()) { + if (!item->isSnippet()) { processed.insert(item->text()); if (!item->isOverloaded()) { if (Symbol *symbol = qvariant_cast(item->data())) { -- cgit v1.2.1