aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/qmljs/qmljsplugindumper.cpp
diff options
context:
space:
mode:
authorMarco Benelli <marco.benelli@qt.io>2016-07-13 16:38:36 +0200
committerMarco Benelli <marco.benelli@qt.io>2016-08-26 07:34:56 +0000
commit19a9eac46ee88c7ea903b545995b73f035f30d9a (patch)
treebe6b9dc24ab6d6f2622f8a9b6ea8155f02b7d3de /src/libs/qmljs/qmljsplugindumper.cpp
parenta8039d9ce2fcb59c42eeb4a676faf0263a8ccbe2 (diff)
QmlJs: circular dependencies handling
Task-number: QTCREATORBUG-16585 Change-Id: Ia1e01f1314cd4022d59dc768752baaa367fe250a Reviewed-by: Robert Loehning <robert.loehning@qt.io> Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Diffstat (limited to 'src/libs/qmljs/qmljsplugindumper.cpp')
-rw-r--r--src/libs/qmljs/qmljsplugindumper.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/libs/qmljs/qmljsplugindumper.cpp b/src/libs/qmljs/qmljsplugindumper.cpp
index 7d13482272..8ef89ebb43 100644
--- a/src/libs/qmljs/qmljsplugindumper.cpp
+++ b/src/libs/qmljs/qmljsplugindumper.cpp
@@ -458,19 +458,27 @@ QString PluginDumper::buildQmltypesPath(const QString &name) const
void PluginDumper::loadDependencies(const QStringList &dependencies,
QStringList &errors,
QStringList &warnings,
- QList<FakeMetaObject::ConstPtr> &objects) const
+ QList<FakeMetaObject::ConstPtr> &objects,
+ QSet<QString> *visited) const
{
+ if (dependencies.isEmpty())
+ return;
+
+ QScopedPointer<QSet<QString>> visitedPtr(visited ? visited : new QSet<QString>());
+
QStringList dependenciesPaths;
QString path;
for (const QString &name: dependencies) {
path = buildQmltypesPath(name);
if (!path.isNull())
dependenciesPaths << path;
+ visitedPtr->insert(name);
}
QStringList newDependencies;
loadQmlTypeDescription(dependenciesPaths, errors, warnings, objects, 0, &newDependencies);
+ newDependencies = (newDependencies.toSet() - *visitedPtr).toList();
if (!newDependencies.isEmpty())
- loadDependencies(newDependencies, errors, warnings, objects);
+ loadDependencies(newDependencies, errors, warnings, objects, visitedPtr.take());
}
void PluginDumper::loadQmltypesFile(const QStringList &qmltypesFilePaths,