summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/CppDocument.cpp
diff options
context:
space:
mode:
authorIgor Sidorov <fliyfzen@gmail.com>2020-01-31 01:07:39 +0300
committerIgor Sidorov <fliyfzen@gmail.com>2020-02-05 09:34:07 +0000
commit3449618a85c6885b56f5fff3b5d3877accb9dd0f (patch)
tree0db6dc0e5b4fe20b89bb3ba1a054259ad2cc8fcd /src/libs/cplusplus/CppDocument.cpp
parenta9e40ad14c42a48e792659c17fb4f01486041b09 (diff)
downloadqt-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.cpp31
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);