From 207c29555282df39c44e5c298c8ad8bee743ba1c Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Mon, 20 Dec 2010 16:10:56 +0100 Subject: [PATCH] Sort the completion items when searching for common prefixes. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Thorbjørn Lindeijer --- src/plugins/cpptools/cppcodecompletion.cpp | 2 +- src/plugins/qmljseditor/qmljscodecompletion.cpp | 7 ++++++- src/plugins/qmljseditor/qmljscodecompletion.h | 1 + src/plugins/texteditor/icompletioncollector.cpp | 12 +++++++++++- src/plugins/texteditor/icompletioncollector.h | 2 ++ 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 9e3a5a534f9..c777141dd81 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -745,7 +745,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) } if (m_completionOperator != T_EOF_SYMBOL) - qSort(m_completions.begin(), m_completions.end(), completionItemLessThan); + sortCompletion(m_completions); // always remove duplicates m_completions = removeDuplicates(m_completions); diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp index 7f46be938a2..80aa8035c9f 100644 --- a/src/plugins/qmljseditor/qmljscodecompletion.cpp +++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp @@ -1074,13 +1074,18 @@ static bool qmlCompletionItemLessThan(const TextEditor::CompletionItem &l, const return l.text < r.text; } +void CodeCompletion::sortCompletion(QList<TextEditor::CompletionItem> &completionItems) +{ + qStableSort(completionItems.begin(), completionItems.end(), qmlCompletionItemLessThan); +} + QList<TextEditor::CompletionItem> CodeCompletion::getCompletions() { QList<TextEditor::CompletionItem> completionItems; completions(&completionItems); - qStableSort(completionItems.begin(), completionItems.end(), qmlCompletionItemLessThan); + sortCompletion(completionItems); // Remove duplicates QString lastKey; diff --git a/src/plugins/qmljseditor/qmljscodecompletion.h b/src/plugins/qmljseditor/qmljscodecompletion.h index 98821f579fc..440d20fb9c3 100644 --- a/src/plugins/qmljseditor/qmljscodecompletion.h +++ b/src/plugins/qmljseditor/qmljscodecompletion.h @@ -77,6 +77,7 @@ public: virtual void complete(const TextEditor::CompletionItem &item, QChar typedChar); virtual bool partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems); virtual QList<TextEditor::CompletionItem> getCompletions(); + virtual void sortCompletion(QList<TextEditor::CompletionItem> &completionItems); virtual void cleanup(); diff --git a/src/plugins/texteditor/icompletioncollector.cpp b/src/plugins/texteditor/icompletioncollector.cpp index 87d76d3bc54..29f64719b2c 100644 --- a/src/plugins/texteditor/icompletioncollector.cpp +++ b/src/plugins/texteditor/icompletioncollector.cpp @@ -127,10 +127,15 @@ QList<CompletionItem> ICompletionCollector::getCompletions() return uniquelist; } -bool ICompletionCollector::partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems) +bool ICompletionCollector::partiallyComplete(const QList<TextEditor::CompletionItem> &items) { if (! m_d->m_completionSettings.m_partiallyComplete) return false; + if (items.size() >= 100) + return false; + + QList<TextEditor::CompletionItem> completionItems = items; + sortCompletion(completionItems); // Compute common prefix QString firstKey = completionItems.first().text; @@ -155,6 +160,11 @@ bool ICompletionCollector::partiallyComplete(const QList<TextEditor::CompletionI return false; } +void ICompletionCollector::sortCompletion(QList<TextEditor::CompletionItem> &completionItems) +{ + qStableSort(completionItems.begin(), completionItems.end(), &ICompletionCollector::completionItemLessThan); +} + void ICompletionCollector::filter(const QList<TextEditor::CompletionItem> &items, QList<TextEditor::CompletionItem> *filteredItems, const QString &key) diff --git a/src/plugins/texteditor/icompletioncollector.h b/src/plugins/texteditor/icompletioncollector.h index 687f40762be..716667a9550 100644 --- a/src/plugins/texteditor/icompletioncollector.h +++ b/src/plugins/texteditor/icompletioncollector.h @@ -139,6 +139,8 @@ public: */ virtual bool partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems); + virtual void sortCompletion(QList<TextEditor::CompletionItem> &completionItems); + /* Called when it's safe to clean up the completion items. */ virtual void cleanup() = 0; -- GitLab