diff options
author | Nikolai Kosjar <[email protected]> | 2016-07-26 08:52:12 +0200 |
---|---|---|
committer | Nikolai Kosjar <[email protected]> | 2016-07-26 11:49:17 +0000 |
commit | 9d5705a755d747560440092747a9025c12ba7a72 (patch) | |
tree | e60122cdcf615629819232abfddc975b5cdaba59 | |
parent | ead6853b09e0483198dbe3502a5a9f985768b930 (diff) |
Clang: Stop trying to remove duplicate completion items
We assume that libclang does not return any duplicates, at least we
never noticed any so far. For the concrete test below no duplicates were
removed.
Function overloads are not problematic because they are folded into one
ClangAssistProposalItem (addOverload()).
To the completion items from libclang we add the Qt Creator snippets as
items. Those might have the same text in the completion list view, but
their icon is different (e.g. consider the keyword completion "class"
and the Qt Creator snippet "class"), thus the user can still tell them
apart.
Test:
1. Open src/plugins/clangstaticanalyzer/unit-tests/qt-essential-includes.pro
2. Open main.cpp
3. Complete in the main function
Measured with a timer in IpcReceiver::codeCompleted.
On Linux, for 20637 completion items:
Before: 74ms (avg)
Now: 66ms (avg)
Gain: 11%
Change-Id: I524eaa09f8d9e07c78dc9efcc77f7e021c6f37f7
Reviewed-by: Tim Jenssen <[email protected]>
5 files changed, 15 insertions, 2 deletions
diff --git a/src/plugins/clangcodemodel/clangassistproposalmodel.cpp b/src/plugins/clangcodemodel/clangassistproposalmodel.cpp index 06dc7b3198c..b134e8fea42 100644 --- a/src/plugins/clangcodemodel/clangassistproposalmodel.cpp +++ b/src/plugins/clangcodemodel/clangassistproposalmodel.cpp @@ -40,6 +40,11 @@ ClangAssistProposalModel::ClangAssistProposalModel( { } +bool ClangAssistProposalModel::containsDuplicates() const +{ + return false; +} + bool ClangAssistProposalModel::isSortable(const QString &/*prefix*/) const { return true; diff --git a/src/plugins/clangcodemodel/clangassistproposalmodel.h b/src/plugins/clangcodemodel/clangassistproposalmodel.h index 32b25bf9d00..6a722145139 100644 --- a/src/plugins/clangcodemodel/clangassistproposalmodel.h +++ b/src/plugins/clangcodemodel/clangassistproposalmodel.h @@ -39,6 +39,8 @@ class ClangAssistProposalModel : public TextEditor::GenericProposalModel public: ClangAssistProposalModel(ClangBackEnd::CompletionCorrection neededCorrection); + bool containsDuplicates() const override; + bool isSortable(const QString &prefix) const override; void sort(const QString &prefix) override; diff --git a/src/plugins/texteditor/codeassist/genericproposalmodel.cpp b/src/plugins/texteditor/codeassist/genericproposalmodel.cpp index 3b5e14e1faf..1afd0b8451f 100644 --- a/src/plugins/texteditor/codeassist/genericproposalmodel.cpp +++ b/src/plugins/texteditor/codeassist/genericproposalmodel.cpp @@ -170,7 +170,6 @@ QString GenericProposalModel::detail(int index) const return m_currentItems.at(index)->detail(); } -// make it optional because it is not needed in many cases void GenericProposalModel::removeDuplicates() { QHash<QString, quint64> unique; @@ -272,6 +271,11 @@ int GenericProposalModel::persistentId(int index) const return m_idByText.value(m_currentItems.at(index)->text()); } +bool GenericProposalModel::containsDuplicates() const +{ + return true; +} + bool GenericProposalModel::supportsPrefixExpansion() const { return true; diff --git a/src/plugins/texteditor/codeassist/genericproposalmodel.h b/src/plugins/texteditor/codeassist/genericproposalmodel.h index 7004770f198..d3ff31fb6f9 100644 --- a/src/plugins/texteditor/codeassist/genericproposalmodel.h +++ b/src/plugins/texteditor/codeassist/genericproposalmodel.h @@ -53,6 +53,7 @@ public: virtual QIcon icon(int index) const; virtual QString detail(int index) const; virtual int persistentId(int index) const; + virtual bool containsDuplicates() const; virtual void removeDuplicates(); virtual void filter(const QString &prefix); virtual bool isSortable(const QString &prefix) const; diff --git a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp index 2da949edee2..4a1e1eff671 100644 --- a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp +++ b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp @@ -407,7 +407,8 @@ void GenericProposalWidget::setIsSynchronized(bool isSync) void GenericProposalWidget::showProposal(const QString &prefix) { ensurePolished(); - d->m_model->removeDuplicates(); + if (d->m_model->containsDuplicates()) + d->m_model->removeDuplicates(); if (!updateAndCheck(prefix)) return; show(); |