diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index 1aaf2f5217b..a0d0ef83621 100644 --- a/src/libs/cplusplus/CppDocument.cpp +++ b/src/libs/cplusplus/CppDocument.cpp @@ -44,6 +44,7 @@ #include #include +#include #include #include #include @@ -834,7 +835,23 @@ Document::Ptr Snapshot::documentFromSource(const QByteArray &preprocessedCode, QSet Snapshot::allIncludesForDocument(const QString &fileName) const { QSet result; - allIncludesForDocument_helper(fileName, result); + + QStack files; + files.push(fileName); + + while (!files.isEmpty()) { + QString file = files.pop(); + if (Document::Ptr doc = document(file)) { + const QStringList includedFiles = doc->includedFiles(); + for (const QString &inc : includedFiles) { + if (!result.contains(inc)) { + result.insert(inc); + files.push(inc); + } + } + } + } + return result; } @@ -868,18 +885,6 @@ bool Snapshot::operator==(const Snapshot &other) const return _documents == other._documents; } -void Snapshot::allIncludesForDocument_helper(const QString &fileName, QSet &result) const -{ - if (Document::Ptr doc = document(fileName)) { - foreach (const QString &inc, doc->includedFiles()) { - if (!result.contains(inc)) { - result.insert(inc); - allIncludesForDocument_helper(inc, result); - } - } - } -} - Document::Ptr Snapshot::document(const Utils::FilePath &fileName) const { return _documents.value(fileName); diff --git a/src/libs/cplusplus/CppDocument.h b/src/libs/cplusplus/CppDocument.h index 622753e3d54..3829d6f4ce2 100644 --- a/src/libs/cplusplus/CppDocument.h +++ b/src/libs/cplusplus/CppDocument.h @@ -450,8 +450,6 @@ public: bool operator==(const Snapshot &other) const; private: - void allIncludesForDocument_helper(const QString &fileName, QSet &result) const; - mutable DependencyTable m_deps; Base _documents; };