From 9318ff735cad16f1dcffea67a803e6aa64ccefd1 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Thu, 15 Jul 2010 13:41:51 +0200
Subject: [PATCH] Ensure the chunks are completed.

---
 src/plugins/cppeditor/cppchecksymbols.cpp | 17 ++++++++++++++---
 src/plugins/cppeditor/cppchecksymbols.h   |  2 ++
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/plugins/cppeditor/cppchecksymbols.cpp b/src/plugins/cppeditor/cppchecksymbols.cpp
index 0e9af30b392..635ddb6285c 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 1e5d74c1b32..876132ab3f4 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
-- 
GitLab