diff --git a/src/plugins/cppeditor/cppchecksymbols.cpp b/src/plugins/cppeditor/cppchecksymbols.cpp index 923928063ee13c9bb08b149e6d71b62db45a549f..c62d18f064d6317b297e2cecaee60901c2403e33 100644 --- a/src/plugins/cppeditor/cppchecksymbols.cpp +++ b/src/plugins/cppeditor/cppchecksymbols.cpp @@ -780,10 +780,6 @@ void CheckSymbols::addType(const QList &candidates, NameAST *ast) if (tok.generated()) return; - unsigned line, column; - getTokenStartPosition(startToken, &line, &column); - const unsigned length = tok.length(); - foreach (const LookupItem &r, candidates) { Symbol *c = r.declaration(); if (c->isUsingDeclaration()) // skip using declarations... @@ -793,6 +789,11 @@ void CheckSymbols::addType(const QList &candidates, NameAST *ast) else if (c->isTypedef() || c->isNamespace() || c->isClass() || c->isEnum() || c->isForwardClassDeclaration() || c->isTypenameArgument()) { + + unsigned line, column; + getTokenStartPosition(startToken, &line, &column); + const unsigned length = tok.length(); + const Use use(line, column, length, Use::Type); addUse(use); //qDebug() << "added use" << oo(ast->name) << line << column << length; @@ -811,10 +812,6 @@ void CheckSymbols::addClassMember(const QList &candidates, NameAST * if (tok.generated()) return; - unsigned line, column; - getTokenStartPosition(startToken, &line, &column); - const unsigned length = tok.length(); - foreach (const LookupItem &r, candidates) { Symbol *c = r.declaration(); if (! c) @@ -826,6 +823,10 @@ void CheckSymbols::addClassMember(const QList &candidates, NameAST * else if (c->isTypedef() || c->type()->isFunctionType()) return; // shadowed + unsigned line, column; + getTokenStartPosition(startToken, &line, &column); + const unsigned length = tok.length(); + const Use use(line, column, length, Use::Field); addUse(use); break; @@ -842,10 +843,6 @@ void CheckSymbols::addVirtualMethod(const QList &candidates, NameAST if (tok.generated()) return; - unsigned line, column; - getTokenStartPosition(startToken, &line, &column); - const unsigned length = tok.length(); - foreach (const LookupItem &r, candidates) { Symbol *c = r.declaration(); if (! c) @@ -858,6 +855,14 @@ void CheckSymbols::addVirtualMethod(const QList &candidates, NameAST continue; else if (argumentCount < funTy->minimumArgumentCount()) continue; + else if (argumentCount > funTy->argumentCount()) { + if (! funTy->isVariadic()) + continue; + } + + unsigned line, column; + getTokenStartPosition(startToken, &line, &column); + const unsigned length = tok.length(); const Use use(line, column, length, Use::VirtualMethod); addUse(use);