summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/CppDocument.cpp
diff options
context:
space:
mode:
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;
+}