aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp')
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp40
1 files changed, 32 insertions, 8 deletions
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp
index d628b3191c..d144647fd2 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp
+++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp
@@ -41,6 +41,29 @@
namespace QmlDesigner {
namespace {
+QStringList filterMultipleEntries(QStringList qmlTypes)
+{
+ std::sort(qmlTypes.begin(), qmlTypes.end());
+ qmlTypes.erase(std::unique(qmlTypes.begin(), qmlTypes.end()), qmlTypes.end());
+
+ return qmlTypes;
+}
+
+QList<QmlDirParser::Import> filterMultipleEntries(QList<QmlDirParser::Import> imports)
+{
+ std::stable_sort(imports.begin(), imports.end(), [](auto &&first, auto &&second) {
+ return first.module < second.module;
+ });
+ imports.erase(std::unique(imports.begin(),
+ imports.end(),
+ [](auto &&first, auto &&second) {
+ return first.module == second.module;
+ }),
+ imports.end());
+
+ return imports;
+}
+
ComponentReferences createComponentReferences(const QMultiHash<QString, QmlDirParser::Component> &components)
{
ComponentReferences componentReferences;
@@ -198,21 +221,22 @@ void ProjectStorageUpdater::updateQmldirs(const QStringList &qmlDirs,
Utils::PathString moduleName{parser.typeNamespace()};
ModuleId moduleId = m_projectStorage.moduleId(moduleName);
- addModuleExportedImports(package.moduleExportedImports,
- moduleId,
- parser.imports(),
- m_projectStorage);
+ auto imports = filterMultipleEntries(parser.imports());
+
+ addModuleExportedImports(package.moduleExportedImports, moduleId, imports, m_projectStorage);
package.updatedModuleIds.push_back(moduleId);
const auto qmlProjectDatas = m_projectStorage.fetchProjectDatas(qmlDirSourceId);
addSourceIds(package.updatedSourceIds, qmlProjectDatas);
addSourceIds(package.updatedFileStatusSourceIds, qmlProjectDatas);
- if (!parser.typeInfos().isEmpty()) {
+ auto qmlTypes = filterMultipleEntries(parser.typeInfos());
+
+ if (!qmlTypes.isEmpty()) {
ModuleId cppModuleId = m_projectStorage.moduleId(moduleName + "-cppnative");
- parseTypeInfos(parser.typeInfos(),
- parser.dependencies(),
- parser.imports(),
+ parseTypeInfos(qmlTypes,
+ filterMultipleEntries(parser.dependencies()),
+ imports,
qmlDirSourceId,
directoryId,
cppModuleId,