diff options
Diffstat (limited to 'src/plugins/cpptools/cppchecksymbols.cpp')
-rw-r--r-- | src/plugins/cpptools/cppchecksymbols.cpp | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/plugins/cpptools/cppchecksymbols.cpp b/src/plugins/cpptools/cppchecksymbols.cpp index a2d1d6dcf0..f7bbb98885 100644 --- a/src/plugins/cpptools/cppchecksymbols.cpp +++ b/src/plugins/cpptools/cppchecksymbols.cpp @@ -33,7 +33,7 @@ #include "cppchecksymbols.h" #include "cpplocalsymbols.h" -#include <cplusplus/Overview.h> +#include <cplusplus/SimpleLexer.h> #include <Names.h> #include <Literals.h> @@ -284,16 +284,21 @@ protected: } // end of anonymous namespace -CheckSymbols::Future CheckSymbols::go(Document::Ptr doc, const LookupContext &context) +static bool sortByLinePredicate(const CheckSymbols::Use &lhs, const CheckSymbols::Use &rhs) +{ + return lhs.line < rhs.line; +} + +CheckSymbols::Future CheckSymbols::go(Document::Ptr doc, const LookupContext &context, const QList<CheckSymbols::Use> ¯oUses) { QTC_ASSERT(doc, return Future()); - return (new CheckSymbols(doc, context))->start(); + return (new CheckSymbols(doc, context, macroUses))->start(); } -CheckSymbols::CheckSymbols(Document::Ptr doc, const LookupContext &context) +CheckSymbols::CheckSymbols(Document::Ptr doc, const LookupContext &context, const QList<CheckSymbols::Use> ¯oUses) : ASTVisitor(doc->translationUnit()), _doc(doc), _context(context) - , _lineOfLastUsage(0) + , _lineOfLastUsage(0), _macroUses(macroUses) { CollectSymbols collectTypes(doc, context.snapshot()); @@ -311,11 +316,13 @@ CheckSymbols::~CheckSymbols() void CheckSymbols::run() { + qSort(_macroUses.begin(), _macroUses.end(), sortByLinePredicate); _diagnosticMessages.clear(); if (! isCanceled()) { if (_doc->translationUnit()) { accept(_doc->translationUnit()->ast()); + _usages << QVector<Use>::fromList(_macroUses); flush(); } } @@ -876,6 +883,9 @@ void CheckSymbols::addUse(const Use &use) } } + while (!_macroUses.isEmpty() && _macroUses.first().line <= use.line) + _usages.append(_macroUses.takeFirst()); + _lineOfLastUsage = qMax(_lineOfLastUsage, use.line); _usages.append(use); } @@ -1115,11 +1125,6 @@ bool CheckSymbols::maybeVirtualMethod(const Name *name) const return false; } -static bool sortByLinePredicate(const CheckSymbols::Use &lhs, const CheckSymbols::Use &rhs) -{ - return lhs.line < rhs.line; -} - void CheckSymbols::flush() { _lineOfLastUsage = 0; |