diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp index 761d6371efe..d8d0c6ef525 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp +++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp @@ -191,6 +191,11 @@ void addModuleExportedImport(Storage::Synchronization::ModuleExportedImports &im imports.emplace_back(moduleId, exportedModuleId, version, isAutoVersion); } +bool isOptionalImport(QmlDirParser::Import::Flags flags) +{ + return flags & QmlDirParser::Import::Optional && !(flags & QmlDirParser::Import::OptionalDefault); +} + void addModuleExportedImports(Storage::Synchronization::ModuleExportedImports &imports, ModuleId moduleId, ModuleId cppModuleId, @@ -205,6 +210,9 @@ void addModuleExportedImports(Storage::Synchronization::ModuleExportedImports &i keyValue("module id", moduleId)}; for (const QmlDirParser::Import &qmldirImport : qmldirImports) { + if (isOptionalImport(qmldirImport.flags)) + continue; + Utils::PathString exportedModuleName{qmldirImport.module}; ModuleId exportedModuleId = projectStorage.moduleId(exportedModuleName); addModuleExportedImport(imports, diff --git a/tests/unit/tests/unittests/projectstorage/projectstorageupdater-test.cpp b/tests/unit/tests/unittests/projectstorage/projectstorageupdater-test.cpp index 96909857b32..0d8b5cfc34e 100644 --- a/tests/unit/tests/unittests/projectstorage/projectstorageupdater-test.cpp +++ b/tests/unit/tests/unittests/projectstorage/projectstorageupdater-test.cpp @@ -1541,12 +1541,12 @@ TEST_F(ProjectStorageUpdater, synchronize_qmldir_imports_with_double_entries) updater.update(directories, {}, {}, {}); } -TEST_F(ProjectStorageUpdater, synchronize_qmldir_optional_imports) +TEST_F(ProjectStorageUpdater, synchronize_qmldir_default_imports) { QString qmldir{R"(module Example import Qml auto import QML 2.1 - optional import Quick + default import Quick )"}; setContent(u"/path/qmldir", qmldir); @@ -1583,6 +1583,40 @@ TEST_F(ProjectStorageUpdater, synchronize_qmldir_optional_imports) updater.update(directories, {}, {}, {}); } +TEST_F(ProjectStorageUpdater, do_not_synchronize_qmldir_optional_imports) +{ + QString qmldir{R"(module Example + import Qml auto + import QML 2.1 + optional import Quick + )"}; + setContent(u"/path/qmldir", qmldir); + + EXPECT_CALL(projectStorageMock, + synchronize( + AllOf(Field(&SynchronizationPackage::moduleExportedImports, + UnorderedElementsAre(ModuleExportedImport{exampleModuleId, + qmlModuleId, + Storage::Version{}, + IsAutoVersion::Yes}, + ModuleExportedImport{exampleCppNativeModuleId, + qmlCppNativeModuleId, + Storage::Version{}, + IsAutoVersion::No}, + ModuleExportedImport{exampleModuleId, + builtinModuleId, + Storage::Version{2, 1}, + IsAutoVersion::No}, + ModuleExportedImport{exampleCppNativeModuleId, + builtinCppNativeModuleId, + Storage::Version{}, + IsAutoVersion::No})), + Field(&SynchronizationPackage::updatedModuleIds, + ElementsAre(exampleModuleId))))); + + updater.update(directories, {}, {}, {}); +} + TEST_F(ProjectStorageUpdater, update_path_watcher_directories) { EXPECT_CALL(patchWatcherMock,