summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/CppDocument.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2013-04-11 12:51:06 +0200
committerNikolai Kosjar <nikolai.kosjar@digia.com>2013-04-16 11:56:18 +0200
commita0d6df7bd85bf88e4ac3643d97d35e04389f6309 (patch)
treeea52bcf565d13eacf7646b1b89403e072c3e311e /src/libs/cplusplus/CppDocument.cpp
parentc39b582e58922c8329fff710fb57b7e8fa516a49 (diff)
downloadqt-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.cpp42
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;
+}