diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2013-04-11 12:51:06 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2013-04-16 11:56:18 +0200 |
commit | a0d6df7bd85bf88e4ac3643d97d35e04389f6309 (patch) | |
tree | ea52bcf565d13eacf7646b1b89403e072c3e311e /src/libs/cplusplus/CppDocument.cpp | |
parent | c39b582e58922c8329fff710fb57b7e8fa516a49 (diff) | |
download | qt-creator-a0d6df7bd85bf88e4ac3643d97d35e04389f6309.tar.gz |
C++: also refresh files not in the project when project changes.
System headers and other file which are not explicitly mentioned in the
project must be reparsed when the project changes.
Task-number: QTCREATORBUG-9056
Change-Id: I32f1206d241a078a4d9b15fac5813f365a1ba303
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Diffstat (limited to 'src/libs/cplusplus/CppDocument.cpp')
-rw-r--r-- | src/libs/cplusplus/CppDocument.cpp | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index 2385238b9c..13c0b3f6ad 100644 --- a/src/libs/cplusplus/CppDocument.cpp +++ b/src/libs/cplusplus/CppDocument.cpp @@ -705,30 +705,40 @@ Document::Ptr Snapshot::documentFromSource(const QByteArray &preprocessedCode, return newDoc; } -Document::Ptr Snapshot::document(const QString &fileName) const +QSet<QString> Snapshot::allIncludesForDocument(const QString &fileName) const { - return _documents.value(fileName); + QSet<QString> result; + allIncludesForDocument_helper(fileName, result); + return result; } -Snapshot Snapshot::simplified(Document::Ptr doc) const +void Snapshot::allIncludesForDocument_helper(const QString &fileName, QSet<QString> &result) const { - Snapshot snapshot; - simplified_helper(doc, &snapshot); - return snapshot; + if (Document::Ptr doc = document(fileName)) { + foreach (const QString &inc, doc->includedFiles()) { + if (!result.contains(inc)) { + result.insert(inc); + allIncludesForDocument_helper(inc, result); + } + } + } } -void Snapshot::simplified_helper(Document::Ptr doc, Snapshot *snapshot) const +Document::Ptr Snapshot::document(const QString &fileName) const { - if (! doc) - return; + return _documents.value(fileName); +} - if (! snapshot->contains(doc->fileName())) { - snapshot->insert(doc); +Snapshot Snapshot::simplified(Document::Ptr doc) const +{ + Snapshot snapshot; - foreach (const Document::Include &incl, doc->includes()) { - Document::Ptr includedDoc = document(incl.fileName()); - simplified_helper(includedDoc, snapshot); - } + if (doc) { + snapshot.insert(doc); + foreach (const QString &fileName, allIncludesForDocument(doc->fileName())) + if (Document::Ptr inc = document(fileName)) + snapshot.insert(inc); } -} + return snapshot; +} |