Fixes: Constructor completion.

This commit is contained in:
Roberto Raggi
2009-02-17 11:50:56 +01:00
parent 738c50726d
commit c020250556

View File

@@ -563,32 +563,42 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
return -1; return -1;
} }
bool CppCodeCompletion::completeConstructorOrFunction(FullySpecifiedType exprTy, bool CppCodeCompletion::completeConstructorOrFunction(FullySpecifiedType,
const QList<TypeOfExpression::Result> &resolvedTypes) const QList<TypeOfExpression::Result> &results)
{ {
ConvertToCompletionItem toCompletionItem(this); ConvertToCompletionItem toCompletionItem(this);
Overview o; Overview o;
o.setShowReturnTypes(true); o.setShowReturnTypes(true);
o.setShowArgumentNames(true); o.setShowArgumentNames(true);
if (Class *klass = exprTy->asClassType()) { foreach (const TypeOfExpression::Result &result, results) {
for (unsigned i = 0; i < klass->memberCount(); ++i) { FullySpecifiedType exprTy = result.first;
Symbol *member = klass->memberAt(i);
if (! member->type()->isFunctionType()) if (Class *klass = exprTy->asClassType()) {
continue; for (unsigned i = 0; i < klass->memberCount(); ++i) {
else if (! member->identity()) Symbol *member = klass->memberAt(i);
continue; if (! member->type()->isFunctionType())
else if (! member->identity()->isEqualTo(klass->identity())) continue;
continue; else if (! member->identity())
if (TextEditor::CompletionItem item = toCompletionItem(member)) { continue;
item.m_text = o(member->type(), member->name()); else if (! member->identity()->isEqualTo(klass->identity()))
m_completions.append(item); 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; QSet<QString> signatures;
foreach (TypeOfExpression::Result p, resolvedTypes) {
foreach (const TypeOfExpression::Result &p, results) {
FullySpecifiedType ty = p.first; FullySpecifiedType ty = p.first;
if (Function *fun = ty->asFunctionType()) { if (Function *fun = ty->asFunctionType()) {
if (TextEditor::CompletionItem item = toCompletionItem(fun)) { if (TextEditor::CompletionItem item = toCompletionItem(fun)) {
QString signature; QString signature;