diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 9815b6f2c1622f9c4bec20ba1277ecef0d93a0bd..dacce4a180abaf819e52b4ab96d672f769fca13f 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -563,32 +563,42 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) return -1; } -bool CppCodeCompletion::completeConstructorOrFunction(FullySpecifiedType exprTy, - const QList<TypeOfExpression::Result> &resolvedTypes) +bool CppCodeCompletion::completeConstructorOrFunction(FullySpecifiedType, + const QList<TypeOfExpression::Result> &results) { ConvertToCompletionItem toCompletionItem(this); Overview o; o.setShowReturnTypes(true); o.setShowArgumentNames(true); - if (Class *klass = exprTy->asClassType()) { - for (unsigned i = 0; i < klass->memberCount(); ++i) { - Symbol *member = klass->memberAt(i); - if (! member->type()->isFunctionType()) - continue; - else if (! member->identity()) - continue; - else if (! member->identity()->isEqualTo(klass->identity())) - continue; - if (TextEditor::CompletionItem item = toCompletionItem(member)) { - item.m_text = o(member->type(), member->name()); - m_completions.append(item); + foreach (const TypeOfExpression::Result &result, results) { + FullySpecifiedType exprTy = result.first; + + if (Class *klass = exprTy->asClassType()) { + for (unsigned i = 0; i < klass->memberCount(); ++i) { + Symbol *member = klass->memberAt(i); + if (! member->type()->isFunctionType()) + continue; + else if (! member->identity()) + continue; + else if (! member->identity()->isEqualTo(klass->identity())) + continue; + if (TextEditor::CompletionItem item = toCompletionItem(member)) { + item.m_text = o(member->type(), member->name()); + m_completions.append(item); + } } + + break; } - } else { + } + + if (m_completions.isEmpty()) { QSet<QString> signatures; - foreach (TypeOfExpression::Result p, resolvedTypes) { + + foreach (const TypeOfExpression::Result &p, results) { FullySpecifiedType ty = p.first; + if (Function *fun = ty->asFunctionType()) { if (TextEditor::CompletionItem item = toCompletionItem(fun)) { QString signature;