This commit is contained in:
Roberto Raggi
2009-02-17 12:12:14 +01:00
parent c2f61a76e1
commit 7044809139
2 changed files with 18 additions and 26 deletions

View File

@@ -512,22 +512,21 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
context = typeOfExpression.lookupContext(); context = typeOfExpression.lookupContext();
} }
if (! resolvedTypes.isEmpty() && resolvedTypes.first().first) { if (! resolvedTypes.isEmpty()) {
FullySpecifiedType exprTy = resolvedTypes.first().first; if (m_completionOperator == T_LPAREN && completeConstructorOrFunction(resolvedTypes)) {
if (exprTy->isReferenceType())
exprTy = exprTy->asReferenceType()->elementType();
if (m_completionOperator == T_LPAREN && completeConstructorOrFunction(exprTy, resolvedTypes)) {
return m_startPosition; return m_startPosition;
} else if ((m_completionOperator == T_DOT || m_completionOperator == T_ARROW) && } else if ((m_completionOperator == T_DOT || m_completionOperator == T_ARROW) &&
completeMember(resolvedTypes, context)) { completeMember(resolvedTypes, context)) {
return m_startPosition; return m_startPosition;
} else if (m_completionOperator == T_COLON_COLON && completeScope(resolvedTypes, context)) { } else if (m_completionOperator == T_COLON_COLON && completeScope(resolvedTypes, context)) {
return m_startPosition; return m_startPosition;
} else if (m_completionOperator == T_SIGNAL && completeSignal(exprTy, resolvedTypes, context)) {
} else if (m_completionOperator == T_SIGNAL && completeSignal(resolvedTypes, context)) {
return m_startPosition; return m_startPosition;
} else if (m_completionOperator == T_SLOT && completeSlot(exprTy, resolvedTypes, context)) {
} else if (m_completionOperator == T_SLOT && completeSlot(resolvedTypes, context)) {
return m_startPosition; return m_startPosition;
} }
} }
@@ -550,8 +549,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
// If it's a class, add completions for the constructors // If it's a class, add completions for the constructors
foreach (const TypeOfExpression::Result &result, results) { foreach (const TypeOfExpression::Result &result, results) {
if (result.first->isClassType()) { if (result.first->isClassType()) {
FullySpecifiedType exprTy = result.first; if (completeConstructorOrFunction(results))
if (completeConstructorOrFunction(exprTy, QList<TypeOfExpression::Result>()))
return m_startPosition; return m_startPosition;
break; break;
} }
@@ -563,8 +561,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
return -1; return -1;
} }
bool CppCodeCompletion::completeConstructorOrFunction(FullySpecifiedType, bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpression::Result> &results)
const QList<TypeOfExpression::Result> &results)
{ {
ConvertToCompletionItem toCompletionItem(this); ConvertToCompletionItem toCompletionItem(this);
Overview o; Overview o;
@@ -924,8 +921,7 @@ void CppCodeCompletion::completeClass(const QList<Symbol *> &candidates,
} }
} }
bool CppCodeCompletion::completeQtMethod(CPlusPlus::FullySpecifiedType, bool CppCodeCompletion::completeQtMethod(const QList<TypeOfExpression::Result> &results,
const QList<TypeOfExpression::Result> &results,
const LookupContext &context, const LookupContext &context,
bool wantSignals) bool wantSignals)
{ {
@@ -941,7 +937,7 @@ bool CppCodeCompletion::completeQtMethod(CPlusPlus::FullySpecifiedType,
o.setShowFunctionSignatures(true); o.setShowFunctionSignatures(true);
QSet<QString> signatures; QSet<QString> signatures;
foreach (TypeOfExpression::Result p, results) { foreach (const TypeOfExpression::Result &p, results) {
FullySpecifiedType ty = p.first; FullySpecifiedType ty = p.first;
if (ReferenceType *refTy = ty->asReferenceType()) if (ReferenceType *refTy = ty->asReferenceType())
ty = refTy->elementType(); ty = refTy->elementType();

View File

@@ -90,8 +90,7 @@ private:
QSet<QString> *definedMacros); QSet<QString> *definedMacros);
void addCompletionItem(CPlusPlus::Symbol *symbol); void addCompletionItem(CPlusPlus::Symbol *symbol);
bool completeConstructorOrFunction(CPlusPlus::FullySpecifiedType exprTy, bool completeConstructorOrFunction(const QList<CPlusPlus::TypeOfExpression::Result> &);
const QList<CPlusPlus::TypeOfExpression::Result> &);
bool completeMember(const QList<CPlusPlus::TypeOfExpression::Result> &, bool completeMember(const QList<CPlusPlus::TypeOfExpression::Result> &,
const CPlusPlus::LookupContext &context); const CPlusPlus::LookupContext &context);
@@ -108,20 +107,17 @@ private:
bool completeConstructors(CPlusPlus::Class *klass); bool completeConstructors(CPlusPlus::Class *klass);
bool completeQtMethod(CPlusPlus::FullySpecifiedType exprTy, bool completeQtMethod(const QList<CPlusPlus::TypeOfExpression::Result> &,
const QList<CPlusPlus::TypeOfExpression::Result> &,
const CPlusPlus::LookupContext &context, const CPlusPlus::LookupContext &context,
bool wantSignals); bool wantSignals);
bool completeSignal(CPlusPlus::FullySpecifiedType exprTy, bool completeSignal(const QList<CPlusPlus::TypeOfExpression::Result> &results,
const QList<CPlusPlus::TypeOfExpression::Result> &results,
const CPlusPlus::LookupContext &context) const CPlusPlus::LookupContext &context)
{ return completeQtMethod(exprTy, results, context, true); } { return completeQtMethod(results, context, true); }
bool completeSlot(CPlusPlus::FullySpecifiedType exprTy, bool completeSlot(const QList<CPlusPlus::TypeOfExpression::Result> &results,
const QList<CPlusPlus::TypeOfExpression::Result> &results,
const CPlusPlus::LookupContext &context) const CPlusPlus::LookupContext &context)
{ return completeQtMethod(exprTy, results, context, false); } { return completeQtMethod(results, context, false); }
int findStartOfName(int pos = -1) const; int findStartOfName(int pos = -1) const;