diff --git a/src/libs/qmljs/qmljsplugindumper.cpp b/src/libs/qmljs/qmljsplugindumper.cpp index 7d13482272b..8ef89ebb431 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 &objects) const + QList &objects, + QSet *visited) const { + if (dependencies.isEmpty()) + return; + + QScopedPointer> visitedPtr(visited ? visited : new QSet()); + 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, diff --git a/src/libs/qmljs/qmljsplugindumper.h b/src/libs/qmljs/qmljsplugindumper.h index 7d29e6ef3db..586275f021a 100644 --- a/src/libs/qmljs/qmljsplugindumper.h +++ b/src/libs/qmljs/qmljsplugindumper.h @@ -83,7 +83,8 @@ private: void loadDependencies(const QStringList &dependencies, QStringList &errors, QStringList &warnings, - QList &objects) const; + QList &objects, + QSet *visited=0) const; void loadQmltypesFile(const QStringList &qmltypesFilePaths, const QString &libraryPath, QmlJS::LibraryInfo libraryInfo);