diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 9e3a5a534f9cb577b4410b3e4b2630f3dfc7d4ef..c777141dd81849248dda891c31d7a5ef0aa67bd0 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 7f46be938a22217cf9fdef26262c71229bbc0555..80aa8035c9fc27001e4c3964d50e22f3b5bf805b 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 98821f579fc75a50226790c61ed4055cfc2f4cb3..440d20fb9c34d3db9a7298333bebfcaaf5b9247b 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 87d76d3bc5488257cc9ddd504259080b81da9943..29f64719b2cba3465355556363cd330cf817c8e9 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 687f40762bea75150815fd2edd6ab6f5265b8df1..716667a9550afc847a532612bf395486a3d4904f 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;