diff options
author | Marco Bubke <marco.bubke@qt.io> | 2023-04-21 15:47:50 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2023-04-26 13:23:47 +0000 |
commit | 0d4e8c33dd454b18b0fbe56a32f4dfe8e346a87a (patch) | |
tree | e176b5a295c88e689715f582dd0557a910ab18d0 | |
parent | 5223a909772d92db803dcc54af99f59653bb2979 (diff) |
QmlDesigner: Remove duplicates
Change-Id: I5b2d8433c0aca286ec530f237750ba660c409a48
Reviewed-by: Aleksei German <aleksei.german@qt.io>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
(cherry picked from commit eafe43399d29502ecd06be6976a4f2509b20c9ee)
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r-- | src/plugins/qmldesigner/designercore/projectstorage/modulescanner.cpp | 9 | ||||
-rw-r--r-- | tests/unit/unittest/modulescanner-test.cpp | 25 |
2 files changed, 28 insertions, 6 deletions
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/modulescanner.cpp b/src/plugins/qmldesigner/designercore/projectstorage/modulescanner.cpp index 4a6adfa10d..2210f0732b 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/modulescanner.cpp +++ b/src/plugins/qmldesigner/designercore/projectstorage/modulescanner.cpp @@ -51,8 +51,6 @@ void ModuleScanner::scan([[maybe_unused]] std::string_view modulePath) #ifdef QDS_HAS_QMLPRIVATE QDirIterator dirIterator{QString::fromUtf8(modulePath), QDir::Dirs, QDirIterator::Subdirectories}; - QMap<QString, bool> moduleNames; - while (dirIterator.hasNext()) { auto directoryPath = dirIterator.next(); QString qmldirPath = directoryPath + "/qmldir"; @@ -72,14 +70,13 @@ void ModuleScanner::scan([[maybe_unused]] std::string_view modulePath) if (moduleName.isEmpty() || m_skip(moduleName)) continue; - if (moduleNames.contains(moduleName)) - continue; - - moduleNames.insert(moduleName, true); m_modules.push_back( Import::createLibraryImport(moduleName, createVersion(parser.components()))); } } + + std::sort(m_modules.begin(), m_modules.end()); + m_modules.erase(std::unique(m_modules.begin(), m_modules.end()), m_modules.end()); #endif } diff --git a/tests/unit/unittest/modulescanner-test.cpp b/tests/unit/unittest/modulescanner-test.cpp index b98fc3cdb3..92d7959916 100644 --- a/tests/unit/unittest/modulescanner-test.cpp +++ b/tests/unit/unittest/modulescanner-test.cpp @@ -21,6 +21,15 @@ auto VersionProperty(const Matcher &matcher) return Property(&QmlDesigner::Import::version, matcher); } +MATCHER(HasDuplicates, std::string(negation ? "hasn't duplicates" : "has dublicates")) +{ + auto values = arg; + std::sort(values.begin(), values.begin()); + auto found = std::adjacent_find(values.begin(), values.end()); + + return found != values.end(); +} + class ModuleScanner : public testing::Test { protected: @@ -70,4 +79,20 @@ TEST_F(ModuleScanner, Version) ASSERT_THAT(scanner.modules(), ElementsAre(AllOf(UrlProperty("Example"), VersionProperty("1.3")))); } +TEST_F(ModuleScanner, Duplicates) +{ + scanner.scan(QStringList{QT6_INSTALL_PREFIX}); + + ASSERT_THAT(scanner.modules(), Not(HasDuplicates())); +} + +TEST_F(ModuleScanner, DontAddModulesAgain) +{ + scanner.scan(QStringList{QT6_INSTALL_PREFIX}); + + scanner.scan(QStringList{QT6_INSTALL_PREFIX}); + + ASSERT_THAT(scanner.modules(), Not(HasDuplicates())); +} + } // namespace |