diff options
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r-- | src/plugins/cpptools/cppcodecompletion.cpp | 37 |
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; |