diff options
author | Marco Benelli <marco.benelli@qt.io> | 2016-07-13 16:38:36 +0200 |
---|---|---|
committer | Marco Benelli <marco.benelli@qt.io> | 2016-08-26 07:34:56 +0000 |
commit | 19a9eac46ee88c7ea903b545995b73f035f30d9a (patch) | |
tree | be6b9dc24ab6d6f2622f8a9b6ea8155f02b7d3de /src/libs/qmljs/qmljsplugindumper.cpp | |
parent | a8039d9ce2fcb59c42eeb4a676faf0263a8ccbe2 (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.cpp | 12 |
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, |