diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-12-02 12:11:49 +0100 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-12-02 12:18:12 +0100 |
commit | f3bebd7f1bb3c07075c45bf26fabdc2e09788303 (patch) | |
tree | 1e7a09e77e3dc1fdf893d8da7c9cc6e7bd3e3030 /src/plugins/cpptools/cppcodecompletion.cpp | |
parent | d5c2dedd8a9d60addc565292bafba236c86dd666 (diff) | |
download | qt-creator-f3bebd7f1bb3c07075c45bf26fabdc2e09788303.tar.gz |
Moved Completion::getCompletion() in ICompletionCollector and made the filtering of completion items more C++ friendly.
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; |