diff --git a/src/plugins/cppeditor/cppchecksymbols.cpp b/src/plugins/cppeditor/cppchecksymbols.cpp index 0e9af30b3929eb46b3fcdd4473bfffa497c47a78..635ddb6285c5da6971667e7b6f979d6b435a1f54 100644 --- a/src/plugins/cppeditor/cppchecksymbols.cpp +++ b/src/plugins/cppeditor/cppchecksymbols.cpp @@ -268,6 +268,8 @@ CheckSymbols::CheckSymbols(Document::Ptr doc, const LookupContext &context) CollectTypes collectTypes(doc, context.snapshot()); _potentialTypes = collectTypes.types(); _scopes = collectTypes.scopes(); + _flushRequested = false; + _flushLine = 0; } CheckSymbols::~CheckSymbols() @@ -473,10 +475,16 @@ void CheckSymbols::endVisit(TemplateDeclarationAST *) void CheckSymbols::addTypeUsage(const Use &use) { - _typeUsages.append(use); + if (_typeUsages.size() >= 50) { + if (_flushRequested && use.line != _flushLine) + flush(); + else if (! _flushRequested) { + _flushRequested = true; + _flushLine = use.line; + } + } - if (_typeUsages.size() == 50) - flush(); + _typeUsages.append(use); } void CheckSymbols::addTypeUsage(ClassOrNamespace *b, NameAST *ast) @@ -563,6 +571,9 @@ Scope *CheckSymbols::findScope(AST *ast) const void CheckSymbols::flush() { + _flushRequested = false; + _flushLine = 0; + if (_typeUsages.isEmpty()) return; diff --git a/src/plugins/cppeditor/cppchecksymbols.h b/src/plugins/cppeditor/cppchecksymbols.h index 1e5d74c1b3246dd45032ab5b77168a5111d47dfb..876132ab3f42adb5357b0799269602cdf36ff0d1 100644 --- a/src/plugins/cppeditor/cppchecksymbols.h +++ b/src/plugins/cppeditor/cppchecksymbols.h @@ -119,6 +119,8 @@ private: QList<ScopedSymbol *> _scopes; QList<TemplateDeclarationAST *> _templateDeclarationStack; QVector<Use> _typeUsages; + bool _flushRequested; + unsigned _flushLine; }; } // end of namespace CPlusPlus