summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2009-02-16 15:15:43 +0100
committerThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2009-02-16 15:15:43 +0100
commit100a6254f69c6326d8bd6bd41b2b90eba6dfa0bf (patch)
treed5cdadb22668161f6d00d529f9f1e7a6f752936d /src/plugins/cpptools/cppcodecompletion.cpp
parent9aa86f91356630b3609ffc577c0232992dca3050 (diff)
downloadqt-creator-100a6254f69c6326d8bd6bd41b2b90eba6dfa0bf.tar.gz
More intelligent function argument widget
Now it shows immediately when there is only a single signature of a given method/constructor. (cherry picked from commit 8b9dd766c822a9f7b929ae14eab3e2e402307c8c) Conflicts: src/plugins/cpptools/cppcodecompletion.cpp
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp61
1 files changed, 26 insertions, 35 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 20faa6e7a3..94258decc1 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -518,7 +518,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
if (exprTy->isReferenceType())
exprTy = exprTy->asReferenceType()->elementType();
- if (m_completionOperator == T_LPAREN && completeFunction(exprTy, resolvedTypes, context)) {
+ if (m_completionOperator == T_LPAREN && completeConstructorOrFunction(exprTy, resolvedTypes)) {
return m_startPosition;
} else if ((m_completionOperator == T_DOT || m_completionOperator == T_ARROW) &&
completeMember(resolvedTypes, context)) {
@@ -551,7 +551,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
foreach (const TypeOfExpression::Result &result, results) {
if (result.first->isClass()) {
FullySpecifiedType exprTy = result.first;
- if (completeConstructors(exprTy->asClass()))
+ if (completeConstructorOrFunction(exprTy, QList<TypeOfExpression::Result>()))
return m_startPosition;
break;
}
@@ -563,18 +563,29 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
return -1;
}
-bool CppCodeCompletion::completeFunction(FullySpecifiedType exprTy,
- const QList<TypeOfExpression::Result> &resolvedTypes,
- const LookupContext &)
+bool CppCodeCompletion::completeConstructorOrFunction(FullySpecifiedType exprTy,
+ const QList<TypeOfExpression::Result> &resolvedTypes)
{
+ ConvertToCompletionItem toCompletionItem(this);
+ Overview o;
+ o.setShowReturnTypes(true);
+ o.setShowArgumentNames(true);
+
if (Class *klass = exprTy->asClass()) {
- completeConstructors(klass);
+ for (unsigned i = 0; i < klass->memberCount(); ++i) {
+ Symbol *member = klass->memberAt(i);
+ if (! member->type()->isFunction())
+ 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);
+ }
+ }
} else {
- ConvertToCompletionItem toCompletionItem(this);
- Overview o;
- o.setShowReturnTypes(true);
- o.setShowArgumentNames(true);
-
QSet<QString> signatures;
foreach (TypeOfExpression::Result p, resolvedTypes) {
FullySpecifiedType ty = p.first;
@@ -594,6 +605,10 @@ bool CppCodeCompletion::completeFunction(FullySpecifiedType exprTy,
}
}
+ // If there is only one item, show the function argument widget immediately
+ if (m_completions.size() == 1)
+ complete(m_completions.takeFirst());
+
return ! m_completions.isEmpty();
}
@@ -887,30 +902,6 @@ void CppCodeCompletion::completeClass(const QList<Symbol *> &candidates,
}
}
-bool CppCodeCompletion::completeConstructors(Class *klass)
-{
- ConvertToCompletionItem toCompletionItem(this);
- Overview o;
- o.setShowReturnTypes(true);
- o.setShowArgumentNames(true);
-
- for (unsigned i = 0; i < klass->memberCount(); ++i) {
- Symbol *member = klass->memberAt(i);
- if (! member->type()->isFunction())
- 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);
- }
- }
-
- return ! m_completions.isEmpty();
-}
-
bool CppCodeCompletion::completeQtMethod(CPlusPlus::FullySpecifiedType,
const QList<TypeOfExpression::Result> &results,
const LookupContext &context,