diff options
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; +} |