diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 947bea8f6f7081c9c6bea567de52c2183854331e..ab389d0a3b311c8fcc45ed5d15fdc8615753bcc5 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -513,7 +513,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) if (m_completionOperator == T_LPAREN && completeFunction(exprTy, resolvedTypes, context)) { return m_startPosition; } if ((m_completionOperator == T_DOT || m_completionOperator == T_ARROW) && - completeMember(exprTy, resolvedTypes, context)) { + completeMember(resolvedTypes, context)) { return m_startPosition; } else if (m_completionOperator == T_COLON_COLON && completeScope(resolvedTypes, context)) { return m_startPosition; @@ -575,8 +575,7 @@ bool CppCodeCompletion::completeFunction(FullySpecifiedType exprTy, return ! m_completions.isEmpty(); } -bool CppCodeCompletion::completeMember(FullySpecifiedType, - const QList<TypeOfExpression::Result> &results, +bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &results, const LookupContext &context) { if (results.isEmpty()) @@ -593,10 +592,10 @@ bool CppCodeCompletion::completeMember(FullySpecifiedType, if (NamedType *namedTy = ty->asNamedType()) { ResolveExpression resolveExpression(context); + SymbolsForDotAccess symbolsForDotAccess; - Name *className = namedTy->name(); - const QList<Symbol *> candidates = - context.resolveClass(className, context.visibleScopes(p)); + const QList<Symbol *> candidates = symbolsForDotAccess(namedTy, p, + context); foreach (Symbol *classObject, candidates) { const QList<TypeOfExpression::Result> overloads = @@ -617,8 +616,7 @@ bool CppCodeCompletion::completeMember(FullySpecifiedType, if (PointerType *ptrTy = ty->asPointerType()) { if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) { const QList<Symbol *> classes = - context.resolveClass(namedTy->name(), - context.visibleScopes(p)); + symbolsForDotAccess(namedTy, p, context); foreach (Symbol *c, classes) { if (! classObjectCandidates.contains(c)) @@ -630,9 +628,10 @@ bool CppCodeCompletion::completeMember(FullySpecifiedType, } } else if (PointerType *ptrTy = ty->asPointerType()) { if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) { - const QList<Symbol *> classes = - context.resolveClass(namedTy->name(), - context.visibleScopes(p)); + SymbolsForDotAccess symbolsForDotAccess; + + const QList<Symbol *> classes = symbolsForDotAccess(namedTy, p, + context); foreach (Symbol *c, classes) { if (! classObjectCandidates.contains(c)) @@ -652,7 +651,7 @@ bool CppCodeCompletion::completeMember(FullySpecifiedType, int length = m_editor->position() - m_startPosition + 1; m_editor->setCurPos(m_startPosition - 1); m_editor->replace(length, QLatin1String("->")); - m_startPosition++; + ++m_startPosition; namedTy = ptrTy->elementType()->asNamedType(); } else { namedTy = ty->asNamedType(); diff --git a/src/plugins/cpptools/cppcodecompletion.h b/src/plugins/cpptools/cppcodecompletion.h index faaaec3570bf7a3c9d9825f174e9d63c0604782d..5720adbbc513473e90ee9de973b615c08297514f 100644 --- a/src/plugins/cpptools/cppcodecompletion.h +++ b/src/plugins/cpptools/cppcodecompletion.h @@ -96,8 +96,7 @@ private: const QList<CPlusPlus::TypeOfExpression::Result> &, const CPlusPlus::LookupContext &context); - bool completeMember(CPlusPlus::FullySpecifiedType exprTy, - const QList<CPlusPlus::TypeOfExpression::Result> &, + bool completeMember(const QList<CPlusPlus::TypeOfExpression::Result> &, const CPlusPlus::LookupContext &context); bool completeScope(const QList<CPlusPlus::TypeOfExpression::Result> &,