diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index 1f4dc9c51af0b2d947e5b3dd8d181f859486c5a7..a4d1de3afad34719d7dce3436180d0f83ec99811 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -794,9 +794,31 @@ bool ResolveExpression::visit(PostIncrDecrAST *) } //////////////////////////////////////////////////////////////////////////////// +SymbolsForDotAccess::SymbolsForDotAccess() +{ } + QList<Symbol *> SymbolsForDotAccess::operator()(NamedType *namedTy, ResolveExpression::Result p, const LookupContext &context) +{ + const QList<ResolveExpression::Result> previousBlackList = _blackList; + const QList<Symbol *> symbols = symbolsForDotAccess(namedTy, p, context); + _blackList = previousBlackList; + return symbols; +} + +QList<Symbol *> SymbolsForDotAccess::operator()(ResolveExpression::Result p, + const LookupContext &context) +{ + const QList<ResolveExpression::Result> previousBlackList = _blackList; + const QList<Symbol *> symbols = symbolsForDotAccess(p, context); + _blackList = previousBlackList; + return symbols; +} + +QList<Symbol *> SymbolsForDotAccess::symbolsForDotAccess(NamedType *namedTy, + ResolveExpression::Result p, + const LookupContext &context) { QList<Symbol *> resolvedSymbols; @@ -825,7 +847,7 @@ QList<Symbol *> SymbolsForDotAccess::operator()(NamedType *namedTy, // Boh b; // b. const ResolveExpression::Result r(decl->type(), decl); - resolvedSymbols += operator()(r, context); + resolvedSymbols += symbolsForDotAccess(r, context); } } } else if (Declaration *decl = candidate->asDeclaration()) { @@ -834,7 +856,7 @@ QList<Symbol *> SymbolsForDotAccess::operator()(NamedType *namedTy, // foo. if (funTy->scope()->isBlockScope() || funTy->scope()->isNamespaceScope()) { const ResolveExpression::Result r(funTy->returnType(), decl); - resolvedSymbols += operator()(r, context); + resolvedSymbols += symbolsForDotAccess(r, context); } } } @@ -843,16 +865,16 @@ QList<Symbol *> SymbolsForDotAccess::operator()(NamedType *namedTy, return resolvedSymbols; } -QList<Symbol *> SymbolsForDotAccess::operator()(ResolveExpression::Result p, - const LookupContext &context) +QList<Symbol *> SymbolsForDotAccess::symbolsForDotAccess(ResolveExpression::Result p, + const LookupContext &context) { FullySpecifiedType ty = p.first; if (NamedType *namedTy = ty->asNamedType()) { - return operator()(namedTy, p, context); + return symbolsForDotAccess(namedTy, p, context); } else if (ReferenceType *refTy = ty->asReferenceType()) { const ResolveExpression::Result e(refTy->elementType(), p.second); - return operator()(e, context); + return symbolsForDotAccess(e, context); } return QList<Symbol *>(); diff --git a/src/libs/cplusplus/ResolveExpression.h b/src/libs/cplusplus/ResolveExpression.h index 35a32c84655e604503d8ba53657353a81fa26e09..ff98b7344d78635a3febe126d718f59c2cc12a8b 100644 --- a/src/libs/cplusplus/ResolveExpression.h +++ b/src/libs/cplusplus/ResolveExpression.h @@ -130,15 +130,26 @@ private: class CPLUSPLUS_EXPORT SymbolsForDotAccess { - QList<ResolveExpression::Result> _blackList; - public: + SymbolsForDotAccess(); + QList<Symbol *> operator()(NamedType *namedTy, ResolveExpression::Result p, const LookupContext &context); QList<Symbol *> operator()(ResolveExpression::Result p, const LookupContext &context); + +private: + QList<Symbol *> symbolsForDotAccess(NamedType *namedTy, + ResolveExpression::Result p, + const LookupContext &context); + + QList<Symbol *> symbolsForDotAccess(ResolveExpression::Result p, + const LookupContext &context); + +private: + QList<ResolveExpression::Result> _blackList; };