diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index 8653d7820f629f941cd08cc761bb26cc882c940b..5c656f3d57c47d4e198f822320d3b2c481c74715 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -427,7 +427,7 @@ bool ResolveExpression::visit(UnaryExpressionAST *ast) bool ResolveExpression::visit(QualifiedNameAST *ast) { - SymbolsForDotAccess symbolsForDotAcces; + ResolveClass symbolsForDotAcces; Scope dummy; Name *name = sem.check(ast, &dummy); @@ -537,7 +537,7 @@ bool ResolveExpression::visit(ArrayAccessAST *ast) _results.clear(); const QList<Result> indexResults = operator()(ast->expression); - SymbolsForDotAccess symbolsForDotAcccess; + ResolveClass symbolsForDotAcccess; foreach (Result p, baseResults) { FullySpecifiedType ty = p.first; @@ -595,7 +595,7 @@ ResolveExpression::resolveMemberExpression(const QList<Result> &baseResults, unsigned accessOp, Name *memberName) const { - SymbolsForDotAccess symbolsForDotAccess; + ResolveClass resolveClass; QList<Result> results; if (accessOp == T_ARROW) { @@ -607,7 +607,7 @@ ResolveExpression::resolveMemberExpression(const QList<Result> &baseResults, if (NamedType *namedTy = ty->asNamedType()) { const QList<Symbol *> classObjectCandidates = - symbolsForDotAccess(namedTy, p, _context); + resolveClass(namedTy, p, _context); foreach (Symbol *classObject, classObjectCandidates) { const QList<Result> overloads = resolveArrowOperator(p, namedTy, @@ -667,10 +667,10 @@ ResolveExpression::resolveMember(const Result &p, Name *memberName, NamedType *namedTy) const { - SymbolsForDotAccess symbolsForDotAccess; + ResolveClass resolveClass; const QList<Symbol *> classObjectCandidates = - symbolsForDotAccess(namedTy, p, _context); + resolveClass(namedTy, p, _context); QList<Result> results; foreach (Symbol *classObject, classObjectCandidates) { @@ -799,29 +799,29 @@ bool ResolveExpression::visit(PostIncrDecrAST *) } //////////////////////////////////////////////////////////////////////////////// -SymbolsForDotAccess::SymbolsForDotAccess() +ResolveClass::ResolveClass() { } -QList<Symbol *> SymbolsForDotAccess::operator()(NamedType *namedTy, +QList<Symbol *> ResolveClass::operator()(NamedType *namedTy, ResolveExpression::Result p, const LookupContext &context) { const QList<ResolveExpression::Result> previousBlackList = _blackList; - const QList<Symbol *> symbols = symbolsForDotAccess(namedTy, p, context); + const QList<Symbol *> symbols = resolveClass(namedTy, p, context); _blackList = previousBlackList; return symbols; } -QList<Symbol *> SymbolsForDotAccess::operator()(ResolveExpression::Result p, +QList<Symbol *> ResolveClass::operator()(ResolveExpression::Result p, const LookupContext &context) { const QList<ResolveExpression::Result> previousBlackList = _blackList; - const QList<Symbol *> symbols = symbolsForDotAccess(p, context); + const QList<Symbol *> symbols = resolveClass(p, context); _blackList = previousBlackList; return symbols; } -QList<Symbol *> SymbolsForDotAccess::symbolsForDotAccess(NamedType *namedTy, +QList<Symbol *> ResolveClass::resolveClass(NamedType *namedTy, ResolveExpression::Result p, const LookupContext &context) { @@ -852,7 +852,7 @@ QList<Symbol *> SymbolsForDotAccess::symbolsForDotAccess(NamedType *namedTy, // Boh b; // b. const ResolveExpression::Result r(decl->type(), decl); - resolvedSymbols += symbolsForDotAccess(r, context); + resolvedSymbols += resolveClass(r, context); } } } else if (Declaration *decl = candidate->asDeclaration()) { @@ -861,7 +861,7 @@ QList<Symbol *> SymbolsForDotAccess::symbolsForDotAccess(NamedType *namedTy, // foo. if (funTy->scope()->isBlockScope() || funTy->scope()->isNamespaceScope()) { const ResolveExpression::Result r(funTy->returnType(), decl); - resolvedSymbols += symbolsForDotAccess(r, context); + resolvedSymbols += resolveClass(r, context); } } } @@ -870,16 +870,16 @@ QList<Symbol *> SymbolsForDotAccess::symbolsForDotAccess(NamedType *namedTy, return resolvedSymbols; } -QList<Symbol *> SymbolsForDotAccess::symbolsForDotAccess(ResolveExpression::Result p, +QList<Symbol *> ResolveClass::resolveClass(ResolveExpression::Result p, const LookupContext &context) { FullySpecifiedType ty = p.first; if (NamedType *namedTy = ty->asNamedType()) { - return symbolsForDotAccess(namedTy, p, context); + return resolveClass(namedTy, p, context); } else if (ReferenceType *refTy = ty->asReferenceType()) { const ResolveExpression::Result e(refTy->elementType(), p.second); - return symbolsForDotAccess(e, context); + return resolveClass(e, context); } return QList<Symbol *>(); diff --git a/src/libs/cplusplus/ResolveExpression.h b/src/libs/cplusplus/ResolveExpression.h index ff98b7344d78635a3febe126d718f59c2cc12a8b..e7cf1c0a3af41b6c53a17c24f0e99e3d07346995 100644 --- a/src/libs/cplusplus/ResolveExpression.h +++ b/src/libs/cplusplus/ResolveExpression.h @@ -128,10 +128,10 @@ private: QList<Result> _results; }; -class CPLUSPLUS_EXPORT SymbolsForDotAccess +class CPLUSPLUS_EXPORT ResolveClass { public: - SymbolsForDotAccess(); + ResolveClass(); QList<Symbol *> operator()(NamedType *namedTy, ResolveExpression::Result p, @@ -141,11 +141,11 @@ public: const LookupContext &context); private: - QList<Symbol *> symbolsForDotAccess(NamedType *namedTy, + QList<Symbol *> resolveClass(NamedType *namedTy, ResolveExpression::Result p, const LookupContext &context); - QList<Symbol *> symbolsForDotAccess(ResolveExpression::Result p, + QList<Symbol *> resolveClass(ResolveExpression::Result p, const LookupContext &context); private: diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index ab389d0a3b311c8fcc45ed5d15fdc8615753bcc5..5ceecf9148299e761bb2ede0ce5dba0d874794aa 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -592,10 +592,9 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re if (NamedType *namedTy = ty->asNamedType()) { ResolveExpression resolveExpression(context); - SymbolsForDotAccess symbolsForDotAccess; + ResolveClass resolveClass; - const QList<Symbol *> candidates = symbolsForDotAccess(namedTy, p, - context); + const QList<Symbol *> candidates = resolveClass(namedTy, p, context); foreach (Symbol *classObject, candidates) { const QList<TypeOfExpression::Result> overloads = @@ -616,7 +615,7 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re if (PointerType *ptrTy = ty->asPointerType()) { if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) { const QList<Symbol *> classes = - symbolsForDotAccess(namedTy, p, context); + resolveClass(namedTy, p, context); foreach (Symbol *c, classes) { if (! classObjectCandidates.contains(c)) @@ -628,9 +627,9 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re } } else if (PointerType *ptrTy = ty->asPointerType()) { if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) { - SymbolsForDotAccess symbolsForDotAccess; + ResolveClass resolveClass; - const QList<Symbol *> classes = symbolsForDotAccess(namedTy, p, + const QList<Symbol *> classes = resolveClass(namedTy, p, context); foreach (Symbol *c, classes) { @@ -663,8 +662,8 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re } if (namedTy) { - SymbolsForDotAccess symbolsForDotAccess; - const QList<Symbol *> symbols = symbolsForDotAccess(namedTy, p, context); + ResolveClass resolveClass; + const QList<Symbol *> symbols = resolveClass(namedTy, p, context); foreach (Symbol *symbol, symbols) { if (classObjectCandidates.contains(symbol)) continue; @@ -715,8 +714,8 @@ bool CppCodeCompletion::completeScope(const QList<TypeOfExpression::Result> &res completeClass(candidates, context); } else if (Symbol *symbol = result.second) { if (symbol->isTypedef()) { - SymbolsForDotAccess symbolsForDotAccess; - const QList<Symbol *> candidates = symbolsForDotAccess(result, + ResolveClass resolveClass; + const QList<Symbol *> candidates = resolveClass(result, context); completeClass(candidates, context); } @@ -829,6 +828,8 @@ bool CppCodeCompletion::completeQtMethod(CPlusPlus::FullySpecifiedType, if (results.isEmpty()) return false; + ResolveClass resolveClass; + ConvertToCompletionItem toCompletionItem(this); Overview o; o.setShowReturnTypes(false); @@ -849,10 +850,8 @@ bool CppCodeCompletion::completeQtMethod(CPlusPlus::FullySpecifiedType, if (! namedTy) // not a class name. continue; - const QList<Scope *> visibleScopes = context.visibleScopes(p); - const QList<Symbol *> classObjects = - context.resolveClass(namedTy->name(), visibleScopes); + resolveClass(namedTy, p, context); if (classObjects.isEmpty()) continue; @@ -860,6 +859,7 @@ bool CppCodeCompletion::completeQtMethod(CPlusPlus::FullySpecifiedType, Class *klass = classObjects.first()->asClass(); QList<Scope *> todo; + const QList<Scope *> visibleScopes = context.visibleScopes(p); context.expand(klass->members(), visibleScopes, &todo); foreach (Scope *scope, todo) {