diff options
author | Igor Sidorov <fliyfzen@gmail.com> | 2020-01-31 01:07:39 +0300 |
---|---|---|
committer | Igor Sidorov <fliyfzen@gmail.com> | 2020-02-05 09:34:07 +0000 |
commit | 3449618a85c6885b56f5fff3b5d3877accb9dd0f (patch) | |
tree | 0db6dc0e5b4fe20b89bb3ba1a054259ad2cc8fcd /src/libs/cplusplus/CppDocument.cpp | |
parent | a9e40ad14c42a48e792659c17fb4f01486041b09 (diff) | |
download | qt-creator-3449618a85c6885b56f5fff3b5d3877accb9dd0f.tar.gz |
Change recursive to loop in allIncludesForDocument
Change-Id: I110294efa506b5a038cfc7f4202fab001e3eefd3
Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/libs/cplusplus/CppDocument.cpp')
-rw-r--r-- | src/libs/cplusplus/CppDocument.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index 1aaf2f5217..a0d0ef8362 100644 --- a/src/libs/cplusplus/CppDocument.cpp +++ b/src/libs/cplusplus/CppDocument.cpp @@ -44,6 +44,7 @@ #include <cplusplus/TypeVisitor.h> #include <cplusplus/CoreTypes.h> +#include <QStack> #include <QByteArray> #include <QBitArray> #include <QDir> @@ -834,7 +835,23 @@ Document::Ptr Snapshot::documentFromSource(const QByteArray &preprocessedCode, QSet<QString> Snapshot::allIncludesForDocument(const QString &fileName) const { QSet<QString> result; - allIncludesForDocument_helper(fileName, result); + + QStack<QString> 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<QString> &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); |