summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index a61cfde23f..5176dd6d30 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -1466,6 +1466,43 @@ void CppCodeCompletion::completions(QList<TextEditor::CompletionItem> *completio
}
}
+QList<TextEditor::CompletionItem> CppCodeCompletion::getCompletions()
+{
+ QList<TextEditor::CompletionItem> completionItems;
+
+ completions(&completionItems);
+
+ qStableSort(completionItems.begin(), completionItems.end(), completionItemLessThan);
+
+ // Remove duplicates
+ QString lastKey;
+ QList<TextEditor::CompletionItem> uniquelist;
+
+ foreach (const TextEditor::CompletionItem &item, completionItems) {
+ if (item.text != lastKey) {
+ uniquelist.append(item);
+ lastKey = item.text;
+ } else {
+ TextEditor::CompletionItem &lastItem = uniquelist.last();
+ Symbol *symbol = qvariant_cast<Symbol *>(item.data);
+ Symbol *lastSymbol = qvariant_cast<Symbol *>(lastItem.data);
+
+ if (symbol && lastSymbol) {
+ Function *funTy = symbol->type()->asFunctionType();
+ Function *lastFunTy = lastSymbol->type()->asFunctionType();
+ if (funTy && lastFunTy) {
+ if (funTy->argumentCount() == lastFunTy->argumentCount())
+ continue;
+ }
+ }
+
+ ++lastItem.duplicateCount;
+ }
+ }
+
+ return uniquelist;
+}
+
void CppCodeCompletion::complete(const TextEditor::CompletionItem &item)
{
Symbol *symbol = 0;