QmlDesigner: Avoid duplicate module names

We get every qmldir file twice and some files report QtQuick
multiple times.

This needs to be revisited.

Change-Id: I2271f71ee7da2c182fed468fa3ef8aca63785bb4
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Thomas Hartmann
2023-04-21 14:01:33 +02:00
parent 3abf63b921
commit 81cb581e4a

View File

@@ -9,6 +9,7 @@
#include <QDirIterator> #include <QDirIterator>
#include <QFile> #include <QFile>
#include <QHash>
namespace QmlDesigner { namespace QmlDesigner {
@@ -50,6 +51,8 @@ void ModuleScanner::scan([[maybe_unused]] std::string_view modulePath)
#ifdef QDS_HAS_QMLPRIVATE #ifdef QDS_HAS_QMLPRIVATE
QDirIterator dirIterator{QString::fromUtf8(modulePath), QDir::Dirs, QDirIterator::Subdirectories}; QDirIterator dirIterator{QString::fromUtf8(modulePath), QDir::Dirs, QDirIterator::Subdirectories};
QMap<QString, bool> moduleNames;
while (dirIterator.hasNext()) { while (dirIterator.hasNext()) {
auto directoryPath = dirIterator.next(); auto directoryPath = dirIterator.next();
QString qmldirPath = directoryPath + "/qmldir"; QString qmldirPath = directoryPath + "/qmldir";
@@ -69,6 +72,10 @@ void ModuleScanner::scan([[maybe_unused]] std::string_view modulePath)
if (moduleName.isEmpty() || m_skip(moduleName)) if (moduleName.isEmpty() || m_skip(moduleName))
continue; continue;
if (moduleNames.contains(moduleName))
continue;
moduleNames.insert(moduleName, true);
m_modules.push_back( m_modules.push_back(
Import::createLibraryImport(moduleName, createVersion(parser.components()))); Import::createLibraryImport(moduleName, createVersion(parser.components())));
} }