From 50b2ff3c5097e8ad346dd2eac1c46c6b267c0226 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Tue, 4 Feb 2025 23:37:18 +0100 Subject: [PATCH] QmlDesigner: Remove '.' workaround in project storage The '.' file paths were always a workaround. Since some time the context id is now part of the source id. So a source ids can be generated from source context id without a file name. Task-number: QDS-14672 Change-Id: Ia278b9d06030ca8ea6e150d0c7ffd762979d5d62 Reviewed-by: Thomas Hartmann --- .../projectstorage/filesystem.cpp | 4 +- .../projectstorage/projectstorage.cpp | 156 +-- .../projectstorage/projectstorage.h | 22 +- .../projectstorage/projectstorageinterface.h | 13 +- .../projectstorage/projectstoragetypes.h | 36 +- .../projectstorage/projectstorageupdater.cpp | 254 ++--- .../projectstorage/projectstorageupdater.h | 36 +- .../projectstorage/typeannotationreader.cpp | 6 +- .../projectstorage/typeannotationreader.h | 4 +- .../tests/matchers/projectstorage-matcher.h | 4 +- tests/unit/tests/mocks/projectstoragemock.h | 18 +- .../tests/printers/gtest-creator-printing.cpp | 8 +- .../projectstorage/projectstorage-test.cpp | 401 ++++--- .../projectstorageupdater-test.cpp | 1001 ++++++++--------- .../projectstorage/qmltypesparser-test.cpp | 16 +- .../typeannotationreader-test.cpp | 94 +- 16 files changed, 1016 insertions(+), 1057 deletions(-) diff --git a/src/plugins/qmldesigner/libs/designercore/projectstorage/filesystem.cpp b/src/plugins/qmldesigner/libs/designercore/projectstorage/filesystem.cpp index 0286b6e130c..856d8ddd617 100644 --- a/src/plugins/qmldesigner/libs/designercore/projectstorage/filesystem.cpp +++ b/src/plugins/qmldesigner/libs/designercore/projectstorage/filesystem.cpp @@ -50,7 +50,9 @@ long long FileSystem::lastModified(SourceId sourceId) const FileStatus FileSystem::fileStatus(SourceId sourceId) const { - QFileInfo fileInfo(QString(m_sourcePathCache.sourcePath(sourceId))); + auto path = sourceId.mainId() ? m_sourcePathCache.sourcePath(sourceId) + : m_sourcePathCache.sourceContextPath(sourceId.contextId()); + QFileInfo fileInfo(QString{path}); fileInfo.refresh(); diff --git a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorage.cpp b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorage.cpp index ccd3fdee974..b758153351d 100644 --- a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorage.cpp +++ b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorage.cpp @@ -649,31 +649,31 @@ struct ProjectStorage::Statements "DELETE FROM exportedTypeNames WHERE exportedTypeNameId=?", database}; Sqlite::WriteStatement<2> updateExportedTypeNameTypeIdStatement{ "UPDATE exportedTypeNames SET typeId=?2 WHERE exportedTypeNameId=?1", database}; - mutable Sqlite::ReadStatement<4, 1> selectDirectoryInfosForSourceIdsStatement{ - "SELECT directorySourceId, sourceId, moduleId, fileType FROM directoryInfos WHERE " - "directorySourceId IN carray(?1) ORDER BY directorySourceId, sourceId", + mutable Sqlite::ReadStatement<4, 1> selectDirectoryInfosForDirectoryIdsStatement{ + "SELECT directoryId, sourceId, moduleId, fileType FROM directoryInfos WHERE " + "directoryId IN carray(?1) ORDER BY directoryId, sourceId", database}; Sqlite::WriteStatement<4> insertDirectoryInfoStatement{ - "INSERT INTO directoryInfos(directorySourceId, sourceId, " + "INSERT INTO directoryInfos(directoryId, sourceId, " "moduleId, fileType) VALUES(?1, ?2, ?3, ?4)", database}; Sqlite::WriteStatement<2> deleteDirectoryInfoStatement{ - "DELETE FROM directoryInfos WHERE directorySourceId=?1 AND sourceId=?2", database}; + "DELETE FROM directoryInfos WHERE directoryId=?1 AND sourceId=?2", database}; Sqlite::WriteStatement<4> updateDirectoryInfoStatement{ - "UPDATE directoryInfos SET moduleId=?3, fileType=?4 WHERE directorySourceId=?1 AND sourceId=?2", + "UPDATE directoryInfos SET moduleId=?3, fileType=?4 WHERE directoryId=?1 AND sourceId=?2", database}; - mutable Sqlite::ReadStatement<4, 1> selectDirectoryInfosForSourceIdStatement{ - "SELECT directorySourceId, sourceId, moduleId, fileType FROM directoryInfos WHERE " - "directorySourceId=?1", + mutable Sqlite::ReadStatement<4, 1> selectDirectoryInfosForDirectoryIdStatement{ + "SELECT directoryId, sourceId, moduleId, fileType FROM directoryInfos WHERE " + "directoryId=?1", database}; - mutable Sqlite::ReadStatement<4, 2> selectDirectoryInfosForSourceIdAndFileTypeStatement{ - "SELECT directorySourceId, sourceId, moduleId, fileType FROM directoryInfos WHERE " - "directorySourceId=?1 AND fileType=?2", + mutable Sqlite::ReadStatement<4, 2> selectDirectoryInfosForDiectoryIdAndFileTypeStatement{ + "SELECT directoryId, sourceId, moduleId, fileType FROM directoryInfos WHERE " + "directoryId=?1 AND fileType=?2", database}; - mutable Sqlite::ReadStatement<1, 2> selectDirectoryInfosSourceIdsForSourceIdAndFileTypeStatement{ - "SELECT sourceId FROM directoryInfos WHERE directorySourceId=?1 AND fileType=?2", database}; + mutable Sqlite::ReadStatement<1, 2> selectDirectoryInfosSourceIdsForDirectoryIdAndFileTypeStatement{ + "SELECT sourceId FROM directoryInfos WHERE directoryId=?1 AND fileType=?2", database}; mutable Sqlite::ReadStatement<4, 1> selectDirectoryInfoForSourceIdStatement{ - "SELECT directorySourceId, sourceId, moduleId, fileType FROM directoryInfos WHERE " + "SELECT directoryId, sourceId, moduleId, fileType FROM directoryInfos WHERE " "sourceId=?1 LIMIT 1", database}; mutable Sqlite::ReadStatement<1, 1> selectTypeIdsForSourceIdsStatement{ @@ -817,7 +817,7 @@ struct ProjectStorage::Statements database}; Sqlite::WriteStatement<7> insertTypeAnnotationStatement{ "INSERT INTO " - " typeAnnotations(typeId, sourceId, directorySourceId, typeName, iconPath, itemLibrary, " + " typeAnnotations(typeId, sourceId, directoryId, typeName, iconPath, itemLibrary, " " hints) " "VALUES(?1, ?2, ?3, ?4, ?5, ?6, ?7)", database}; @@ -836,9 +836,9 @@ struct ProjectStorage::Statements "WHERE typeId=?1 AND hints IS NOT NULL", database}; mutable Sqlite::ReadStatement<1, 1> selectTypeAnnotationSourceIdsStatement{ - "SELECT sourceId FROM typeAnnotations WHERE directorySourceId=?1 ORDER BY sourceId", database}; - mutable Sqlite::ReadStatement<1, 0> selectTypeAnnotationDirectorySourceIdsStatement{ - "SELECT DISTINCT directorySourceId FROM typeAnnotations ORDER BY directorySourceId", database}; + "SELECT sourceId FROM typeAnnotations WHERE directoryId=?1 ORDER BY sourceId", database}; + mutable Sqlite::ReadStatement<1, 0> selectTypeAnnotationDirectoryIdsStatement{ + "SELECT DISTINCT directoryId FROM typeAnnotations ORDER BY directoryId", database}; mutable Sqlite::ReadStatement<10> selectItemLibraryEntriesStatement{ "SELECT typeId, typeName, i.value->>'$.name', i.value->>'$.iconPath', " " i.value->>'$.category', i.value->>'$.import', i.value->>'$.toolTip', " @@ -1222,15 +1222,14 @@ public: table.setUseIfNotExists(true); table.setUseWithoutRowId(true); table.setName("directoryInfos"); - auto &directorySourceIdColumn = table.addColumn("directorySourceId", - Sqlite::StrictColumnType::Integer); + auto &directoryIdColumn = table.addColumn("directoryId", Sqlite::StrictColumnType::Integer); auto &sourceIdColumn = table.addColumn("sourceId", Sqlite::StrictColumnType::Integer); table.addColumn("moduleId", Sqlite::StrictColumnType::Integer); auto &fileTypeColumn = table.addColumn("fileType", Sqlite::StrictColumnType::Integer); - table.addPrimaryKeyContraint({directorySourceIdColumn, sourceIdColumn}); + table.addPrimaryKeyContraint({directoryIdColumn, sourceIdColumn}); table.addUniqueIndex({sourceIdColumn}); - table.addIndex({directorySourceIdColumn, fileTypeColumn}); + table.addIndex({directoryIdColumn, fileTypeColumn}); table.initialize(database); } @@ -1260,15 +1259,14 @@ public: Sqlite::StrictColumnType::Integer, {Sqlite::PrimaryKey{}}); auto &sourceIdColumn = table.addColumn("sourceId", Sqlite::StrictColumnType::Integer); - auto &directorySourceIdColumn = table.addColumn("directorySourceId", - Sqlite::StrictColumnType::Integer); + auto &directoryIdColumn = table.addColumn("directoryId", Sqlite::StrictColumnType::Integer); table.addColumn("typeName", Sqlite::StrictColumnType::Text); table.addColumn("iconPath", Sqlite::StrictColumnType::Text); table.addColumn("itemLibrary", Sqlite::StrictColumnType::Text); table.addColumn("hints", Sqlite::StrictColumnType::Text); table.addUniqueIndex({sourceIdColumn, typeIdColumn}); - table.addIndex({directorySourceIdColumn}); + table.addIndex({directoryIdColumn}); table.initialize(database); } @@ -1337,7 +1335,7 @@ void ProjectStorage::synchronize(Storage::Synchronization::SynchronizationPackag package.updatedSourceIds); synchronizeTypeAnnotations(package.typeAnnotations, package.updatedTypeAnnotationSourceIds); synchronizePropertyEditorQmlPaths(package.propertyEditorQmlPaths, - package.updatedPropertyEditorQmlPathSourceIds); + package.updatedPropertyEditorQmlPathSourceContextIds); deleteNotUpdatedTypes(updatedTypeIds, package.updatedSourceIds, @@ -1358,7 +1356,7 @@ void ProjectStorage::synchronize(Storage::Synchronization::SynchronizationPackag linkAliases(aliasPropertyDeclarationsToLink, RaiseError::Yes); - synchronizeDirectoryInfos(package.directoryInfos, package.updatedDirectoryInfoSourceIds); + synchronizeDirectoryInfos(package.directoryInfos, package.updatedDirectoryInfoDirectoryIds); commonTypeCache_.resetTypeIds(); }); @@ -1748,7 +1746,7 @@ Storage::Info::TypeHints ProjectStorage::typeHints(TypeId typeId) const return typeHints; } -SmallSourceIds<4> ProjectStorage::typeAnnotationSourceIds(SourceId directoryId) const +SmallSourceIds<4> ProjectStorage::typeAnnotationSourceIds(SourceContextId directoryId) const { using NanotraceHR::keyValue; NanotraceHR::Tracer tracer{"get type annotaion source ids", @@ -1763,13 +1761,13 @@ SmallSourceIds<4> ProjectStorage::typeAnnotationSourceIds(SourceId directoryId) return sourceIds; } -SmallSourceIds<64> ProjectStorage::typeAnnotationDirectorySourceIds() const +SmallSourceContextIds<64> ProjectStorage::typeAnnotationDirectoryIds() const { using NanotraceHR::keyValue; NanotraceHR::Tracer tracer{"get type annotaion source ids", projectStorageCategory()}; - auto sourceIds = s->selectTypeAnnotationDirectorySourceIdsStatement - .valuesWithTransaction>(); + auto sourceIds = s->selectTypeAnnotationDirectoryIdsStatement + .valuesWithTransaction>(); tracer.end(keyValue("source ids", sourceIds)); @@ -2198,16 +2196,16 @@ std::optional ProjectStorage::fetchDire return directoryInfo; } -Storage::Synchronization::DirectoryInfos ProjectStorage::fetchDirectoryInfos(SourceId directorySourceId) const +Storage::Synchronization::DirectoryInfos ProjectStorage::fetchDirectoryInfos(SourceContextId directoryId) const { using NanotraceHR::keyValue; - NanotraceHR::Tracer tracer{"fetch directory infos by source id", + NanotraceHR::Tracer tracer{"fetch directory infos by directory id", projectStorageCategory(), - keyValue("source id", directorySourceId)}; + keyValue("directory id", directoryId)}; - auto directoryInfos = s->selectDirectoryInfosForSourceIdStatement - .valuesWithTransaction( - directorySourceId); + auto directoryInfos = s->selectDirectoryInfosForDirectoryIdStatement + .valuesWithTransaction( + directoryId); tracer.end(keyValue("directory infos", directoryInfos)); @@ -2215,17 +2213,17 @@ Storage::Synchronization::DirectoryInfos ProjectStorage::fetchDirectoryInfos(Sou } Storage::Synchronization::DirectoryInfos ProjectStorage::fetchDirectoryInfos( - SourceId directorySourceId, Storage::Synchronization::FileType fileType) const + SourceContextId directoryId, Storage::Synchronization::FileType fileType) const { using NanotraceHR::keyValue; NanotraceHR::Tracer tracer{"fetch directory infos by source id and file type", projectStorageCategory(), - keyValue("source id", directorySourceId), + keyValue("directory id", directoryId), keyValue("file type", fileType)}; - auto directoryInfos = s->selectDirectoryInfosForSourceIdAndFileTypeStatement + auto directoryInfos = s->selectDirectoryInfosForDiectoryIdAndFileTypeStatement .valuesWithTransaction( - directorySourceId, fileType); + directoryId, fileType); tracer.end(keyValue("directory infos", directoryInfos)); @@ -2233,36 +2231,40 @@ Storage::Synchronization::DirectoryInfos ProjectStorage::fetchDirectoryInfos( } Storage::Synchronization::DirectoryInfos ProjectStorage::fetchDirectoryInfos( - const SourceIds &directorySourceIds) const + const SourceContextIds &directoryIds) const { using NanotraceHR::keyValue; NanotraceHR::Tracer tracer{"fetch directory infos by source ids", projectStorageCategory(), - keyValue("source ids", directorySourceIds)}; + keyValue("directory ids", directoryIds)}; - auto directoryInfos = s->selectDirectoryInfosForSourceIdsStatement - .valuesWithTransaction( - toIntegers(directorySourceIds)); + auto directoryInfos = s->selectDirectoryInfosForDirectoryIdsStatement + .valuesWithTransaction( + toIntegers(directoryIds)); tracer.end(keyValue("directory infos", directoryInfos)); return directoryInfos; } -SmallSourceIds<32> ProjectStorage::fetchSubdirectorySourceIds(SourceId directorySourceId) const +SmallSourceContextIds<32> ProjectStorage::fetchSubdirectoryIds(SourceContextId directoryId) const { using NanotraceHR::keyValue; NanotraceHR::Tracer tracer{"fetch subdirectory source ids", projectStorageCategory(), - keyValue("source id", directorySourceId)}; + keyValue("directory id", directoryId)}; - auto sourceIds = s->selectDirectoryInfosSourceIdsForSourceIdAndFileTypeStatement - .valuesWithTransaction>( - directorySourceId, Storage::Synchronization::FileType::Directory); + auto sourceIds = s->selectDirectoryInfosSourceIdsForDirectoryIdAndFileTypeStatement + .rangeWithTransaction(directoryId, + Storage::Synchronization::FileType::Directory); - tracer.end(keyValue("source ids", sourceIds)); + SmallSourceContextIds<32> directoryIds; + for (SourceId sourceId : sourceIds) + directoryIds.push_back(sourceId.contextId()); - return sourceIds; + tracer.end(keyValue("directory ids", directoryIds)); + + return directoryIds; } void ProjectStorage::setPropertyEditorPathId(TypeId typeId, SourceId pathId) @@ -2447,7 +2449,7 @@ void ProjectStorage::synchronizeTypeAnnotations(Storage::Synchronization::TypeAn s->insertTypeAnnotationStatement.write(annotation.typeId, annotation.sourceId, - annotation.directorySourceId, + annotation.directoryId, annotation.typeName, annotation.iconPath, createEmptyAsNull(annotation.itemLibraryJson), @@ -2571,22 +2573,23 @@ void ProjectStorage::synchronizeTypes(Storage::Synchronization::Types &types, } void ProjectStorage::synchronizeDirectoryInfos(Storage::Synchronization::DirectoryInfos &directoryInfos, - const SourceIds &updatedDirectoryInfoSourceIds) + const SourceContextIds &updatedDirectoryInfoDirectoryIds) { NanotraceHR::Tracer tracer{"synchronize directory infos", projectStorageCategory()}; auto compareKey = [](auto &&first, auto &&second) { - return std::tie(first.directorySourceId, first.sourceId) - <=> std::tie(second.directorySourceId, second.sourceId); + return std::tie(first.directoryId, first.sourceId) + <=> std::tie(second.directoryId, second.sourceId); }; std::ranges::sort(directoryInfos, [&](auto &&first, auto &&second) { - return std::tie(first.directorySourceId, first.sourceId) - < std::tie(second.directorySourceId, second.sourceId); + return std::tie(first.directoryId, first.sourceId) + < std::tie(second.directoryId, second.sourceId); }); - auto range = s->selectDirectoryInfosForSourceIdsStatement.range( - toIntegers(updatedDirectoryInfoSourceIds)); + auto range = s->selectDirectoryInfosForDirectoryIdsStatement + .range( + toIntegers(updatedDirectoryInfoDirectoryIds)); auto insert = [&](const Storage::Synchronization::DirectoryInfo &directoryInfo) { using NanotraceHR::keyValue; @@ -2594,15 +2597,15 @@ void ProjectStorage::synchronizeDirectoryInfos(Storage::Synchronization::Directo projectStorageCategory(), keyValue("directory info", directoryInfo)}; - if (!directoryInfo.directorySourceId) + if (!directoryInfo.directoryId) throw DirectoryInfoHasInvalidProjectSourceId{}; if (!directoryInfo.sourceId) throw DirectoryInfoHasInvalidSourceId{}; - s->insertDirectoryInfoStatement.write(directoryInfo.directorySourceId, - directoryInfo.sourceId, - directoryInfo.moduleId, - directoryInfo.fileType); + s->insertDirectoryInfoStatement.write(directoryInfo.directoryId, + directoryInfo.sourceId, + directoryInfo.moduleId, + directoryInfo.fileType); }; auto update = [&](const Storage::Synchronization::DirectoryInfo &directoryInfoFromDatabase, @@ -2616,10 +2619,10 @@ void ProjectStorage::synchronizeDirectoryInfos(Storage::Synchronization::Directo keyValue("directory info from database", directoryInfoFromDatabase)}; - s->updateDirectoryInfoStatement.write(directoryInfo.directorySourceId, - directoryInfo.sourceId, - directoryInfo.moduleId, - directoryInfo.fileType); + s->updateDirectoryInfoStatement.write(directoryInfo.directoryId, + directoryInfo.sourceId, + directoryInfo.moduleId, + directoryInfo.fileType); return Sqlite::UpdateChange::Update; } @@ -2632,7 +2635,7 @@ void ProjectStorage::synchronizeDirectoryInfos(Storage::Synchronization::Directo projectStorageCategory(), keyValue("directory info", directoryInfo)}; - s->deleteDirectoryInfoStatement.write(directoryInfo.directorySourceId, directoryInfo.sourceId); + s->deleteDirectoryInfoStatement.write(directoryInfo.directoryId, directoryInfo.sourceId); }; Sqlite::insertUpdateDelete(range, directoryInfos, compareKey, insert, update, remove); @@ -4003,14 +4006,15 @@ void ProjectStorage::addTypeIdToPropertyEditorQmlPaths( path.typeId = fetchTypeIdByModuleIdAndExportedName(path.moduleId, path.typeName); } -void ProjectStorage::synchronizePropertyEditorPaths(Storage::Synchronization::PropertyEditorQmlPaths &paths, - SourceIds updatedPropertyEditorQmlPathsSourceIds) +void ProjectStorage::synchronizePropertyEditorPaths( + Storage::Synchronization::PropertyEditorQmlPaths &paths, + SourceContextIds updatedPropertyEditorQmlPathsSourceContextIds) { using Storage::Synchronization::PropertyEditorQmlPath; std::ranges::sort(paths, std::ranges::less{}, &PropertyEditorQmlPath::typeId); auto range = s->selectPropertyEditorPathsForForSourceIdsStatement.range( - toIntegers(updatedPropertyEditorQmlPathsSourceIds)); + toIntegers(updatedPropertyEditorQmlPathsSourceContextIds)); auto compareKey = [](const PropertyEditorQmlPathView &view, const PropertyEditorQmlPath &value) { return view.typeId <=> value.typeId; @@ -4057,7 +4061,7 @@ void ProjectStorage::synchronizePropertyEditorPaths(Storage::Synchronization::Pr void ProjectStorage::synchronizePropertyEditorQmlPaths( Storage::Synchronization::PropertyEditorQmlPaths &paths, - SourceIds updatedPropertyEditorQmlPathsSourceIds) + SourceContextIds updatedPropertyEditorQmlPathsSourceIds) { NanotraceHR::Tracer tracer{"synchronize property editor qml paths", projectStorageCategory()}; diff --git a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorage.h b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorage.h index caeb5377c54..f7a0ad43af1 100644 --- a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorage.h +++ b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorage.h @@ -105,9 +105,9 @@ public: Storage::Info::TypeHints typeHints(TypeId typeId) const override; - SmallSourceIds<4> typeAnnotationSourceIds(SourceId directoryId) const override; + SmallSourceIds<4> typeAnnotationSourceIds(SourceContextId directoryId) const override; - SmallSourceIds<64> typeAnnotationDirectorySourceIds() const override; + SmallSourceContextIds<64> typeAnnotationDirectoryIds() const override; Storage::Info::ItemLibraryEntries itemLibraryEntries(TypeId typeId) const override; @@ -222,11 +222,11 @@ public: std::optional fetchDirectoryInfo(SourceId sourceId) const override; - Storage::Synchronization::DirectoryInfos fetchDirectoryInfos(SourceId directorySourceId) const override; + Storage::Synchronization::DirectoryInfos fetchDirectoryInfos(SourceContextId directoryId) const override; Storage::Synchronization::DirectoryInfos fetchDirectoryInfos( - SourceId directorySourceId, Storage::Synchronization::FileType fileType) const override; - Storage::Synchronization::DirectoryInfos fetchDirectoryInfos(const SourceIds &directorySourceIds) const; - SmallSourceIds<32> fetchSubdirectorySourceIds(SourceId directorySourceId) const override; + SourceContextId directoryId, Storage::Synchronization::FileType fileType) const override; + Storage::Synchronization::DirectoryInfos fetchDirectoryInfos(const SourceContextIds &directoryIds) const; + SmallSourceContextIds<32> fetchSubdirectoryIds(SourceContextId directoryId) const override; void setPropertyEditorPathId(TypeId typeId, SourceId pathId); @@ -568,7 +568,7 @@ private: const SourceIds &updatedSourceIds); void synchronizeDirectoryInfos(Storage::Synchronization::DirectoryInfos &directoryInfos, - const SourceIds &updatedDirectoryInfoSourceIds); + const SourceContextIds &updatedDirectoryInfoDirectoryIds); void synchronizeFileStatuses(FileStatuses &fileStatuses, const SourceIds &updatedSourceIds); @@ -781,7 +781,7 @@ private: class PropertyEditorQmlPathView { public: - PropertyEditorQmlPathView(TypeId typeId, SourceId pathId, SourceId directoryId) + PropertyEditorQmlPathView(TypeId typeId, SourceId pathId, SourceContextId directoryId) : typeId{typeId} , pathId{pathId} , directoryId{directoryId} @@ -803,14 +803,14 @@ private: public: TypeId typeId; SourceId pathId; - SourceId directoryId; + SourceContextId directoryId; }; void synchronizePropertyEditorPaths(Storage::Synchronization::PropertyEditorQmlPaths &paths, - SourceIds updatedPropertyEditorQmlPathsSourceIds); + SourceContextIds updatedPropertyEditorQmlPathsSourceContextIds); void synchronizePropertyEditorQmlPaths(Storage::Synchronization::PropertyEditorQmlPaths &paths, - SourceIds updatedPropertyEditorQmlPathsSourceIds); + SourceContextIds updatedPropertyEditorQmlPathsSourceIds); void synchronizeFunctionDeclarations( TypeId typeId, Storage::Synchronization::FunctionDeclarations &functionsDeclarations); diff --git a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageinterface.h b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageinterface.h index 9cf0daf4e8c..cc04ca19f18 100644 --- a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageinterface.h +++ b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageinterface.h @@ -58,8 +58,8 @@ public: = 0; virtual PropertyDeclarationId defaultPropertyDeclarationId(TypeId typeId) const = 0; virtual std::optional type(TypeId typeId) const = 0; - virtual SmallSourceIds<4> typeAnnotationSourceIds(SourceId directoryId) const = 0; - virtual SmallSourceIds<64> typeAnnotationDirectorySourceIds() const = 0; + virtual SmallSourceIds<4> typeAnnotationSourceIds(SourceContextId directoryId) const = 0; + virtual SmallSourceContextIds<64> typeAnnotationDirectoryIds() const = 0; virtual Utils::PathString typeIconPath(TypeId typeId) const = 0; virtual Storage::Info::TypeHints typeHints(TypeId typeId) const = 0; virtual Storage::Info::ItemLibraryEntries itemLibraryEntries(TypeId typeId) const = 0; @@ -81,12 +81,13 @@ public: virtual bool isBasedOn(TypeId, TypeId, TypeId, TypeId, TypeId, TypeId, TypeId, TypeId) const = 0; virtual FileStatus fetchFileStatus(SourceId sourceId) const = 0; - virtual Storage::Synchronization::DirectoryInfos fetchDirectoryInfos(SourceId sourceId) const = 0; + virtual Storage::Synchronization::DirectoryInfos fetchDirectoryInfos(SourceContextId directoryId) const = 0; virtual Storage::Synchronization::DirectoryInfos fetchDirectoryInfos( - SourceId directorySourceId, Storage::Synchronization::FileType) const + SourceContextId directoryId, Storage::Synchronization::FileType) const = 0; - virtual std::optional fetchDirectoryInfo(SourceId sourceId) const = 0; - virtual SmallSourceIds<32> fetchSubdirectorySourceIds(SourceId directorySourceId) const = 0; + virtual std::optional + fetchDirectoryInfo(SourceId sourceId) const = 0; + virtual SmallSourceContextIds<32> fetchSubdirectoryIds(SourceContextId directoryId) const = 0; virtual SourceId propertyEditorPathId(TypeId typeId) const = 0; virtual const Storage::Info::CommonTypeCache &commonTypeCache() const = 0; diff --git a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstoragetypes.h b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstoragetypes.h index 8608f3ad805..5c776313479 100644 --- a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstoragetypes.h +++ b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstoragetypes.h @@ -1149,7 +1149,10 @@ using Types = std::vector; class PropertyEditorQmlPath { public: - PropertyEditorQmlPath(ModuleId moduleId, TypeNameString typeName, SourceId pathId, SourceId directoryId) + PropertyEditorQmlPath(ModuleId moduleId, + TypeNameString typeName, + SourceId pathId, + SourceContextId directoryId) : typeName{typeName} , pathId{pathId} , directoryId{directoryId} @@ -1174,7 +1177,7 @@ public: TypeNameString typeName; TypeId typeId; SourceId pathId; - SourceId directoryId; + SourceContextId directoryId; ModuleId moduleId; }; @@ -1183,8 +1186,8 @@ using PropertyEditorQmlPaths = std::vector; class DirectoryInfo { public: - DirectoryInfo(SourceId directorySourceId, SourceId sourceId, ModuleId moduleId, FileType fileType) - : directorySourceId{directorySourceId} + DirectoryInfo(SourceContextId directoryId, SourceId sourceId, ModuleId moduleId, FileType fileType) + : directoryId{directoryId} , sourceId{sourceId} , moduleId{moduleId} , fileType{fileType} @@ -1192,7 +1195,7 @@ public: friend bool operator==(const DirectoryInfo &first, const DirectoryInfo &second) { - return first.directorySourceId == second.directorySourceId && first.sourceId == second.sourceId + return first.directoryId == second.directoryId && first.sourceId == second.sourceId && first.moduleId.internalId() == second.moduleId.internalId() && first.fileType == second.fileType; } @@ -1202,7 +1205,7 @@ public: { using NanotraceHR::dictonary; using NanotraceHR::keyValue; - auto dict = dictonary(keyValue("project source id", directoryInfo.directorySourceId), + auto dict = dictonary(keyValue("directory id", directoryInfo.directoryId), keyValue("source id", directoryInfo.sourceId), keyValue("module id", directoryInfo.moduleId), keyValue("file type", directoryInfo.fileType)); @@ -1211,7 +1214,7 @@ public: } public: - SourceId directorySourceId; + SourceContextId directoryId; SourceId sourceId; ModuleId moduleId; FileType fileType; @@ -1222,13 +1225,13 @@ using DirectoryInfos = std::vector; class TypeAnnotation { public: - TypeAnnotation(SourceId sourceId, SourceId directorySourceId) + TypeAnnotation(SourceId sourceId, SourceContextId directoryId) : sourceId{sourceId} - , directorySourceId{directorySourceId} + , directoryId{directoryId} {} TypeAnnotation(SourceId sourceId, - SourceId directorySourceId, + SourceContextId directoryId, Utils::SmallStringView typeName, ModuleId moduleId, Utils::SmallStringView iconPath, @@ -1242,7 +1245,7 @@ public: , sourceId{sourceId} , moduleId{moduleId} , traits{traits} - , directorySourceId{directorySourceId} + , directoryId{directoryId} {} template @@ -1271,7 +1274,7 @@ public: SourceId sourceId; ModuleId moduleId; TypeTraits traits; - SourceId directorySourceId; + SourceContextId directoryId; }; using TypeAnnotations = std::vector; @@ -1311,9 +1314,10 @@ public: , fileStatuses(std::move(fileStatuses)) {} - SynchronizationPackage(SourceIds updatedDirectoryInfoSourceIds, DirectoryInfos directoryInfos) + SynchronizationPackage(SourceContextIds updatedDirectoryInfoDirectoryIds, + DirectoryInfos directoryInfos) : directoryInfos(std::move(directoryInfos)) - , updatedDirectoryInfoSourceIds(std::move(updatedDirectoryInfoSourceIds)) + , updatedDirectoryInfoDirectoryIds(std::move(updatedDirectoryInfoDirectoryIds)) {} public: @@ -1323,13 +1327,13 @@ public: SourceIds updatedFileStatusSourceIds; FileStatuses fileStatuses; DirectoryInfos directoryInfos; - SourceIds updatedDirectoryInfoSourceIds; + SourceContextIds updatedDirectoryInfoDirectoryIds; Imports moduleDependencies; SourceIds updatedModuleDependencySourceIds; ModuleExportedImports moduleExportedImports; ModuleIds updatedModuleIds; PropertyEditorQmlPaths propertyEditorQmlPaths; - SourceIds updatedPropertyEditorQmlPathSourceIds; + SourceContextIds updatedPropertyEditorQmlPathSourceContextIds; TypeAnnotations typeAnnotations; SourceIds updatedTypeAnnotationSourceIds; }; diff --git a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageupdater.cpp b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageupdater.cpp index 029dac30869..d89ef04b246 100644 --- a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageupdater.cpp +++ b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageupdater.cpp @@ -88,11 +88,11 @@ ProjectStorageUpdater::Components createComponents( ModuleId moduleId, ModuleId pathModuleId, FileSystemInterface &fileSystem, - const Utils::PathString &directory) + const QString &directory) { ProjectStorageUpdater::Components components; - auto qmlFileNames = fileSystem.qmlFileNames(QString{directory}); + auto qmlFileNames = fileSystem.qmlFileNames(directory); components.reserve(static_cast(qmlDirParserComponents.size() + qmlFileNames.size())); @@ -250,8 +250,7 @@ std::vector createIdPaths(ProjectStorageUpdater::WatchedSourceIdsIds wa std::vector idPaths; idPaths.reserve(4); - idPaths.push_back( - {projectPartId, SourceType::Directory, std::move(watchedSourceIds.directorySourceIds)}); + idPaths.push_back({projectPartId, SourceType::Directory, std::move(watchedSourceIds.directoryIds)}); idPaths.push_back({projectPartId, SourceType::QmlDir, std::move(watchedSourceIds.qmldirSourceIds)}); idPaths.push_back({projectPartId, SourceType::Qml, std::move(watchedSourceIds.qmlSourceIds)}); idPaths.push_back( @@ -304,11 +303,10 @@ ProjectStorageUpdater::FileState combineState(FileStates... fileStates) } // namespace -void ProjectStorageUpdater::updateDirectoryChanged(std::string_view directoryPath, +void ProjectStorageUpdater::updateDirectoryChanged(Utils::SmallStringView directoryPath, FileState qmldirState, SourcePath qmldirSourcePath, SourceId qmldirSourceId, - SourceId directorySourceId, SourceContextId directoryId, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds, @@ -341,7 +339,7 @@ void ProjectStorageUpdater::updateDirectoryChanged(std::string_view directoryPat tracer.tick("append updated module id", keyValue("module id", moduleId)); package.updatedModuleIds.push_back(moduleId); - const auto qmlDirectoryInfos = m_projectStorage.fetchDirectoryInfos(directorySourceId); + const auto qmlDirectoryInfos = m_projectStorage.fetchDirectoryInfos(directoryId); addSourceIds(package.updatedSourceIds, qmlDirectoryInfos, "append updated source id", tracer); addSourceIds(package.updatedFileStatusSourceIds, qmlDirectoryInfos, @@ -350,28 +348,32 @@ void ProjectStorageUpdater::updateDirectoryChanged(std::string_view directoryPat auto qmlTypes = filterMultipleEntries(parser.typeInfos()); + QString directoryPathAsQString{directoryPath}; + if (!qmlTypes.isEmpty()) { parseTypeInfos(qmlTypes, filterMultipleEntries(parser.dependencies()), imports, - directorySourceId, - directoryPath, + directoryId, + directoryPathAsQString, cppModuleId, package, notUpdatedSourceIds, watchedSourceIdsIds); } - parseQmlComponents( - createComponents(parser.components(), moduleId, pathModuleId, m_fileSystem, directoryPath), - directorySourceId, - directoryId, - package, - notUpdatedSourceIds, - watchedSourceIdsIds, - qmldirState, - qmldirSourceId); + parseQmlComponents(createComponents(parser.components(), + moduleId, + pathModuleId, + m_fileSystem, + directoryPathAsQString), + directoryId, + package, + notUpdatedSourceIds, + watchedSourceIdsIds, + qmldirState, + qmldirSourceId); tracer.tick("append updated project source id", keyValue("module id", moduleId)); - package.updatedDirectoryInfoSourceIds.push_back(directorySourceId); + package.updatedDirectoryInfoDirectoryIds.push_back(directoryId); } void ProjectStorageUpdater::updateDirectories(const QStringList &directories, @@ -386,7 +388,7 @@ void ProjectStorageUpdater::updateDirectories(const QStringList &directories, } void ProjectStorageUpdater::updateSubdirectories(const Utils::PathString &directoryPath, - SourceId directorySourceId, + SourceContextId directoryId, FileState directoryState, const SourceContextIds &subdirectoriesToIgnore, Storage::Synchronization::SynchronizationPackage &package, @@ -395,51 +397,22 @@ void ProjectStorageUpdater::updateSubdirectories(const Utils::PathString &direct { struct Directory { - Directory(Utils::SmallStringView path, SourceId sourceId) + Directory(Utils::SmallStringView path, SourceContextId sourceContextId) : path{path} - , sourceId{sourceId} + , sourceContextId{sourceContextId} {} - bool operator<(const Directory &other) const - { - return sourceId.contextId() < other.sourceId.contextId(); - } - - bool operator==(const Directory &other) const - { - return sourceId.contextId() == other.sourceId.contextId(); - } - Utils::PathString path; - SourceId sourceId; - }; - - struct Compare - { - bool operator()(const Directory &first, const Directory &second) const - { - return first.sourceId.contextId() < second.sourceId.contextId(); - } - - bool operator()(const Directory &first, SourceContextId second) const - { - return first.sourceId.contextId() < second; - } - - bool operator()(SourceContextId first, const Directory &second) const - { - return first < second.sourceId.contextId(); - } + SourceContextId sourceContextId; }; using Directories = QVarLengthArray; - auto subdirectorySourceIds = m_projectStorage.fetchSubdirectorySourceIds(directorySourceId); + auto subdirectoryIds = m_projectStorage.fetchSubdirectoryIds(directoryId); auto subdirectories = Utils::transform( - subdirectorySourceIds, [&](SourceId sourceId) -> Directory { - auto sourceContextId = sourceId.contextId(); + subdirectoryIds, [&](SourceContextId sourceContextId) -> Directory { auto subdirectoryPath = m_pathCache.sourceContextPath(sourceContextId); - return {subdirectoryPath, sourceId}; + return {subdirectoryPath, sourceContextId}; }); auto exisitingSubdirectoryPaths = m_fileSystem.subdirectories(directoryPath.toQString()); @@ -449,32 +422,32 @@ void ProjectStorageUpdater::updateSubdirectories(const Utils::PathString &direct || subdirectory.endsWith("/QtQuick/Scene3D")) continue; Utils::PathString subdirectoryPath = subdirectory; - SourceId sourceId = m_pathCache.sourceId(SourcePath{subdirectoryPath + "/."}); - subdirectories.emplace_back(subdirectoryPath, sourceId); - existingSubdirecories.emplace_back(subdirectoryPath, sourceId); + SourceContextId sourceContextId = m_pathCache.sourceContextId(subdirectoryPath); + subdirectories.emplace_back(subdirectoryPath, sourceContextId); + existingSubdirecories.emplace_back(subdirectoryPath, sourceContextId); } - std::sort(subdirectories.begin(), subdirectories.end()); - subdirectories.erase(std::unique(subdirectories.begin(), subdirectories.end()), - subdirectories.end()); + std::ranges::sort(subdirectories, {}, &Directory::sourceContextId); + auto removed = std::ranges::unique(subdirectories, {}, &Directory::sourceContextId); + subdirectories.erase(removed.begin(), removed.end()); - std::set_difference(subdirectories.begin(), - subdirectories.end(), - subdirectoriesToIgnore.begin(), - subdirectoriesToIgnore.end(), - Utils::make_iterator([&](const Directory &subdirectory) { - updateDirectory(subdirectory.path, - subdirectoriesToIgnore, - package, - notUpdatedSourceIds, - watchedSourceIdsIds); - }), - Compare{}); + Utils::set_greedy_difference( + subdirectories, + subdirectoriesToIgnore, + [&](const Directory &subdirectory) { + updateDirectory(subdirectory.path, + subdirectoriesToIgnore, + package, + notUpdatedSourceIds, + watchedSourceIdsIds); + }, + {}, + &Directory::sourceContextId); if (directoryState == FileState::Changed) { - for (const auto &[subdirectoryPath, subdirectorySourceId] : existingSubdirecories) { - package.directoryInfos.emplace_back(directorySourceId, - subdirectorySourceId, + for (const auto &[subdirectoryPath, subdirectoryId] : existingSubdirecories) { + package.directoryInfos.emplace_back(directoryId, + SourceId::create(SourceNameId{}, subdirectoryId), ModuleId{}, Storage::Synchronization::FileType::Directory); } @@ -492,11 +465,9 @@ void ProjectStorageUpdater::updateDirectory(const Utils::PathString &directoryPa SourcePath qmldirSourcePath{directoryPath + "/qmldir"}; auto [directoryId, qmldirSourceId] = m_pathCache.sourceContextAndSourceId(qmldirSourcePath); - SourcePath directorySourcePath{directoryPath + "/."}; - auto directorySourceId = m_pathCache.sourceId(directorySourcePath); - auto directoryState = fileState(directorySourceId, package, notUpdatedSourceIds); + auto directoryState = fileState(directoryId, package, notUpdatedSourceIds); if (directoryState != FileState::NotExists) - watchedSourceIdsIds.directorySourceIds.push_back(directorySourceId); + watchedSourceIdsIds.directoryIds.push_back(SourceId::create(SourceNameId{}, directoryId)); auto qmldirState = fileState(qmldirSourceId, package, notUpdatedSourceIds); if (qmldirState != FileState::NotExists) @@ -509,7 +480,6 @@ void ProjectStorageUpdater::updateDirectory(const Utils::PathString &directoryPa qmldirState, qmldirSourcePath, qmldirSourceId, - directorySourceId, directoryId, package, notUpdatedSourceIds, @@ -520,7 +490,7 @@ void ProjectStorageUpdater::updateDirectory(const Utils::PathString &directoryPa case FileState::NotChanged: { tracer.tick("update directory not changed"); - parseDirectoryInfos(m_projectStorage.fetchDirectoryInfos(directorySourceId), + parseDirectoryInfos(m_projectStorage.fetchDirectoryInfos(directoryId), package, notUpdatedSourceIds, watchedSourceIdsIds); @@ -529,11 +499,12 @@ void ProjectStorageUpdater::updateDirectory(const Utils::PathString &directoryPa case FileState::NotExists: { tracer.tick("update directory don't exits"); + auto directorySourceId = SourceId::create(SourceNameId{}, directoryId); package.updatedFileStatusSourceIds.push_back(directorySourceId); package.updatedFileStatusSourceIds.push_back(qmldirSourceId); - package.updatedDirectoryInfoSourceIds.push_back(directorySourceId); + package.updatedDirectoryInfoDirectoryIds.push_back(directoryId); package.updatedSourceIds.push_back(qmldirSourceId); - auto qmlDirectoryInfos = m_projectStorage.fetchDirectoryInfos(directorySourceId); + auto qmlDirectoryInfos = m_projectStorage.fetchDirectoryInfos(directoryId); for (const Storage::Synchronization::DirectoryInfo &directoryInfo : qmlDirectoryInfos) { tracer.tick("append updated source id", keyValue("source id", directoryInfo.sourceId)); package.updatedSourceIds.push_back(directoryInfo.sourceId); @@ -547,7 +518,7 @@ void ProjectStorageUpdater::updateDirectory(const Utils::PathString &directoryPa } updateSubdirectories(directoryPath, - directorySourceId, + directoryId, directoryState, subdirectoriesToIgnore, package, @@ -555,10 +526,8 @@ void ProjectStorageUpdater::updateDirectory(const Utils::PathString &directoryPa watchedSourceIdsIds); tracer.end(keyValue("qmldir source path", qmldirSourcePath), - keyValue("directory source path", directorySourcePath), keyValue("directory id", directoryId), keyValue("qmldir source id", qmldirSourceId), - keyValue("directory source source id", directorySourceId), keyValue("qmldir state", qmldirState), keyValue("directory state", directoryState)); } @@ -582,14 +551,15 @@ void ProjectStorageUpdater::updatePropertyEditorPaths( while (dirIterator.hasNext()) { auto pathInfo = dirIterator.nextFileInfo(); - SourceId directorySourceId = m_pathCache.sourceId(SourcePath{pathInfo.filePath() + "/."}); + SourceContextId directoryId = m_pathCache.sourceContextId( + Utils::PathString{pathInfo.filePath()}); - auto state = fileState(directorySourceId, package, notUpdatedSourceIds); + auto state = fileState(directoryId, package, notUpdatedSourceIds); if (state == FileState::Changed) { updatePropertyEditorPath(pathInfo.filePath(), package, - directorySourceId, + directoryId, propertyEditorResourcesPath.size() + 1); } } @@ -618,9 +588,9 @@ void ProjectStorageUpdater::updateTypeAnnotations(const QStringList &directoryPa { NanotraceHR::Tracer tracer("update type annotations", category()); - std::map> updatedSourceIdsDictonary; + std::map> updatedSourceIdsDictonary; - for (SourceId directoryId : m_projectStorage.typeAnnotationDirectorySourceIds()) + for (SourceContextId directoryId : m_projectStorage.typeAnnotationDirectoryIds()) updatedSourceIdsDictonary[directoryId] = {}; for (const auto &directoryPath : directoryPaths) @@ -633,7 +603,7 @@ void ProjectStorageUpdater::updateTypeAnnotations( const QString &rootDirectoryPath, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds, - std::map> &updatedSourceIdsDictonary) + std::map> &updatedSourceIdsDictonary) { NanotraceHR::Tracer tracer("update type annotation directory", category(), @@ -654,28 +624,28 @@ void ProjectStorageUpdater::updateTypeAnnotations( auto directoryPath = fileInfo.canonicalPath(); - SourceId directorySourceId = m_pathCache.sourceId(SourcePath{directoryPath + "/."}); + SourceContextId directoryId = m_pathCache.sourceContextId(Utils::PathString{directoryPath}); auto state = fileState(sourceId, package, notUpdatedSourceIds); if (state == FileState::Changed) - updateTypeAnnotation(directoryPath, fileInfo.filePath(), sourceId, directorySourceId, package); + updateTypeAnnotation(directoryPath, fileInfo.filePath(), sourceId, directoryId, package); if (state != FileState::NotChanged) - updatedSourceIdsDictonary[directorySourceId].push_back(sourceId); + updatedSourceIdsDictonary[directoryId].push_back(sourceId); } } void ProjectStorageUpdater::updateTypeAnnotationDirectories( Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds, - std::map> &updatedSourceIdsDictonary) + std::map> &updatedSourceIdsDictonary) { - for (auto &[directorySourceId, updatedSourceIds] : updatedSourceIdsDictonary) { - auto directoryState = fileState(directorySourceId, package, notUpdatedSourceIds); + for (auto &[directoryId, updatedSourceIds] : updatedSourceIdsDictonary) { + auto directoryState = fileState(directoryId, package, notUpdatedSourceIds); if (directoryState != FileState::NotChanged) { auto existingTypeAnnotationSourceIds = m_projectStorage.typeAnnotationSourceIds( - directorySourceId); + directoryId); std::sort(updatedSourceIds.begin(), updatedSourceIds.end()); @@ -705,7 +675,7 @@ QString contentFromFile(const QString &path) void ProjectStorageUpdater::updateTypeAnnotation(const QString &directoryPath, const QString &filePath, SourceId sourceId, - SourceId directorySourceId, + SourceContextId directoryId, Storage::Synchronization::SynchronizationPackage &package) { NanotraceHR::Tracer tracer{"update type annotation path", @@ -718,7 +688,7 @@ void ProjectStorageUpdater::updateTypeAnnotation(const QString &directoryPath, auto annotations = reader.parseTypeAnnotation(contentFromFile(filePath), directoryPath, sourceId, - directorySourceId); + directoryId); auto &typeAnnotations = package.typeAnnotations; package.typeAnnotations.insert(typeAnnotations.end(), std::make_move_iterator(annotations.begin()), @@ -728,33 +698,33 @@ void ProjectStorageUpdater::updateTypeAnnotation(const QString &directoryPath, void ProjectStorageUpdater::updatePropertyEditorPath( const QString &directoryPath, Storage::Synchronization::SynchronizationPackage &package, - SourceId directorySourceId, + SourceContextId directoryId, long long pathOffset) { NanotraceHR::Tracer tracer{"update property editor path", category(), keyValue("directory path", directoryPath), - keyValue("directory source id", directorySourceId)}; + keyValue("directory id", directoryId)}; tracer.tick("append updated property editor qml path source id", - keyValue("source id", directorySourceId)); - package.updatedPropertyEditorQmlPathSourceIds.push_back(directorySourceId); + keyValue("source id", directoryId)); + package.updatedPropertyEditorQmlPathSourceContextIds.push_back(directoryId); auto dir = QDir{directoryPath}; const auto fileInfos = dir.entryInfoList({"*Pane.qml", "*Specifics.qml"}, QDir::Files); for (const auto &fileInfo : fileInfos) - updatePropertyEditorFilePath(fileInfo.filePath(), package, directorySourceId, pathOffset); + updatePropertyEditorFilePath(fileInfo.filePath(), package, directoryId, pathOffset); } void ProjectStorageUpdater::updatePropertyEditorFilePath( const QString &path, Storage::Synchronization::SynchronizationPackage &package, - SourceId directorySourceId, + SourceContextId directoryId, long long pathOffset) { NanotraceHR::Tracer tracer{"update property editor file path", category(), keyValue("directory path", path), - keyValue("directory source id", directorySourceId)}; + keyValue("directory id", directoryId)}; QRegularExpression regex{R"xo((.+)\/(\w+)(Specifics|Pane).qml)xo"}; auto match = regex.match(QStringView{path}.mid(pathOffset)); @@ -773,7 +743,7 @@ void ProjectStorageUpdater::updatePropertyEditorFilePath( const auto &paths = package.propertyEditorQmlPaths.emplace_back(moduleId, typeName, pathId, - directorySourceId); + directoryId); tracer.tick("append property editor qml paths", keyValue("property editor qml paths", paths)); } @@ -848,26 +818,22 @@ void ProjectStorageUpdater::pathsWithIdsChanged(const std::vector &chan } } - auto directorySourceContextIds = filterUniqueSourceContextIds(directorySourceIds); + auto directoryIds = filterUniqueSourceContextIds(directorySourceIds); - for (auto sourceContextId : directorySourceContextIds) { - Utils::PathString directory = m_pathCache.sourceContextPath(sourceContextId); - updateDirectory(directory, - directorySourceContextIds, - package, - notUpdatedSourceIds, - watchedSourceIds); + for (auto directoryId : directoryIds) { + Utils::PathString directory = m_pathCache.sourceContextPath(directoryId); + updateDirectory(directory, directoryIds, package, notUpdatedSourceIds, watchedSourceIds); } for (SourceId sourceId : filterUniqueSourceIds(qmlDocumentSourceIds)) { - if (!contains(directorySourceContextIds, sourceId.contextId())) + if (!contains(directoryIds, sourceId.contextId())) parseQmlComponent(sourceId, package, notUpdatedSourceIds); } try { for (SourceId sourceId : filterUniqueSourceIds(std::move(qmltypesSourceIds))) { - if (!contains(directorySourceContextIds, sourceId.contextId())) { - auto qmltypesPath = m_pathCache.sourcePath(sourceId); + if (!contains(directoryIds, sourceId.contextId())) { + QString qmltypesPath{m_pathCache.sourcePath(sourceId)}; auto directoryInfo = m_projectStorage.fetchDirectoryInfo(sourceId); if (directoryInfo) parseTypeInfo(*directoryInfo, qmltypesPath, package, notUpdatedSourceIds); @@ -889,9 +855,9 @@ void ProjectStorageUpdater::pathsWithIdsChanged(const std::vector &chan return; } - if (directorySourceContextIds.size()) { + if (directoryIds.size()) { m_pathWatcher.updateContextIdPaths(createIdPaths(watchedSourceIds, m_projectPartId), - directorySourceContextIds); + directoryIds); } m_changedIdPaths.clear(); @@ -902,8 +868,8 @@ void ProjectStorageUpdater::pathsChanged(const SourceIds &) {} void ProjectStorageUpdater::parseTypeInfos(const QStringList &typeInfos, const QList &qmldirDependencies, const QList &qmldirImports, - SourceId directorySourceId, - Utils::SmallStringView directoryPath, + SourceContextId directoryId, + const QString &directoryPath, ModuleId moduleId, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds, @@ -911,16 +877,15 @@ void ProjectStorageUpdater::parseTypeInfos(const QStringList &typeInfos, { NanotraceHR::Tracer tracer{"parse type infos", category(), - keyValue("directory source id", directorySourceId), + keyValue("directory id", directoryId), keyValue("directory path", directoryPath), keyValue("module id", moduleId)}; for (const QString &typeInfo : typeInfos) { NanotraceHR::Tracer tracer{"parse type info", category(), keyValue("type info", typeInfo)}; - Utils::PathString qmltypesPath = Utils::PathString::join( - {directoryPath, "/", Utils::SmallString{typeInfo}}); - SourceId sourceId = m_pathCache.sourceId(SourcePathView{qmltypesPath}); + Utils::PathString qmltypesFileName = typeInfo; + SourceId sourceId = m_pathCache.sourceId(directoryId, qmltypesFileName); tracer.tick("append qmltypes source id", keyValue("source id", sourceId)); watchedSourceIds.qmltypesSourceIds.push_back(sourceId); @@ -936,9 +901,11 @@ void ProjectStorageUpdater::parseTypeInfos(const QStringList &typeInfos, package.updatedModuleDependencySourceIds.push_back(sourceId); const auto &directoryInfo = package.directoryInfos.emplace_back( - directorySourceId, sourceId, moduleId, Storage::Synchronization::FileType::QmlTypes); + directoryId, sourceId, moduleId, Storage::Synchronization::FileType::QmlTypes); tracer.tick("append project data", keyValue("source id", sourceId)); + const QString qmltypesPath = directoryPath + "/" + typeInfo; + parseTypeInfo(directoryInfo, qmltypesPath, package, notUpdatedSourceIds); } } @@ -956,7 +923,7 @@ void ProjectStorageUpdater::parseDirectoryInfos( case Storage::Synchronization::FileType::QmlTypes: { watchedSourceIds.qmltypesSourceIds.push_back(directoryInfo.sourceId); - auto qmltypesPath = m_pathCache.sourcePath(directoryInfo.sourceId); + QString qmltypesPath{m_pathCache.sourcePath(directoryInfo.sourceId)}; parseTypeInfo(directoryInfo, qmltypesPath, package, notUpdatedSourceIds); break; } @@ -973,7 +940,7 @@ void ProjectStorageUpdater::parseDirectoryInfos( } auto ProjectStorageUpdater::parseTypeInfo(const Storage::Synchronization::DirectoryInfo &directoryInfo, - Utils::SmallStringView qmltypesPath, + const QString &qmltypesPath, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds) -> FileState { @@ -987,7 +954,7 @@ auto ProjectStorageUpdater::parseTypeInfo(const Storage::Synchronization::Direct tracer.tick("append updated source ids", keyValue("source id", directoryInfo.sourceId)); package.updatedSourceIds.push_back(directoryInfo.sourceId); - const auto content = m_fileSystem.contentAsQString(QString{qmltypesPath}); + const auto content = m_fileSystem.contentAsQString(qmltypesPath); m_qmlTypesParser.parse(content, package.imports, package.types, directoryInfo); break; } @@ -1008,7 +975,7 @@ auto ProjectStorageUpdater::parseTypeInfo(const Storage::Synchronization::Direct void ProjectStorageUpdater::parseQmlComponent(Utils::SmallStringView relativeFilePath, Utils::SmallStringView directoryPath, Storage::Synchronization::ExportedTypes exportedTypes, - SourceId directorySourceId, + SourceContextId directoryId, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds, WatchedSourceIdsIds &watchedSourceIds, @@ -1020,7 +987,7 @@ void ProjectStorageUpdater::parseQmlComponent(Utils::SmallStringView relativeFil keyValue("relative file path", relativeFilePath), keyValue("directory path", directoryPath), keyValue("exported types", exportedTypes), - keyValue("directory source id", directorySourceId), + keyValue("directory id", directoryId), keyValue("qmldir state", qmldirState)}; if (std::find(relativeFilePath.begin(), relativeFilePath.end(), '+') != relativeFilePath.end()) @@ -1042,7 +1009,7 @@ void ProjectStorageUpdater::parseQmlComponent(Utils::SmallStringView relativeFil notUpdatedSourceIds.sourceIds.emplace_back(sourceId); const auto &directoryInfo = package.directoryInfos.emplace_back( - directorySourceId, sourceId, ModuleId{}, Storage::Synchronization::FileType::QmlDocument); + directoryId, sourceId, ModuleId{}, Storage::Synchronization::FileType::QmlDocument); tracer.tick("append project data", keyValue("project data", directoryInfo)); return; @@ -1065,7 +1032,7 @@ void ProjectStorageUpdater::parseQmlComponent(Utils::SmallStringView relativeFil } const auto &directoryInfo = package.directoryInfos.emplace_back( - directorySourceId, sourceId, ModuleId{}, Storage::Synchronization::FileType::QmlDocument); + directoryId, sourceId, ModuleId{}, Storage::Synchronization::FileType::QmlDocument); tracer.tick("append project data", keyValue("project data", directoryInfo)); tracer.tick("append updated source id", keyValue("source id", sourceId)); @@ -1111,6 +1078,15 @@ void ProjectStorageUpdater::parseQmlComponent(SourceId sourceId, package.types.push_back(std::move(type)); } +ProjectStorageUpdater::FileState ProjectStorageUpdater::fileState( + SourceContextId sourceContextId, + Storage::Synchronization::SynchronizationPackage &package, + NotUpdatedSourceIds ¬UpdatedSourceIds) const +{ + auto sourceId = SourceId::create(SourceNameId{}, sourceContextId); + return fileState(sourceId, package, notUpdatedSourceIds); +} + namespace { template @@ -1166,7 +1142,6 @@ Storage::Synchronization::ExportedTypes createExportedTypes(ProjectStorageUpdate } // namespace void ProjectStorageUpdater::parseQmlComponents(Components components, - SourceId directorySourceId, SourceContextId directoryId, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds, @@ -1176,7 +1151,6 @@ void ProjectStorageUpdater::parseQmlComponents(Components components, { NanotraceHR::Tracer tracer{"parse qml components", category(), - keyValue("directory source id", directorySourceId), keyValue("directory id", directoryId), keyValue("qmldir state", qmldirState)}; @@ -1191,7 +1165,7 @@ void ProjectStorageUpdater::parseQmlComponents(Components components, parseQmlComponent(fileName, directoryPath, createExportedTypes(componentsWithSameFileName), - directorySourceId, + directoryId, package, notUpdatedSourceIds, watchedSourceIdsIds, diff --git a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageupdater.h b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageupdater.h index 38d21428ca7..364f2c36f86 100644 --- a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageupdater.h +++ b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageupdater.h @@ -114,13 +114,13 @@ public: { WatchedSourceIdsIds(std::size_t reserve) { - directorySourceIds.reserve(reserve); + directoryIds.reserve(reserve); qmldirSourceIds.reserve(reserve); qmlSourceIds.reserve(reserve * 30); qmltypesSourceIds.reserve(reserve * 30); } - SourceIds directorySourceIds; + SourceIds directoryIds; SourceIds qmldirSourceIds; SourceIds qmlSourceIds; SourceIds qmltypesSourceIds; @@ -150,17 +150,16 @@ private: NotUpdatedSourceIds ¬UpdatedSourceIds, WatchedSourceIdsIds &watchedSourceIdsIds); void updateSubdirectories(const Utils::PathString &directory, - SourceId directorySourceId, + SourceContextId directoryId, FileState directoryFileState, const SourceContextIds &subdirecoriesToIgnore, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds, WatchedSourceIdsIds &watchedSourceIdsIds); - void updateDirectoryChanged(std::string_view directoryPath, + void updateDirectoryChanged(Utils::SmallStringView directoryPath, FileState qmldirState, SourcePath qmldirSourcePath, SourceId qmldirSourceId, - SourceId directorySourceId, SourceContextId directoryId, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds, @@ -173,31 +172,32 @@ private: void updateTypeAnnotations(const QString &directoryPath, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds, - std::map> &updatedSourceIdsDictonary); - void updateTypeAnnotationDirectories(Storage::Synchronization::SynchronizationPackage &package, - NotUpdatedSourceIds ¬UpdatedSourceIds, - std::map> &updatedSourceIdsDictonary); + std::map> &updatedSourceIdsDictonary); + void updateTypeAnnotationDirectories( + Storage::Synchronization::SynchronizationPackage &package, + NotUpdatedSourceIds ¬UpdatedSourceIds, + std::map> &updatedSourceIdsDictonary); void updateTypeAnnotations(const QStringList &directoryPath, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds); void updateTypeAnnotation(const QString &directoryPath, const QString &filePath, SourceId sourceId, - SourceId directorySourceId, + SourceContextId directoryId, Storage::Synchronization::SynchronizationPackage &package); void updatePropertyEditorPath(const QString &path, Storage::Synchronization::SynchronizationPackage &package, - SourceId directorySourceId, + SourceContextId directoryId, long long pathOffset); void updatePropertyEditorFilePath(const QString &filePath, Storage::Synchronization::SynchronizationPackage &package, - SourceId directorySourceId, + SourceContextId directoryId, long long pathOffset); void parseTypeInfos(const QStringList &typeInfos, const QList &qmldirDependencies, const QList &qmldirImports, - SourceId directorySourceId, - Utils::SmallStringView directoryPath, + SourceContextId directoryId, + const QString &directoryPath, ModuleId moduleId, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds, @@ -207,11 +207,10 @@ private: NotUpdatedSourceIds ¬UpdatedSourceIds, WatchedSourceIdsIds &watchedSourceIdsIds); FileState parseTypeInfo(const Storage::Synchronization::DirectoryInfo &directoryInfo, - Utils::SmallStringView qmltypesPath, + const QString &qmltypesPath, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds); void parseQmlComponents(Components components, - SourceId directorySourceId, SourceContextId directoryId, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds, @@ -221,7 +220,7 @@ private: void parseQmlComponent(Utils::SmallStringView fileName, Utils::SmallStringView directory, Storage::Synchronization::ExportedTypes exportedTypes, - SourceId directorySourceId, + SourceContextId directoryId, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds, WatchedSourceIdsIds &watchedSourceIdsIds, @@ -234,6 +233,9 @@ private: FileState fileState(SourceId sourceId, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds) const; + FileState fileState(SourceContextId sourceContextId, + Storage::Synchronization::SynchronizationPackage &package, + NotUpdatedSourceIds ¬UpdatedSourceIds) const; private: std::vector m_changedIdPaths; diff --git a/src/plugins/qmldesigner/libs/designercore/projectstorage/typeannotationreader.cpp b/src/plugins/qmldesigner/libs/designercore/projectstorage/typeannotationreader.cpp index 80623e02fd7..d646b8b90db 100644 --- a/src/plugins/qmldesigner/libs/designercore/projectstorage/typeannotationreader.cpp +++ b/src/plugins/qmldesigner/libs/designercore/projectstorage/typeannotationreader.cpp @@ -28,10 +28,10 @@ constexpr auto extraFileElementName = "ExtraFile"_L1; } // namespace Synchronization::TypeAnnotations TypeAnnotationReader::parseTypeAnnotation( - const QString &content, const QString &directoryPath, SourceId sourceId, SourceId directorySourceId) + const QString &content, const QString &directoryPath, SourceId sourceId, SourceContextId directoryId) { m_sourceId = sourceId; - m_directorySourceId = directorySourceId; + m_directoryId = directoryId; m_directoryPath = directoryPath; m_parserState = ParsingDocument; if (!SimpleAbstractStreamReader::readFromSource(content)) { @@ -178,7 +178,7 @@ TypeAnnotationReader::ParserSate TypeAnnotationReader::readDocument(const QStrin TypeAnnotationReader::ParserSate TypeAnnotationReader::readMetaInfoRootElement(const QString &name) { if (name == typeElementName) { - auto &annotation = m_typeAnnotations.emplace_back(m_sourceId, m_directorySourceId); + auto &annotation = m_typeAnnotations.emplace_back(m_sourceId, m_directoryId); annotation.traits.canBeContainer = FlagIs::True; annotation.traits.canBeDroppedInFormEditor = FlagIs::True; annotation.traits.canBeDroppedInNavigator = FlagIs::True; diff --git a/src/plugins/qmldesigner/libs/designercore/projectstorage/typeannotationreader.h b/src/plugins/qmldesigner/libs/designercore/projectstorage/typeannotationreader.h index a320493ee27..1c704618ae8 100644 --- a/src/plugins/qmldesigner/libs/designercore/projectstorage/typeannotationreader.h +++ b/src/plugins/qmldesigner/libs/designercore/projectstorage/typeannotationreader.h @@ -50,7 +50,7 @@ public: Synchronization::TypeAnnotations parseTypeAnnotation(const QString &content, const QString &directoryPath, SourceId sourceId, - SourceId directorySourceId); + SourceContextId directoryId); QStringList errors(); @@ -125,7 +125,7 @@ private: json m_itemLibraryEntries; Property m_currentProperty; SourceId m_sourceId; - SourceId m_directorySourceId; + SourceContextId m_directoryId; }; } // namespace QmlDesigner::Storage diff --git a/tests/unit/tests/matchers/projectstorage-matcher.h b/tests/unit/tests/matchers/projectstorage-matcher.h index 3116530fceb..197aa36af24 100644 --- a/tests/unit/tests/matchers/projectstorage-matcher.h +++ b/tests/unit/tests/matchers/projectstorage-matcher.h @@ -78,7 +78,7 @@ MATCHER_P3(IsItemLibraryProperty, template auto IsTypeAnnotation(QmlDesigner::SourceId sourceId, - QmlDesigner::SourceId directorySourceId, + QmlDesigner::SourceContextId directoryId, Utils::SmallStringView typeName, QmlDesigner::ModuleId moduleId, IconPathMatcher iconPath, @@ -88,7 +88,7 @@ auto IsTypeAnnotation(QmlDesigner::SourceId sourceId, { using QmlDesigner::Storage::Synchronization::TypeAnnotation; return AllOf(Field("sourceId", &TypeAnnotation::sourceId, sourceId), - Field("directory sourceId", &TypeAnnotation::directorySourceId, directorySourceId), + Field("directory sourceId", &TypeAnnotation::directoryId, directoryId), Field("typeName", &TypeAnnotation::typeName, typeName), Field("moduleId", &TypeAnnotation::moduleId, moduleId), Field("iconPath", &TypeAnnotation::iconPath, iconPath), diff --git a/tests/unit/tests/mocks/projectstoragemock.h b/tests/unit/tests/mocks/projectstoragemock.h index 6131924db16..1d64b0cc1e8 100644 --- a/tests/unit/tests/mocks/projectstoragemock.h +++ b/tests/unit/tests/mocks/projectstoragemock.h @@ -205,9 +205,12 @@ public: (const, override)); MOCK_METHOD(QmlDesigner::SmallSourceIds<4>, typeAnnotationSourceIds, - (QmlDesigner::SourceId directoryId), + (QmlDesigner::SourceContextId directoryId), + (const, override)); + MOCK_METHOD(QmlDesigner::SmallSourceContextIds<64>, + typeAnnotationDirectoryIds, + (), (const, override)); - MOCK_METHOD(QmlDesigner::SmallSourceIds<64>, typeAnnotationDirectorySourceIds, (), (const, override)); MOCK_METHOD(Utils::PathString, typeIconPath, (QmlDesigner::TypeId typeId), (const, override)); MOCK_METHOD(QmlDesigner::Storage::Info::TypeHints, typeHints, @@ -306,17 +309,18 @@ public: MOCK_METHOD(QmlDesigner::Storage::Synchronization::DirectoryInfos, fetchDirectoryInfos, - (QmlDesigner::SourceId sourceId), + (QmlDesigner::SourceContextId directoryId), (const, override)); MOCK_METHOD(QmlDesigner::Storage::Synchronization::DirectoryInfos, fetchDirectoryInfos, - (QmlDesigner::SourceId sourceId, QmlDesigner::Storage::Synchronization::FileType), + (QmlDesigner::SourceContextId directoryId, + QmlDesigner::Storage::Synchronization::FileType), (const, override)); - MOCK_METHOD(QmlDesigner::SmallSourceIds<32>, - fetchSubdirectorySourceIds, - (QmlDesigner::SourceId sourceId), + MOCK_METHOD(QmlDesigner::SmallSourceContextIds<32>, + fetchSubdirectoryIds, + (QmlDesigner::SourceContextId directoryId), (const, override)); MOCK_METHOD(std::optional, diff --git a/tests/unit/tests/printers/gtest-creator-printing.cpp b/tests/unit/tests/printers/gtest-creator-printing.cpp index 34ee9260327..defef8918c2 100644 --- a/tests/unit/tests/printers/gtest-creator-printing.cpp +++ b/tests/unit/tests/printers/gtest-creator-printing.cpp @@ -853,11 +853,11 @@ std::ostream &operator<<(std::ostream &out, const SynchronizationPackage &packag << ", updatedSourceIds: " << package.updatedSourceIds << ", fileStatuses: " << package.fileStatuses << ", updatedFileStatusSourceIds: " << package.updatedFileStatusSourceIds - << ", updatedDirectoryInfoSourceIds: " << package.updatedDirectoryInfoSourceIds + << ", updatedDirectoryInfoDirectoryIds: " << package.updatedDirectoryInfoDirectoryIds << ", directoryInfos: " << package.directoryInfos << ", propertyEditorQmlPaths: " << package.propertyEditorQmlPaths << ", updatedPropertyEditorQmlPathSourceIds: " - << package.updatedPropertyEditorQmlPathSourceIds + << package.updatedPropertyEditorQmlPathSourceContextIds << ", typeAnnotations: " << package.typeAnnotations << ", updatedTypeAnnotationSourceIds: " << package.updatedTypeAnnotationSourceIds << ")"; @@ -865,8 +865,8 @@ std::ostream &operator<<(std::ostream &out, const SynchronizationPackage &packag std::ostream &operator<<(std::ostream &out, const DirectoryInfo &data) { - return out << "(" << data.directorySourceId << ", " << data.sourceId << ", " << data.moduleId - << ", " << data.fileType << ")"; + return out << "(" << data.directoryId << ", " << data.sourceId << ", " << data.moduleId << ", " + << data.fileType << ")"; } std::ostream &operator<<(std::ostream &out, IsQualified isQualified) diff --git a/tests/unit/tests/unittests/projectstorage/projectstorage-test.cpp b/tests/unit/tests/unittests/projectstorage/projectstorage-test.cpp index 49e9b996ebc..c8dbb7ed618 100644 --- a/tests/unit/tests/unittests/projectstorage/projectstorage-test.cpp +++ b/tests/unit/tests/unittests/projectstorage/projectstorage-test.cpp @@ -24,6 +24,8 @@ using QmlDesigner::FileStatuses; using QmlDesigner::FlagIs; using QmlDesigner::ModuleId; using QmlDesigner::PropertyDeclarationId; +using QmlDesigner::SourceContextId; +using QmlDesigner::SourceContextIds; using QmlDesigner::SourceId; using QmlDesigner::SourceIds; using QmlDesigner::SourceNameId; @@ -1039,10 +1041,19 @@ protected: package.updatedSourceIds = {sourceId1, sourceId2, sourceId3}; - package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "QtObject", sourceId1, sourceIdPath6); - package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "Item", sourceId2, sourceIdPath6); - package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "Item3D", sourceId3, sourceIdPath6); - package.updatedPropertyEditorQmlPathSourceIds.emplace_back(sourceIdPath6); + package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, + "QtObject", + sourceId1, + sourceContextIdPath6); + package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, + "Item", + sourceId2, + sourceContextIdPath6); + package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, + "Item3D", + sourceId3, + sourceContextIdPath6); + package.updatedPropertyEditorQmlPathSourceContextIds.emplace_back(sourceContextIdPath6); return package; } @@ -1056,7 +1067,7 @@ protected: traits.visibleInLibrary = FlagIs::True; annotations.emplace_back(sourceId4, - sourceIdPath6, + sourceContextIdPath6, "Object", qmlModuleId, "/path/to/icon.png", @@ -1078,7 +1089,7 @@ protected: "properties":[["color", "color", "#blue"]]}])xy"); annotations.emplace_back(sourceId5, - sourceIdPath6, + sourceContextIdPath6, "Item", qtQuickModuleId, "/path/to/quick.png", @@ -1103,7 +1114,7 @@ protected: traits.visibleInLibrary = FlagIs::True; annotations.emplace_back(sourceId5, - sourceIdPath1, + sourceContextIdPath1, "Item", qtQuickModuleId, "/path/to/quick.png", @@ -1216,9 +1227,13 @@ protected: SourceId sourceId5{sourcePathCache.sourceId(path5)}; SourceId sourceId6{sourcePathCache.sourceId(path6)}; SourceId sourceIdPath1{sourcePathCache.sourceId(pathPath1)}; + SourceContextId sourceContextIdPath1{sourceIdPath1.contextId()}; SourceId sourceIdPath6{sourcePathCache.sourceId(pathPath6)}; + SourceContextId sourceContextIdPath6{sourceIdPath6.contextId()}; SourceId qmlProjectSourceId{sourcePathCache.sourceId("/path1/qmldir")}; + SourceContextId qmlProjectSourceContextId = qmlProjectSourceId.contextId(); SourceId qtQuickProjectSourceId{sourcePathCache.sourceId("/path2/qmldir")}; + SourceContextId qtQuickProjectSourceContextId = qtQuickProjectSourceId.contextId(); ModuleId qmlModuleId{storage.moduleId("Qml", ModuleKind::QmlLibrary)}; ModuleId qmlNativeModuleId{storage.moduleId("Qml", ModuleKind::CppLibrary)}; ModuleId qtQuickModuleId{storage.moduleId("QtQuick", ModuleKind::QmlLibrary)}; @@ -5669,259 +5684,285 @@ TEST_F(ProjectStorage, populate_module_cache) TEST_F(ProjectStorage, add_directory_infoes) { - Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceId, - sourceId1, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceId, - sourceId2, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceId, - sourceId3, - qtQuickModuleId, - Storage::Synchronization::FileType::QmlTypes}; + Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceContextId, + sourceId1, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceContextId, + sourceId2, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceContextId, + sourceId3, + qtQuickModuleId, + Storage::Synchronization::FileType::QmlTypes}; - storage.synchronize(SynchronizationPackage{{qmlProjectSourceId, qtQuickProjectSourceId}, - {directoryInfo1, directoryInfo2, directoryInfo3}}); + storage.synchronize( + SynchronizationPackage{{qmlProjectSourceContextId, qtQuickProjectSourceContextId}, + {directoryInfo1, directoryInfo2, directoryInfo3}}); - ASSERT_THAT(storage.fetchDirectoryInfos({qmlProjectSourceId, qtQuickProjectSourceId}), + ASSERT_THAT(storage.fetchDirectoryInfos({qmlProjectSourceContextId, qtQuickProjectSourceContextId}), UnorderedElementsAre(directoryInfo1, directoryInfo2, directoryInfo3)); } TEST_F(ProjectStorage, remove_directory_info) { - Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceId, - sourceId1, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceId, - sourceId2, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceId, - sourceId3, - qtQuickModuleId, - Storage::Synchronization::FileType::QmlTypes}; - storage.synchronize(SynchronizationPackage{{qmlProjectSourceId, qtQuickProjectSourceId}, - {directoryInfo1, directoryInfo2, directoryInfo3}}); + Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceContextId, + sourceId1, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceContextId, + sourceId2, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceContextId, + sourceId3, + qtQuickModuleId, + Storage::Synchronization::FileType::QmlTypes}; + storage.synchronize( + SynchronizationPackage{{qmlProjectSourceContextId, qtQuickProjectSourceContextId}, + {directoryInfo1, directoryInfo2, directoryInfo3}}); storage.synchronize( - SynchronizationPackage{{qmlProjectSourceId, qtQuickProjectSourceId}, {directoryInfo1}}); + SynchronizationPackage{{qmlProjectSourceContextId, qtQuickProjectSourceContextId}, + {directoryInfo1}}); - ASSERT_THAT(storage.fetchDirectoryInfos({qmlProjectSourceId, qtQuickProjectSourceId}), + ASSERT_THAT(storage.fetchDirectoryInfos({qmlProjectSourceContextId, qtQuickProjectSourceContextId}), UnorderedElementsAre(directoryInfo1)); } TEST_F(ProjectStorage, update_directory_info_file_type) { - Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceId, - sourceId1, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceId, - sourceId2, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo2b{qmlProjectSourceId, - sourceId2, - qmlModuleId, - Storage::Synchronization::FileType::QmlTypes}; - Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceId, - sourceId3, - qtQuickModuleId, - Storage::Synchronization::FileType::QmlTypes}; - storage.synchronize(SynchronizationPackage{{qmlProjectSourceId, qtQuickProjectSourceId}, - {directoryInfo1, directoryInfo2, directoryInfo3}}); + Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceContextId, + sourceId1, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceContextId, + sourceId2, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo2b{qmlProjectSourceContextId, + sourceId2, + qmlModuleId, + Storage::Synchronization::FileType::QmlTypes}; + Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceContextId, + sourceId3, + qtQuickModuleId, + Storage::Synchronization::FileType::QmlTypes}; + storage.synchronize( + SynchronizationPackage{{qmlProjectSourceContextId, qtQuickProjectSourceContextId}, + {directoryInfo1, directoryInfo2, directoryInfo3}}); - storage.synchronize(SynchronizationPackage{{qmlProjectSourceId}, {directoryInfo1, directoryInfo2b}}); + storage.synchronize( + SynchronizationPackage{{qmlProjectSourceContextId}, {directoryInfo1, directoryInfo2b}}); - ASSERT_THAT(storage.fetchDirectoryInfos({qmlProjectSourceId, qtQuickProjectSourceId}), + ASSERT_THAT(storage.fetchDirectoryInfos({qmlProjectSourceContextId, qtQuickProjectSourceContextId}), UnorderedElementsAre(directoryInfo1, directoryInfo2b, directoryInfo3)); } TEST_F(ProjectStorage, update_directory_info_module_id) { - Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceId, - sourceId1, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceId, - sourceId3, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo2b{qmlProjectSourceId, - sourceId3, - qtQuickModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceId, - sourceId2, - qtQuickModuleId, - Storage::Synchronization::FileType::QmlTypes}; - storage.synchronize(SynchronizationPackage{{qmlProjectSourceId, qtQuickProjectSourceId}, - {directoryInfo1, directoryInfo2, directoryInfo3}}); + Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceContextId, + sourceId1, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceContextId, + sourceId3, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo2b{qmlProjectSourceContextId, + sourceId3, + qtQuickModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceContextId, + sourceId2, + qtQuickModuleId, + Storage::Synchronization::FileType::QmlTypes}; + storage.synchronize( + SynchronizationPackage{{qmlProjectSourceContextId, qtQuickProjectSourceContextId}, + {directoryInfo1, directoryInfo2, directoryInfo3}}); - storage.synchronize(SynchronizationPackage{{qmlProjectSourceId}, {directoryInfo1, directoryInfo2b}}); + storage.synchronize( + SynchronizationPackage{{qmlProjectSourceContextId}, {directoryInfo1, directoryInfo2b}}); - ASSERT_THAT(storage.fetchDirectoryInfos({qmlProjectSourceId, qtQuickProjectSourceId}), + ASSERT_THAT(storage.fetchDirectoryInfos({qmlProjectSourceContextId, qtQuickProjectSourceContextId}), UnorderedElementsAre(directoryInfo1, directoryInfo2b, directoryInfo3)); } TEST_F(ProjectStorage, throw_for_invalid_source_id_in_directory_info) { - Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceId, - SourceId{}, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceContextId, + SourceId{}, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; - ASSERT_THROW(storage.synchronize(SynchronizationPackage{{qmlProjectSourceId}, {directoryInfo1}}), + ASSERT_THROW(storage.synchronize( + SynchronizationPackage{{qmlProjectSourceContextId}, {directoryInfo1}}), QmlDesigner::DirectoryInfoHasInvalidSourceId); } TEST_F(ProjectStorage, insert_directory_info_with_invalid_module_id) { - Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceId, - sourceId1, - ModuleId{}, - Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceContextId, + sourceId1, + ModuleId{}, + Storage::Synchronization::FileType::QmlDocument}; - storage.synchronize(SynchronizationPackage{{qmlProjectSourceId}, {directoryInfo1}}); + storage.synchronize(SynchronizationPackage{{qmlProjectSourceContextId}, {directoryInfo1}}); - ASSERT_THAT(storage.fetchDirectoryInfos({qmlProjectSourceId, qtQuickProjectSourceId}), + ASSERT_THAT(storage.fetchDirectoryInfos({qmlProjectSourceContextId, qtQuickProjectSourceContextId}), UnorderedElementsAre(directoryInfo1)); } TEST_F(ProjectStorage, update_directory_info_with_invalid_module_id) { - Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceId, - sourceId1, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - storage.synchronize(SynchronizationPackage{{qmlProjectSourceId}, {directoryInfo1}}); + Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceContextId, + sourceId1, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + storage.synchronize(SynchronizationPackage{{qmlProjectSourceContextId}, {directoryInfo1}}); directoryInfo1.moduleId = ModuleId{}; - storage.synchronize(SynchronizationPackage{{qmlProjectSourceId}, {directoryInfo1}}); + storage.synchronize(SynchronizationPackage{{qmlProjectSourceContextId}, {directoryInfo1}}); - ASSERT_THAT(storage.fetchDirectoryInfos({qmlProjectSourceId, qtQuickProjectSourceId}), + ASSERT_THAT(storage.fetchDirectoryInfos({qmlProjectSourceContextId, qtQuickProjectSourceContextId}), UnorderedElementsAre(directoryInfo1)); } -TEST_F(ProjectStorage, throw_for_updating_with_invalid_project_source_id_in_directory_info) +TEST_F(ProjectStorage, throw_for_updating_with_invalid_project_source_context_id_in_directory_info) { - Storage::Synchronization::DirectoryInfo directoryInfo1{SourceId{}, - sourceId1, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo1{ + SourceContextId{}, sourceId1, qmlModuleId, Storage::Synchronization::FileType::QmlDocument}; - ASSERT_THROW(storage.synchronize(SynchronizationPackage{{qmlProjectSourceId}, {directoryInfo1}}), + ASSERT_THROW(storage.synchronize( + SynchronizationPackage{{qmlProjectSourceContextId}, {directoryInfo1}}), QmlDesigner::DirectoryInfoHasInvalidProjectSourceId); } -TEST_F(ProjectStorage, fetch_directory_infos_by_directory_source_ids) +TEST_F(ProjectStorage, fetch_directory_infos_by_directory_source_context_ids) { - Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceId, - sourceId1, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceId, - sourceId2, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceId, - sourceId3, - qtQuickModuleId, - Storage::Synchronization::FileType::QmlTypes}; - storage.synchronize(SynchronizationPackage{{qmlProjectSourceId, qtQuickProjectSourceId}, - {directoryInfo1, directoryInfo2, directoryInfo3}}); + Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceContextId, + sourceId1, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceContextId, + sourceId2, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceContextId, + sourceId3, + qtQuickModuleId, + Storage::Synchronization::FileType::QmlTypes}; + storage.synchronize( + SynchronizationPackage{{qmlProjectSourceContextId, qtQuickProjectSourceContextId}, + {directoryInfo1, directoryInfo2, directoryInfo3}}); - auto directoryInfos = storage.fetchDirectoryInfos({qmlProjectSourceId, qtQuickProjectSourceId}); + auto directoryInfos = storage.fetchDirectoryInfos( + {qmlProjectSourceContextId, qtQuickProjectSourceContextId}); ASSERT_THAT(directoryInfos, UnorderedElementsAre(directoryInfo1, directoryInfo2, directoryInfo3)); } -TEST_F(ProjectStorage, fetch_directory_infos_by_directory_source_id) +TEST_F(ProjectStorage, fetch_directory_infos_by_directory_source_context_id) { - Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceId, - sourceId1, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceId, - sourceId2, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceId, - sourceId3, - qtQuickModuleId, - Storage::Synchronization::FileType::QmlTypes}; - storage.synchronize(SynchronizationPackage{{qmlProjectSourceId, qtQuickProjectSourceId}, - {directoryInfo1, directoryInfo2, directoryInfo3}}); + Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceContextId, + sourceId1, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceContextId, + sourceId2, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceContextId, + sourceId3, + qtQuickModuleId, + Storage::Synchronization::FileType::QmlTypes}; + storage.synchronize( + SynchronizationPackage{{qmlProjectSourceContextId, qtQuickProjectSourceContextId}, + {directoryInfo1, directoryInfo2, directoryInfo3}}); - auto directoryInfo = storage.fetchDirectoryInfos(qmlProjectSourceId); + auto directoryInfo = storage.fetchDirectoryInfos(qmlProjectSourceContextId); ASSERT_THAT(directoryInfo, UnorderedElementsAre(directoryInfo1, directoryInfo2)); } -TEST_F(ProjectStorage, fetch_directory_infos_by_directory_source_id_and_file_type) +TEST_F(ProjectStorage, fetch_directory_infos_by_directory_source_context_id_and_file_type) { - Storage::Synchronization::DirectoryInfo directoryInfo1{ - qmlProjectSourceId, sourceId1, qmlModuleId, Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo2{ - qmlProjectSourceId, sourceId2, ModuleId{}, Storage::Synchronization::FileType::Directory}; - Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceId, + Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceContextId, + sourceId1, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceContextId, + sourceId2, + ModuleId{}, + Storage::Synchronization::FileType::Directory}; + Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceContextId, sourceId3, qtQuickModuleId, Storage::Synchronization::FileType::QmlTypes}; - Storage::Synchronization::DirectoryInfo directoryInfo4{ - qmlProjectSourceId, sourceId4, ModuleId{}, Storage::Synchronization::FileType::Directory}; + Storage::Synchronization::DirectoryInfo directoryInfo4{qmlProjectSourceContextId, + sourceId4, + ModuleId{}, + Storage::Synchronization::FileType::Directory}; storage.synchronize( - SynchronizationPackage{{qmlProjectSourceId, qtQuickProjectSourceId}, + SynchronizationPackage{{qmlProjectSourceContextId, qtQuickProjectSourceContextId}, {directoryInfo1, directoryInfo2, directoryInfo3, directoryInfo4}}); - auto directoryInfo = storage.fetchDirectoryInfos(qmlProjectSourceId, + auto directoryInfo = storage.fetchDirectoryInfos(qmlProjectSourceContextId, Storage::Synchronization::FileType::Directory); ASSERT_THAT(directoryInfo, UnorderedElementsAre(directoryInfo2, directoryInfo4)); } -TEST_F(ProjectStorage, fetch_subdirectory_source_ids) +TEST_F(ProjectStorage, fetch_subdirectory_source_context_ids) { - Storage::Synchronization::DirectoryInfo directoryInfo1{ - qmlProjectSourceId, sourceId1, qmlModuleId, Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo2{ - qmlProjectSourceId, sourceId2, ModuleId{}, Storage::Synchronization::FileType::Directory}; - Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceId, + Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceContextId, + sourceId1, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + auto directory1Id = SourceId::create(SourceNameId{}, sourceId2.contextId()); + Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceContextId, + directory1Id, + ModuleId{}, + Storage::Synchronization::FileType::Directory}; + Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceContextId, sourceId3, qtQuickModuleId, Storage::Synchronization::FileType::QmlTypes}; - Storage::Synchronization::DirectoryInfo directoryInfo4{ - qmlProjectSourceId, sourceId4, ModuleId{}, Storage::Synchronization::FileType::Directory}; + auto directory2Id = SourceId::create(SourceNameId{}, sourceId4.contextId()); + Storage::Synchronization::DirectoryInfo directoryInfo4{qmlProjectSourceContextId, + directory2Id, + ModuleId{}, + Storage::Synchronization::FileType::Directory}; storage.synchronize( - SynchronizationPackage{{qmlProjectSourceId, qtQuickProjectSourceId}, + SynchronizationPackage{{qmlProjectSourceContextId, qtQuickProjectSourceContextId}, {directoryInfo1, directoryInfo2, directoryInfo3, directoryInfo4}}); - auto directoryInfo = storage.fetchSubdirectorySourceIds(qmlProjectSourceId); + auto directoryInfo = storage.fetchSubdirectoryIds(qmlProjectSourceContextId); - ASSERT_THAT(directoryInfo, UnorderedElementsAre(sourceId2, sourceId4)); + ASSERT_THAT(directoryInfo, + UnorderedElementsAre(directory1Id.contextId(), directory2Id.contextId())); } -TEST_F(ProjectStorage, fetch_directory_info_by_source_ids) +TEST_F(ProjectStorage, fetch_directory_info_by_source_id) { - Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceId, - sourceId1, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceId, - sourceId2, - qmlModuleId, - Storage::Synchronization::FileType::QmlDocument}; - Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceId, - sourceId3, - qtQuickModuleId, - Storage::Synchronization::FileType::QmlTypes}; - storage.synchronize(SynchronizationPackage{{qmlProjectSourceId, qtQuickProjectSourceId}, - {directoryInfo1, directoryInfo2, directoryInfo3}}); + Storage::Synchronization::DirectoryInfo directoryInfo1{qmlProjectSourceContextId, + sourceId1, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo2{qmlProjectSourceContextId, + sourceId2, + qmlModuleId, + Storage::Synchronization::FileType::QmlDocument}; + Storage::Synchronization::DirectoryInfo directoryInfo3{qtQuickProjectSourceContextId, + sourceId3, + qtQuickModuleId, + Storage::Synchronization::FileType::QmlTypes}; + storage.synchronize( + SynchronizationPackage{{qmlProjectSourceContextId, qtQuickProjectSourceContextId}, + {directoryInfo1, directoryInfo2, directoryInfo3}}); - auto directoryInfo = storage.fetchDirectoryInfo({sourceId2}); + auto directoryInfo = storage.fetchDirectoryInfo(sourceId2); ASSERT_THAT(directoryInfo, Eq(directoryInfo2)); } @@ -8064,7 +8105,10 @@ TEST_F(ProjectStorage, synchronize_property_editor_adds_path) auto package{createPropertyEditorPathsSynchronizationPackage()}; package.propertyEditorQmlPaths.pop_back(); storage.synchronize(package); - package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "Item3D", sourceId3, sourceIdPath6); + package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, + "Item3D", + sourceId3, + sourceContextIdPath6); storage.synchronize(package); @@ -8076,7 +8120,10 @@ TEST_F(ProjectStorage, synchronize_property_editor_adds_path) TEST_F(ProjectStorage, synchronize_property_editor_with_non_existing_type_name) { auto package{createPropertyEditorPathsSynchronizationPackage()}; - package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "Item4D", sourceId4, sourceIdPath6); + package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, + "Item4D", + sourceId4, + sourceContextIdPath6); storage.synchronize(package); @@ -8441,7 +8488,7 @@ TEST_F(ProjectStorage, synchronize_type_annotation_directory_source_id) storage.synchronize(package); - ASSERT_THAT(storage.typeAnnotationSourceIds(sourceIdPath6), + ASSERT_THAT(storage.typeAnnotationSourceIds(sourceContextIdPath6), UnorderedElementsAre(sourceId4, sourceId5)); } @@ -8453,7 +8500,7 @@ TEST_F(ProjectStorage, get_type_annotation_source_ids) package.typeAnnotations); storage.synchronize(package); - auto sourceIds = storage.typeAnnotationSourceIds(sourceIdPath6); + auto sourceIds = storage.typeAnnotationSourceIds(sourceContextIdPath6); ASSERT_THAT(sourceIds, UnorderedElementsAre(sourceId4, sourceId5)); } @@ -8466,9 +8513,9 @@ TEST_F(ProjectStorage, get_type_annotation_directory_source_ids) package.typeAnnotations); storage.synchronize(package); - auto sourceIds = storage.typeAnnotationDirectorySourceIds(); + auto sourceIds = storage.typeAnnotationDirectoryIds(); - ASSERT_THAT(sourceIds, ElementsAre(sourceIdPath1, sourceIdPath6)); + ASSERT_THAT(sourceIds, ElementsAre(sourceContextIdPath1, sourceContextIdPath6)); } TEST_F(ProjectStorage, get_all_item_library_entries) diff --git a/tests/unit/tests/unittests/projectstorage/projectstorageupdater-test.cpp b/tests/unit/tests/unittests/projectstorage/projectstorageupdater-test.cpp index a185bec52f4..29bf214a105 100644 --- a/tests/unit/tests/unittests/projectstorage/projectstorageupdater-test.cpp +++ b/tests/unit/tests/unittests/projectstorage/projectstorageupdater-test.cpp @@ -25,7 +25,9 @@ namespace Storage = QmlDesigner::Storage; using QmlDesigner::FileStatus; using QmlDesigner::ModuleId; +using QmlDesigner::SourceContextId; using QmlDesigner::SourceId; +using QmlDesigner::SourceNameId; namespace Storage = QmlDesigner::Storage; using QmlDesigner::IdPaths; using QmlDesigner::Storage::Import; @@ -99,17 +101,17 @@ MATCHER_P3(IsFileStatus, } MATCHER_P4(IsDirectoryInfo, - directorySourceId, + directoryId, sourceId, moduleId, fileType, std::string(negation ? "isn't " : "is ") - + PrintToString(Storage::Synchronization::DirectoryInfo{ - directorySourceId, sourceId, moduleId, fileType})) + + PrintToString( + Storage::Synchronization::DirectoryInfo{directoryId, sourceId, moduleId, fileType})) { const Storage::Synchronization::DirectoryInfo &directoryInfo = arg; - return compareInvalidAreTrue(directoryInfo.directorySourceId, directorySourceId) + return compareInvalidAreTrue(directoryInfo.directoryId, directoryId) && directoryInfo.sourceId == sourceId && compareInvalidAreTrue(directoryInfo.moduleId, moduleId) && directoryInfo.fileType == fileType; @@ -122,23 +124,25 @@ MATCHER(PackageIsEmpty, std::string(negation ? "isn't empty" : "is empty")) return package.imports.empty() && package.types.empty() && package.fileStatuses.empty() && package.updatedSourceIds.empty() && package.directoryInfos.empty() && package.updatedFileStatusSourceIds.empty() - && package.updatedDirectoryInfoSourceIds.empty() && package.moduleDependencies.empty() + && package.updatedDirectoryInfoDirectoryIds.empty() && package.moduleDependencies.empty() && package.updatedModuleDependencySourceIds.empty() && package.moduleExportedImports.empty() && package.updatedModuleIds.empty() && package.propertyEditorQmlPaths.empty() - && package.updatedPropertyEditorQmlPathSourceIds.empty() + && package.updatedPropertyEditorQmlPathSourceContextIds.empty() && package.typeAnnotations.empty() && package.updatedTypeAnnotationSourceIds.empty(); } -template +template auto IsPropertyEditorQmlPath(const ModuleIdMatcher &moduleIdMatcher, const TypeNameMatcher &typeNameMatcher, - const SourceIdMatcher &pathIdMatcher) + const SourceIdMatcher &pathIdMatcher, + const SourceContextIdMatcher &directoryIdMatcher) { using QmlDesigner::Storage::Synchronization::PropertyEditorQmlPath; return AllOf(Field(&PropertyEditorQmlPath::moduleId, moduleIdMatcher), Field(&PropertyEditorQmlPath::typeName, typeNameMatcher), - Field(&PropertyEditorQmlPath::pathId, pathIdMatcher)); + Field(&PropertyEditorQmlPath::pathId, pathIdMatcher), + Field(&PropertyEditorQmlPath::directoryId, directoryIdMatcher)); } class ProjectStorageUpdater : public testing::Test @@ -288,10 +292,10 @@ public: ON_CALL(fileSystemMock, qmlFileNames(Eq(directoryPath))).WillByDefault(Return(qmlFileNames)); } - void setDirectoryInfos(SourceId directoryPathSourceId, + void setDirectoryInfos(SourceContextId directorySourceId, const QmlDesigner::Storage::Synchronization::DirectoryInfos &directoryInfos) { - ON_CALL(projectStorageMock, fetchDirectoryInfos(Eq(directoryPathSourceId))) + ON_CALL(projectStorageMock, fetchDirectoryInfos(Eq(directorySourceId))) .WillByDefault(Return(directoryInfos)); for (const DirectoryInfo &directoryInfo : directoryInfos) { ON_CALL(projectStorageMock, fetchDirectoryInfo(Eq(directoryInfo.sourceId))) @@ -314,11 +318,11 @@ public: ON_CALL(fileSystemMock, subdirectories(Eq(directoryPath))).WillByDefault(Return(subdirectoryPaths)); } - void setSubdirectorySourceIds(SourceId directorySourceId, - const QmlDesigner::SmallSourceIds<32> &subdirectorySourceId) + void setSubdirectorySourceIds(SourceContextId directoryId, + const QmlDesigner::SmallSourceContextIds<32> &subdirectoryIds) { - ON_CALL(projectStorageMock, fetchSubdirectorySourceIds(Eq(directorySourceId))) - .WillByDefault(Return(subdirectorySourceId)); + ON_CALL(projectStorageMock, fetchSubdirectoryIds(Eq(directoryId))) + .WillByDefault(Return(subdirectoryIds)); } auto moduleId(Utils::SmallStringView name, ModuleKind kind) const @@ -326,6 +330,17 @@ public: return storage.moduleId(name, kind); } + SourceId createDirectorySourceId(Utils::SmallStringView path) const + { + auto directoryId = sourcePathCache.sourceContextId(path); + return SourceId::create(SourceNameId{}, directoryId); + } + + SourceId createDirectorySourceIdFromQString(const QString &path) const + { + return createDirectorySourceId(Utils::PathString{path}); + } + protected: NiceMock fileSystemMock; NiceMock projectStorageMock; @@ -353,17 +368,21 @@ protected: SourceId qmltypesPathSourceId = sourcePathCache.sourceId("/path/example.qmltypes"); SourceId qmltypes2PathSourceId = sourcePathCache.sourceId("/path/example2.qmltypes"); SourceId qmlDirPathSourceId = sourcePathCache.sourceId("/path/qmldir"); - SourceId directoryPathSourceId = sourcePathCache.sourceId("/path/."); + SourceContextId directoryPathId = qmlDirPathSourceId.contextId(); + SourceId directoryPathSourceId = SourceId::create(QmlDesigner::SourceNameId{}, directoryPathId); SourceId qmlDocumentSourceId1 = sourcePathCache.sourceId("/path/First.qml"); SourceId qmlDocumentSourceId2 = sourcePathCache.sourceId("/path/First2.qml"); SourceId qmlDocumentSourceId3 = sourcePathCache.sourceId("/path/Second.qml"); const QString itemLibraryPath = QDir::cleanPath( UNITTEST_DIR "/../../../../share/qtcreator/qmldesigner/itemLibrary/"); + SourceContextId itemLibraryPathSourceContextId = sourcePathCache.sourceContextId( + Utils::PathString{itemLibraryPath}); + SourceId itemLibraryPathSourceId = SourceId::create(SourceNameId{}, + itemLibraryPathSourceContextId); const QString qmlImportsPath = QDir::cleanPath(UNITTEST_DIR "/projectstorage/data/qml"); - SourceId itemLibraryPathSourceId = sourcePathCache.sourceId( - QmlDesigner::SourcePath{itemLibraryPath + "/."}); - SourceId qmlImportsPathSourceId = sourcePathCache.sourceId( - QmlDesigner::SourcePath{qmlImportsPath + "/."}); + SourceContextId qmlImportsPathSourceContextId = sourcePathCache.sourceContextId( + Utils::PathString{itemLibraryPath}); + SourceId qmlImportsPathSourceId = SourceId::create(SourceNameId{}, qmlImportsPathSourceContextId); ModuleId qmlModuleId{storage.moduleId("Qml", ModuleKind::QmlLibrary)}; ModuleId qmlCppNativeModuleId{storage.moduleId("Qml", ModuleKind::CppLibrary)}; ModuleId exampleModuleId{storage.moduleId("Example", ModuleKind::QmlLibrary)}; @@ -420,9 +439,12 @@ protected: QmlDesigner::SourceType::Qml}; QmlDesigner::ProjectChunkId otherQmltypesProjectChunkId{otherProjectPartId, QmlDesigner::SourceType::QmlTypes}; - SourceId path1SourceId = sourcePathCache.sourceId("/path/one/."); - SourceId path2SourceId = sourcePathCache.sourceId("/path/two/."); - SourceId path3SourceId = sourcePathCache.sourceId("/path/three/."); + SourceContextId path1SourceContextId = sourcePathCache.sourceContextId("/path/one"); + SourceId path1SourceId = SourceId::create(QmlDesigner::SourceNameId{}, path1SourceContextId); + SourceContextId path2SourceContextId = sourcePathCache.sourceContextId("/path/two"); + SourceId path2SourceId = SourceId::create(QmlDesigner::SourceNameId{}, path2SourceContextId); + SourceContextId path3SourceContextId = sourcePathCache.sourceContextId("/path/three"); + SourceId path3SourceId = SourceId::create(QmlDesigner::SourceNameId{}, path3SourceContextId); SourceId qmldir1SourceId = sourcePathCache.sourceId("/path/one/qmldir"); SourceId qmldir2SourceId = sourcePathCache.sourceId("/path/two/qmldir"); SourceId qmldir3SourceId = sourcePathCache.sourceId("/path/three/qmldir"); @@ -438,7 +460,7 @@ TEST_F(ProjectStorageUpdater, get_content_for_qml_dir_paths_if_file_status_is_di SourceId qmlDir1PathSourceId = sourcePathCache.sourceId("/path/one/qmldir"); SourceId qmlDir2PathSourceId = sourcePathCache.sourceId("/path/two/qmldir"); SourceId qmlDir3PathSourceId = sourcePathCache.sourceId("/path/three/qmldir"); - SourceId path3SourceId = sourcePathCache.sourceId("/path/three/."); + SourceId path3SourceId = createDirectorySourceId("/path/three"); QStringList directories = {"/path/one", "/path/two", "/path/three"}; setFilesChanged({qmlDir1PathSourceId, qmlDir2PathSourceId}); setFilesDontChanged({qmlDir3PathSourceId, path3SourceId}); @@ -455,7 +477,7 @@ TEST_F(ProjectStorageUpdater, SourceId qmlDir1PathSourceId = sourcePathCache.sourceId("/path/one/qmldir"); SourceId qmlDir2PathSourceId = sourcePathCache.sourceId("/path/two/qmldir"); SourceId qmlDir3PathSourceId = sourcePathCache.sourceId("/path/three/qmldir"); - SourceId path3SourceId = sourcePathCache.sourceId("/path/three/."); + SourceId path3SourceId = createDirectorySourceId("/path/three"); QStringList directories = {"/path/one"}; setSubdirectoryPaths(u"/path/one", {"/path/two", "/path/three"}); setFilesChanged({qmlDir1PathSourceId, qmlDir2PathSourceId}); @@ -567,7 +589,7 @@ TEST_F(ProjectStorageUpdater, synchronize_is_empty_for_no_change) TEST_F(ProjectStorageUpdater, synchronize_is_empty_for_no_change_in_subdirectory) { SourceId qmlDirRootPathSourceId = sourcePathCache.sourceId("/root/qmldir"); - SourceId rootPathSourceId = sourcePathCache.sourceId("/root/."); + SourceId rootPathSourceId = createDirectorySourceId("/root"); setFilesDontChanged({qmltypesPathSourceId, qmltypes2PathSourceId, qmlDirPathSourceId, @@ -606,12 +628,12 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_types) UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 1, 21), IsFileStatus(qmltypesPathSourceId, 1, 21))), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmltypesPathSourceId, exampleCppNativeModuleId, FileType::QmlTypes))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId))))); + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId))))); updater.update({.directories = directories}); } @@ -621,7 +643,9 @@ TEST_F(ProjectStorageUpdater, synchronize_subdircectories) QStringList directories = {"/root"}; setSubdirectoryPaths(u"/root", {"/path/one", "/path/two"}); setSubdirectoryPaths(u"/path/one", {"/path/three"}); - SourceId rootDirectoryPathSourceId = sourcePathCache.sourceId("/root/."); + SourceContextId rootDirectoryPathId = sourcePathCache.sourceContextId("/root"); + SourceId rootDirectoryPathSourceId = SourceId::create(QmlDesigner::SourceNameId{}, + rootDirectoryPathId); setFilesChanged({rootDirectoryPathSourceId, path1SourceId, path2SourceId, path3SourceId}); EXPECT_CALL( @@ -629,12 +653,14 @@ TEST_F(ProjectStorageUpdater, synchronize_subdircectories) synchronize(AllOf( Field(&SynchronizationPackage::directoryInfos, UnorderedElementsAre( - IsDirectoryInfo(rootDirectoryPathSourceId, path1SourceId, ModuleId{}, FileType::Directory), - IsDirectoryInfo(rootDirectoryPathSourceId, path2SourceId, ModuleId{}, FileType::Directory), - IsDirectoryInfo(path1SourceId, path3SourceId, ModuleId{}, FileType::Directory))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre( - rootDirectoryPathSourceId, path1SourceId, path2SourceId, path3SourceId))))); + IsDirectoryInfo(rootDirectoryPathId, path1SourceId, ModuleId{}, FileType::Directory), + IsDirectoryInfo(rootDirectoryPathId, path2SourceId, ModuleId{}, FileType::Directory), + IsDirectoryInfo(path1SourceContextId, path3SourceId, ModuleId{}, FileType::Directory))), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(rootDirectoryPathId, + path1SourceContextId, + path2SourceContextId, + path3SourceContextId))))); updater.update({.directories = directories}); } @@ -644,17 +670,20 @@ TEST_F(ProjectStorageUpdater, synchronize_subdircectories_even_for_no_changes) QStringList directories = {"/root"}; setSubdirectoryPaths(u"/root", {"/path/one", "/path/two"}); setSubdirectoryPaths(u"/path/one", {"/path/three"}); - SourceId rootDirectoryPathSourceId = sourcePathCache.sourceId("/root/."); + auto rootDirectoryPathSourceId = createDirectorySourceId("/root"); setFilesChanged({path1SourceId, path2SourceId, path3SourceId}); setFilesDontChanged({rootDirectoryPathSourceId}); EXPECT_CALL(projectStorageMock, - synchronize( - AllOf(Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo( - path1SourceId, path3SourceId, ModuleId{}, FileType::Directory))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(path1SourceId, path2SourceId, path3SourceId))))); + synchronize(AllOf(Field(&SynchronizationPackage::directoryInfos, + UnorderedElementsAre(IsDirectoryInfo(path1SourceContextId, + path3SourceId, + ModuleId{}, + FileType::Directory))), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(path1SourceContextId, + path2SourceContextId, + path3SourceContextId))))); updater.update({.directories = directories}); } @@ -663,26 +692,28 @@ TEST_F(ProjectStorageUpdater, synchronize_subdircectories_for_deleted_subdirecti { QStringList directories = {"/root"}; setSubdirectoryPaths(u"/root", {"/path/two"}); - SourceId rootDirectoryPathSourceId = sourcePathCache.sourceId("/root/."); + SourceContextId rootDirectoryPathId = sourcePathCache.sourceContextId("/root"); + SourceId rootDirectoryPathSourceId = SourceId::create(QmlDesigner::SourceNameId{}, + rootDirectoryPathId); setFilesChanged({rootDirectoryPathSourceId}); setFilesDontExists({ path1SourceId, path3SourceId, }); - setSubdirectorySourceIds(rootDirectoryPathSourceId, {path1SourceId, path2SourceId}); - setSubdirectorySourceIds(path1SourceId, {path3SourceId}); + setSubdirectorySourceIds(rootDirectoryPathId, {path1SourceContextId, path2SourceContextId}); + setSubdirectorySourceIds(path1SourceContextId, {path3SourceContextId}); EXPECT_CALL(projectStorageMock, synchronize(AllOf(Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(rootDirectoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(rootDirectoryPathId, path2SourceId, ModuleId{}, FileType::Directory))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(rootDirectoryPathSourceId, - path1SourceId, - path2SourceId, - path3SourceId))))); + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(rootDirectoryPathId, + path1SourceContextId, + path2SourceContextId, + path3SourceContextId))))); updater.update({.directories = directories}); } @@ -826,21 +857,14 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents) IsFileStatus(qmlDocumentSourceId1, 1, 21), IsFileStatus(qmlDocumentSourceId2, 1, 21), IsFileStatus(qmlDocumentSourceId3, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId2, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId3, - ModuleId{}, - FileType::QmlDocument)))))); + UnorderedElementsAre( + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument)))))); updater.update({.directories = directories}); } @@ -902,21 +926,14 @@ TEST_F(ProjectStorageUpdater, skip_duplicate_qmldir_entries) IsFileStatus(qmlDocumentSourceId1, 1, 21), IsFileStatus(qmlDocumentSourceId2, 1, 21), IsFileStatus(qmlDocumentSourceId3, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId2, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId3, - ModuleId{}, - FileType::QmlDocument)))))); + UnorderedElementsAre( + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument)))))); updater.update({.directories = directories}); } @@ -929,8 +946,8 @@ TEST_F(ProjectStorageUpdater, synchronize_add_only_qml_document_in_directory) setFilesChanged({directoryPathSourceId}); setFilesDontChanged({qmlDirPathSourceId, qmlDocumentSourceId1}); setFilesAdded({qmlDocumentSourceId2}); - setDirectoryInfos(directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}}); setQmlFileNames(u"/path", {"First.qml", "First2.qml"}); EXPECT_CALL(projectStorageMock, @@ -962,14 +979,14 @@ TEST_F(ProjectStorageUpdater, synchronize_add_only_qml_document_in_directory) Field(&SynchronizationPackage::fileStatuses, UnorderedElementsAre(IsFileStatus(qmlDocumentSourceId2, 1, 21), IsFileStatus(directoryPathSourceId, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument)))))); @@ -987,11 +1004,10 @@ TEST_F(ProjectStorageUpdater, synchronize_removes_qml_document) setFilesChanged({qmlDirPathSourceId}); setFilesDontChanged({qmlDocumentSourceId1, qmlDocumentSourceId2}); setFilesRemoved({qmlDocumentSourceId3}); - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument}}); setQmlFileNames(u"/path", {"First.qml", "First2.qml"}); EXPECT_CALL(projectStorageMock, @@ -1026,14 +1042,14 @@ TEST_F(ProjectStorageUpdater, synchronize_removes_qml_document) UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId3)), Field(&SynchronizationPackage::fileStatuses, UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument)))))); @@ -1049,9 +1065,9 @@ TEST_F(ProjectStorageUpdater, synchronize_removes_qml_document_in_qmldir_only) setContent(u"/path/qmldir", qmldir); setFilesChanged({qmlDirPathSourceId}); setFilesDontChanged({qmlDocumentSourceId1, qmlDocumentSourceId2}); - setDirectoryInfos(directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); setQmlFileNames(u"/path", {"First.qml", "First2.qml"}); EXPECT_CALL( @@ -1081,14 +1097,14 @@ TEST_F(ProjectStorageUpdater, synchronize_removes_qml_document_in_qmldir_only) UnorderedElementsAre(qmlDirPathSourceId)), Field(&SynchronizationPackage::fileStatuses, UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument)))))); @@ -1105,9 +1121,9 @@ TEST_F(ProjectStorageUpdater, synchronize_add_qml_document_to_qmldir) setContent(u"/path/qmldir", qmldir); setFilesChanged({qmlDirPathSourceId}); setFilesDontChanged({qmlDocumentSourceId1, qmlDocumentSourceId2}); - setDirectoryInfos(directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); setQmlFileNames(u"/path", {"First.qml", "First2.qml"}); EXPECT_CALL( @@ -1139,14 +1155,14 @@ TEST_F(ProjectStorageUpdater, synchronize_add_qml_document_to_qmldir) UnorderedElementsAre(qmlDirPathSourceId)), Field(&SynchronizationPackage::fileStatuses, UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument)))))); @@ -1162,9 +1178,9 @@ TEST_F(ProjectStorageUpdater, synchronize_remove_qml_document_from_qmldir) setContent(u"/path/qmldir", qmldir); setFilesDontChanged({qmlDocumentSourceId1, qmlDocumentSourceId2}); setFilesChanged({qmlDirPathSourceId}); - setDirectoryInfos(directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); setQmlFileNames(u"/path", {"First.qml", "First2.qml"}); EXPECT_CALL( @@ -1194,14 +1210,14 @@ TEST_F(ProjectStorageUpdater, synchronize_remove_qml_document_from_qmldir) UnorderedElementsAre(qmlDirPathSourceId)), Field(&SynchronizationPackage::fileStatuses, UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument)))))); @@ -1260,33 +1276,25 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_dont_update_if_up_to_dat IsFileStatus(qmlDocumentSourceId2, 1, 21))), Field(&SynchronizationPackage::updatedFileStatusSourceIds, UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId1, qmlDocumentSourceId2)), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId2, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId3, - ModuleId{}, - FileType::QmlDocument)))))); + UnorderedElementsAre( + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument)))))); updater.update({.directories = directories}); } TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_has_not_changed) { - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmlDocumentSourceId1, exampleModuleId, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, exampleModuleId, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmlDocumentSourceId1, exampleModuleId, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, exampleModuleId, FileType::QmlDocument}}); setFilesDontChanged({qmlDirPathSourceId}); EXPECT_CALL( @@ -1332,12 +1340,11 @@ TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_has_not_changed) TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_has_not_changed_and_some_updated_files) { - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmlDocumentSourceId1, exampleModuleId, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, exampleModuleId, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmlDocumentSourceId1, exampleModuleId, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, exampleModuleId, FileType::QmlDocument}}); setFilesDontChanged({qmlDirPathSourceId, qmltypes2PathSourceId, qmlDocumentSourceId2}); EXPECT_CALL( @@ -1368,12 +1375,11 @@ TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_has_not_changed_and_some TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_not_changed_and_some_removed_files) { setQmlFileNames(u"/path", {"First2.qml"}); - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmlDocumentSourceId1, exampleModuleId, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, exampleModuleId, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmlDocumentSourceId1, exampleModuleId, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, exampleModuleId, FileType::QmlDocument}}); setFilesDontChanged({qmlDirPathSourceId, qmltypes2PathSourceId, qmlDocumentSourceId2}); setFilesRemoved({qmltypesPathSourceId, qmlDocumentSourceId1}); @@ -1387,12 +1393,11 @@ TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_has_changed_and_some_rem typeinfo example2.qmltypes)"}; setContent(u"/path/qmldir", qmldir); setQmlFileNames(u"/path", {"First2.qml"}); - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmlDocumentSourceId1, exampleModuleId, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, exampleModuleId, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmlDocumentSourceId1, exampleModuleId, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, exampleModuleId, FileType::QmlDocument}}); setFilesDontChanged({qmltypes2PathSourceId, qmlDocumentSourceId2}); setFilesRemoved({qmltypesPathSourceId, qmlDocumentSourceId1}); @@ -1420,11 +1425,11 @@ TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_has_changed_and_some_rem Field(&SynchronizationPackage::updatedFileStatusSourceIds, UnorderedElementsAre(qmlDirPathSourceId, qmltypesPathSourceId, qmlDocumentSourceId1)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, + IsDirectoryInfo(directoryPathId, qmltypes2PathSourceId, exampleCppNativeModuleId, FileType::QmlTypes)))))); @@ -1435,14 +1440,14 @@ TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_has_changed_and_some_rem TEST_F(ProjectStorageUpdater, update_qml_types_files_is_empty) { EXPECT_CALL(projectStorageMock, - synchronize( - AllOf(Field(&SynchronizationPackage::imports, IsEmpty()), - Field(&SynchronizationPackage::types, IsEmpty()), - Field(&SynchronizationPackage::updatedSourceIds, IsEmpty()), - Field(&SynchronizationPackage::fileStatuses, IsEmpty()), - Field(&SynchronizationPackage::updatedFileStatusSourceIds, IsEmpty()), - Field(&SynchronizationPackage::directoryInfos, IsEmpty()), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, IsEmpty())))); + synchronize(AllOf(Field(&SynchronizationPackage::imports, IsEmpty()), + Field(&SynchronizationPackage::types, IsEmpty()), + Field(&SynchronizationPackage::updatedSourceIds, IsEmpty()), + Field(&SynchronizationPackage::fileStatuses, IsEmpty()), + Field(&SynchronizationPackage::updatedFileStatusSourceIds, IsEmpty()), + Field(&SynchronizationPackage::directoryInfos, IsEmpty()), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + IsEmpty())))); updater.update({}); } @@ -1456,36 +1461,34 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_with_different_version_b setContent(u"/path/qmldir", qmldir); setQmlFileNames(u"/path", {"First.qml"}); - EXPECT_CALL(projectStorageMock, - synchronize( - AllOf(Field(&SynchronizationPackage::imports, UnorderedElementsAre(import1)), - Field(&SynchronizationPackage::types, - UnorderedElementsAre(AllOf( - IsStorageType("First.qml", - Storage::Synchronization::ImportedType{"Object"}, - TypeTraitsKind::Reference, - qmlDocumentSourceId1, - Storage::Synchronization::ChangeLevel::Full), - Field(&Storage::Synchronization::Type::exportedTypes, - UnorderedElementsAre( - IsExportedType(exampleModuleId, "FirstType", 1, 0), - IsExportedType(exampleModuleId, "FirstType", 1, 1), - IsExportedType(exampleModuleId, "FirstType", 6, 0), - IsExportedType(pathModuleId, "First", -1, -1)))))), - Field(&SynchronizationPackage::updatedSourceIds, - UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId1)), - Field(&SynchronizationPackage::updatedFileStatusSourceIds, - UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId1)), - Field(&SynchronizationPackage::fileStatuses, - UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 1, 21), - IsFileStatus(qmlDocumentSourceId1, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), - Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument)))))); + EXPECT_CALL( + projectStorageMock, + synchronize(AllOf( + Field(&SynchronizationPackage::imports, UnorderedElementsAre(import1)), + Field(&SynchronizationPackage::types, + UnorderedElementsAre(AllOf( + IsStorageType("First.qml", + Storage::Synchronization::ImportedType{"Object"}, + TypeTraitsKind::Reference, + qmlDocumentSourceId1, + Storage::Synchronization::ChangeLevel::Full), + Field(&Storage::Synchronization::Type::exportedTypes, + UnorderedElementsAre(IsExportedType(exampleModuleId, "FirstType", 1, 0), + IsExportedType(exampleModuleId, "FirstType", 1, 1), + IsExportedType(exampleModuleId, "FirstType", 6, 0), + IsExportedType(pathModuleId, "First", -1, -1)))))), + Field(&SynchronizationPackage::updatedSourceIds, + UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId1)), + Field(&SynchronizationPackage::updatedFileStatusSourceIds, + UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId1)), + Field(&SynchronizationPackage::fileStatuses, + UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 1, 21), + IsFileStatus(qmlDocumentSourceId1, 1, 21))), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), + Field(&SynchronizationPackage::directoryInfos, + UnorderedElementsAre(IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument)))))); updater.update({.directories = directories}); } @@ -1498,35 +1501,33 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_with_different_type_name setContent(u"/path/qmldir", qmldir); setQmlFileNames(u"/path", {"First.qml"}); - EXPECT_CALL(projectStorageMock, - synchronize( - AllOf(Field(&SynchronizationPackage::imports, UnorderedElementsAre(import1)), - Field(&SynchronizationPackage::types, - UnorderedElementsAre(AllOf( - IsStorageType("First.qml", - Storage::Synchronization::ImportedType{"Object"}, - TypeTraitsKind::Reference, - qmlDocumentSourceId1, - Storage::Synchronization::ChangeLevel::Full), - Field(&Storage::Synchronization::Type::exportedTypes, - UnorderedElementsAre( - IsExportedType(exampleModuleId, "FirstType", 1, 0), - IsExportedType(exampleModuleId, "FirstType2", 1, 0), - IsExportedType(pathModuleId, "First", -1, -1)))))), - Field(&SynchronizationPackage::updatedSourceIds, - UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId1)), - Field(&SynchronizationPackage::updatedFileStatusSourceIds, - UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId1)), - Field(&SynchronizationPackage::fileStatuses, - UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 1, 21), - IsFileStatus(qmlDocumentSourceId1, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), - Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument)))))); + EXPECT_CALL( + projectStorageMock, + synchronize(AllOf( + Field(&SynchronizationPackage::imports, UnorderedElementsAre(import1)), + Field(&SynchronizationPackage::types, + UnorderedElementsAre(AllOf( + IsStorageType("First.qml", + Storage::Synchronization::ImportedType{"Object"}, + TypeTraitsKind::Reference, + qmlDocumentSourceId1, + Storage::Synchronization::ChangeLevel::Full), + Field(&Storage::Synchronization::Type::exportedTypes, + UnorderedElementsAre(IsExportedType(exampleModuleId, "FirstType", 1, 0), + IsExportedType(exampleModuleId, "FirstType2", 1, 0), + IsExportedType(pathModuleId, "First", -1, -1)))))), + Field(&SynchronizationPackage::updatedSourceIds, + UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId1)), + Field(&SynchronizationPackage::updatedFileStatusSourceIds, + UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId1)), + Field(&SynchronizationPackage::fileStatuses, + UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 1, 21), + IsFileStatus(qmlDocumentSourceId1, 1, 21))), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), + Field(&SynchronizationPackage::directoryInfos, + UnorderedElementsAre(IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument)))))); updater.update({.directories = directories}); } @@ -1947,11 +1948,11 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_only_qml_files_changed) { setFilesDontChanged({qmldir1SourceId, qmldir2SourceId, path1SourceId, path2SourceId}); setFilesChanged({firstSourceId, secondSourceId, thirdSourceId}); - setDirectoryInfos(path1SourceId, - {{path1SourceId, firstSourceId, exampleModuleId, FileType::QmlDocument}, - {path1SourceId, secondSourceId, exampleModuleId, FileType::QmlDocument}}); - setDirectoryInfos(path2SourceId, - {{path2SourceId, thirdSourceId, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(path1SourceContextId, + {{path1SourceContextId, firstSourceId, exampleModuleId, FileType::QmlDocument}, + {path1SourceContextId, secondSourceId, exampleModuleId, FileType::QmlDocument}}); + setDirectoryInfos(path2SourceContextId, + {{path2SourceContextId, thirdSourceId, ModuleId{}, FileType::QmlDocument}}); EXPECT_CALL(patchWatcherMock, updateIdPaths(Contains(IdPaths{projectPartId, @@ -1970,11 +1971,11 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_qml_files_and_directories_dont firstSourceId, secondSourceId, thirdSourceId}); - setDirectoryInfos(path1SourceId, - {{path1SourceId, firstSourceId, exampleModuleId, FileType::QmlDocument}, - {path1SourceId, secondSourceId, exampleModuleId, FileType::QmlDocument}}); - setDirectoryInfos(path2SourceId, - {{path2SourceId, thirdSourceId, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(path1SourceContextId, + {{path1SourceContextId, firstSourceId, exampleModuleId, FileType::QmlDocument}, + {path1SourceContextId, secondSourceId, exampleModuleId, FileType::QmlDocument}}); + setDirectoryInfos(path2SourceContextId, + {{path2SourceContextId, thirdSourceId, ModuleId{}, FileType::QmlDocument}}); EXPECT_CALL(patchWatcherMock, updateIdPaths(Contains(IdPaths{projectPartId, @@ -2025,10 +2026,10 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_only_qmltypes_files_changed) { setFilesDontChanged({qmldir1SourceId, qmldir2SourceId, path1SourceId, path2SourceId}); setFilesChanged({qmltypes1SourceId, qmltypes2SourceId}); - setDirectoryInfos(path1SourceId, - {{path1SourceId, qmltypes1SourceId, exampleModuleId, FileType::QmlTypes}}); - setDirectoryInfos(path2SourceId, - {{path2SourceId, qmltypes2SourceId, exampleModuleId, FileType::QmlTypes}}); + setDirectoryInfos(path1SourceContextId, + {{path1SourceContextId, qmltypes1SourceId, exampleModuleId, FileType::QmlTypes}}); + setDirectoryInfos(path2SourceContextId, + {{path2SourceContextId, qmltypes2SourceId, exampleModuleId, FileType::QmlTypes}}); EXPECT_CALL(patchWatcherMock, updateIdPaths(Contains(IdPaths{projectPartId, @@ -2046,10 +2047,10 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_qmltypes_files_and_directories path2SourceId, qmltypes1SourceId, qmltypes2SourceId}); - setDirectoryInfos(path1SourceId, - {{path1SourceId, qmltypes1SourceId, exampleModuleId, FileType::QmlTypes}}); - setDirectoryInfos(path2SourceId, - {{path2SourceId, qmltypes2SourceId, exampleModuleId, FileType::QmlTypes}}); + setDirectoryInfos(path1SourceContextId, + {{path1SourceContextId, qmltypes1SourceId, exampleModuleId, FileType::QmlTypes}}); + setDirectoryInfos(path2SourceContextId, + {{path2SourceContextId, qmltypes2SourceId, exampleModuleId, FileType::QmlTypes}}); EXPECT_CALL(patchWatcherMock, updateIdPaths(Contains(IdPaths{projectPartId, @@ -2107,21 +2108,14 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir) IsFileStatus(qmlDocumentSourceId1, 1, 21), IsFileStatus(qmlDocumentSourceId2, 1, 21), IsFileStatus(qmlDocumentSourceId3, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId2, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId3, - ModuleId{}, - FileType::QmlDocument)))))); + UnorderedElementsAre( + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument)))))); updater.update({.directories = directories}); } @@ -2190,14 +2184,14 @@ TEST_F(ProjectStorageUpdater, UnorderedElementsAre(IsFileStatus(directoryPathSourceId, 1, 21), IsFileStatus(qmlDirPathSourceId, 1, 21), IsFileStatus(qmlDocumentSourceId2, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument)))))); @@ -2208,11 +2202,10 @@ TEST_F(ProjectStorageUpdater, TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_throws_if_directory_does_not_exists) { setFilesDontExists({qmlDirPathSourceId, directoryPathSourceId}); - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument}}); EXPECT_CALL(projectStorageMock, synchronize(AllOf(Field(&SynchronizationPackage::imports, IsEmpty()), @@ -2229,8 +2222,8 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_throws_if qmlDocumentSourceId2, qmlDocumentSourceId3)), Field(&SynchronizationPackage::fileStatuses, IsEmpty()), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, IsEmpty())))); updater.update({.directories = directories}); @@ -2242,9 +2235,9 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_add_qml_d setFilesChanged({directoryPathSourceId}); setFilesAdded({qmlDocumentSourceId3}); setFilesDontChanged({qmlDocumentSourceId1, qmlDocumentSourceId2}); - setDirectoryInfos(directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); EXPECT_CALL( projectStorageMock, @@ -2266,21 +2259,14 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_add_qml_d Field(&SynchronizationPackage::fileStatuses, UnorderedElementsAre(IsFileStatus(directoryPathSourceId, 1, 21), IsFileStatus(qmlDocumentSourceId3, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId2, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId3, - ModuleId{}, - FileType::QmlDocument)))))); + UnorderedElementsAre( + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument)))))); updater.update({.directories = directories}); } @@ -2292,11 +2278,10 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_removes_q setFilesRemoved({qmlDocumentSourceId3}); setFilesDontChanged({qmlDocumentSourceId1, qmlDocumentSourceId2}); setQmlFileNames(u"/path", {"First.qml", "First2.qml"}); - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument}}); EXPECT_CALL(projectStorageMock, synchronize( @@ -2310,14 +2295,14 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_removes_q qmlDocumentSourceId3)), Field(&SynchronizationPackage::fileStatuses, UnorderedElementsAre(IsFileStatus(directoryPathSourceId, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument)))))); @@ -2378,21 +2363,14 @@ TEST_F(ProjectStorageUpdater, watcher_updates_directories) IsFileStatus(qmlDocumentSourceId1, 1, 21), IsFileStatus(qmlDocumentSourceId2, 1, 21), IsFileStatus(qmlDocumentSourceId3, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId2, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId3, - ModuleId{}, - FileType::QmlDocument)))))); + UnorderedElementsAre( + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument)))))); updater.pathsWithIdsChanged({{directoryProjectChunkId, {directoryPathSourceId}}}); } @@ -2404,12 +2382,13 @@ TEST_F(ProjectStorageUpdater, watcher_updates_subdirectories) FirstType 2.2 First2.qml SecondType 2.2 Second.qml)"}; setContent(u"/path/qmldir", qmldir); - SourceId rootPathSourceId = sourcePathCache.sourceId("/root/."); + SourceContextId rootPathId = sourcePathCache.sourceContextId("/root"); + SourceId rootPathSourceId = SourceId::create(QmlDesigner::SourceNameId{}, rootPathId); SourceId rootQmldirPathSourceId = sourcePathCache.sourceId("/root/qmldir"); setFilesChanged({directoryPathSourceId, rootPathSourceId}); setFilesDontChanged({qmlDirPathSourceId, rootQmldirPathSourceId}); setSubdirectoryPaths(u"/root", {"/path"}); - setSubdirectorySourceIds(rootPathSourceId, {directoryPathSourceId}); + setSubdirectorySourceIds(rootPathId, {directoryPathId}); EXPECT_CALL( projectStorageMock, @@ -2445,22 +2424,11 @@ TEST_F(ProjectStorageUpdater, watcher_updates_subdirectories) Field(&SynchronizationPackage::updatedSourceIds, UnorderedElementsAre(qmlDocumentSourceId1, qmlDocumentSourceId2, qmlDocumentSourceId3)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId2, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId3, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(rootPathSourceId, - directoryPathSourceId, - ModuleId{}, - FileType::Directory)))))); + UnorderedElementsAre( + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(rootPathId, directoryPathSourceId, ModuleId{}, FileType::Directory)))))); updater.pathsWithIdsChanged({{directoryProjectChunkId, {rootPathSourceId, directoryPathSourceId}}}); } @@ -2472,11 +2440,10 @@ TEST_F(ProjectStorageUpdater, watcher_updates_removed_directory) qmlDocumentSourceId1, qmlDocumentSourceId2, qmlDocumentSourceId3}); - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument}}); EXPECT_CALL(projectStorageMock, synchronize(AllOf(Field(&SynchronizationPackage::imports, IsEmpty()), @@ -2493,8 +2460,8 @@ TEST_F(ProjectStorageUpdater, watcher_updates_removed_directory) qmlDocumentSourceId2, qmlDocumentSourceId3)), Field(&SynchronizationPackage::fileStatuses, UnorderedElementsAre()), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, IsEmpty())))); updater.pathsWithIdsChanged({{directoryProjectChunkId, {directoryPathSourceId}}}); @@ -2595,21 +2562,14 @@ TEST_F(ProjectStorageUpdater, watcher_updates_directories_and_qmldir) IsFileStatus(qmlDocumentSourceId1, 1, 21), IsFileStatus(qmlDocumentSourceId2, 1, 21), IsFileStatus(qmlDocumentSourceId3, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId2, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId3, - ModuleId{}, - FileType::QmlDocument)))))); + UnorderedElementsAre( + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument)))))); updater.pathsWithIdsChanged({{directoryProjectChunkId, {directoryPathSourceId}}, {qmldirProjectChunkId, {qmlDirPathSourceId}}}); @@ -2659,8 +2619,8 @@ TEST_F(ProjectStorageUpdater, watcher_updates_add_only_qml_document_in_directory setFilesChanged({directoryPathSourceId}); setFilesDontChanged({qmlDirPathSourceId, qmlDocumentSourceId1}); setFilesAdded({qmlDocumentSourceId2}); - setDirectoryInfos(directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}}); setQmlFileNames(u"/path", {"First.qml", "First2.qml"}); EXPECT_CALL(projectStorageMock, @@ -2692,14 +2652,14 @@ TEST_F(ProjectStorageUpdater, watcher_updates_add_only_qml_document_in_directory Field(&SynchronizationPackage::fileStatuses, UnorderedElementsAre(IsFileStatus(qmlDocumentSourceId2, 1, 21), IsFileStatus(directoryPathSourceId, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument)))))); @@ -2717,11 +2677,10 @@ TEST_F(ProjectStorageUpdater, watcher_updates_removes_qml_document) setFilesChanged({qmlDirPathSourceId}); setFilesDontChanged({qmlDocumentSourceId1, qmlDocumentSourceId2}); setFilesRemoved({qmlDocumentSourceId3}); - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument}}); setQmlFileNames(u"/path", {"First.qml", "First2.qml"}); EXPECT_CALL(projectStorageMock, @@ -2756,14 +2715,14 @@ TEST_F(ProjectStorageUpdater, watcher_updates_removes_qml_document) UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId3)), Field(&SynchronizationPackage::fileStatuses, UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument)))))); @@ -2779,9 +2738,9 @@ TEST_F(ProjectStorageUpdater, watcher_updates_removes_qml_document_in_qmldir_onl setContent(u"/path/qmldir", qmldir); setFilesChanged({qmlDirPathSourceId}); setFilesDontChanged({qmlDocumentSourceId1, qmlDocumentSourceId2}); - setDirectoryInfos(directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); setQmlFileNames(u"/path", {"First.qml", "First2.qml"}); EXPECT_CALL( @@ -2811,14 +2770,14 @@ TEST_F(ProjectStorageUpdater, watcher_updates_removes_qml_document_in_qmldir_onl UnorderedElementsAre(qmlDirPathSourceId)), Field(&SynchronizationPackage::fileStatuses, UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument)))))); @@ -2835,9 +2794,9 @@ TEST_F(ProjectStorageUpdater, watcher_updates_directories_add_qml_document_to_qm setContent(u"/path/qmldir", qmldir); setFilesChanged({qmlDirPathSourceId}); setFilesDontChanged({qmlDocumentSourceId1, qmlDocumentSourceId2}); - setDirectoryInfos(directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); setQmlFileNames(u"/path", {"First.qml", "First2.qml"}); EXPECT_CALL( @@ -2869,14 +2828,14 @@ TEST_F(ProjectStorageUpdater, watcher_updates_directories_add_qml_document_to_qm UnorderedElementsAre(qmlDirPathSourceId)), Field(&SynchronizationPackage::fileStatuses, UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument)))))); @@ -2892,9 +2851,9 @@ TEST_F(ProjectStorageUpdater, watcher_updates_directories_remove_qml_document_fr setContent(u"/path/qmldir", qmldir); setFilesDontChanged({qmlDocumentSourceId1, qmlDocumentSourceId2}); setFilesChanged({qmlDirPathSourceId}); - setDirectoryInfos(directoryPathSourceId, - {{directoryPathSourceId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument}}); setQmlFileNames(u"/path", {"First.qml", "First2.qml"}); EXPECT_CALL( @@ -2924,14 +2883,14 @@ TEST_F(ProjectStorageUpdater, watcher_updates_directories_remove_qml_document_fr UnorderedElementsAre(qmlDirPathSourceId)), Field(&SynchronizationPackage::fileStatuses, UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument)))))); @@ -2990,21 +2949,14 @@ TEST_F(ProjectStorageUpdater, watcher_updates_directories_dont_update_qml_docume IsFileStatus(qmlDocumentSourceId2, 1, 21))), Field(&SynchronizationPackage::updatedFileStatusSourceIds, UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId1, qmlDocumentSourceId2)), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId2, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId3, - ModuleId{}, - FileType::QmlDocument)))))); + UnorderedElementsAre( + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument)))))); updater.pathsWithIdsChanged({{directoryProjectChunkId, {directoryPathSourceId}}}); } @@ -3060,33 +3012,25 @@ TEST_F(ProjectStorageUpdater, watcher_updates_qmldirs_dont_update_qml_documents_ IsFileStatus(qmlDocumentSourceId2, 1, 21))), Field(&SynchronizationPackage::updatedFileStatusSourceIds, UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId1, qmlDocumentSourceId2)), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId2, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId3, - ModuleId{}, - FileType::QmlDocument)))))); + UnorderedElementsAre( + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument)))))); updater.pathsWithIdsChanged({{qmldirProjectChunkId, {qmlDirPathSourceId}}}); } TEST_F(ProjectStorageUpdater, watcher_updates_directory_but_not_qmldir) { - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmlDocumentSourceId1, exampleModuleId, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, exampleModuleId, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmlDocumentSourceId1, exampleModuleId, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, exampleModuleId, FileType::QmlDocument}}); setFilesDontChanged({qmlDirPathSourceId}); EXPECT_CALL( @@ -3207,10 +3151,9 @@ TEST_F(ProjectStorageUpdater, watcher_dont_updates_qml_documents_for_other_proje TEST_F(ProjectStorageUpdater, watcher_updates_qmltypes) { - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); setFilesDontChanged( {directoryPathSourceId, qmlDirPathSourceId, qmlDocumentSourceId1, qmlDocumentSourceId2}); @@ -3235,10 +3178,9 @@ TEST_F(ProjectStorageUpdater, watcher_updates_qmltypes) TEST_F(ProjectStorageUpdater, watcher_updates_removed_qmltypes_without_updated_qmldir) { - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); setFilesDontChanged( {directoryPathSourceId, qmlDirPathSourceId, qmlDocumentSourceId1, qmlDocumentSourceId2}); setFilesRemoved({qmltypesPathSourceId}); @@ -3251,10 +3193,9 @@ TEST_F(ProjectStorageUpdater, watcher_updates_removed_qmltypes_without_updated_q TEST_F(ProjectStorageUpdater, watcher_updates_removed_qmltypes_with_updated_qmldir) { - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); setFilesDontChanged( {directoryPathSourceId, qmlDirPathSourceId, qmlDocumentSourceId1, qmlDocumentSourceId2}); setFilesRemoved({qmltypesPathSourceId}); @@ -3282,7 +3223,7 @@ TEST_F(ProjectStorageUpdater, watcher_updates_removed_qmltypes_with_updated_qmld qmltypesPathSourceId, qmltypes2PathSourceId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, + UnorderedElementsAre(IsDirectoryInfo(directoryPathId, qmltypes2PathSourceId, exampleCppNativeModuleId, FileType::QmlTypes)))))); @@ -3292,10 +3233,9 @@ TEST_F(ProjectStorageUpdater, watcher_updates_removed_qmltypes_with_updated_qmld TEST_F(ProjectStorageUpdater, watcher_dont_watches_directories_after_qmltypes_changes) { - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); setFilesDontChanged( {directoryPathSourceId, qmlDirPathSourceId, qmlDocumentSourceId1, qmlDocumentSourceId2}); @@ -3307,10 +3247,9 @@ TEST_F(ProjectStorageUpdater, watcher_dont_watches_directories_after_qmltypes_ch TEST_F(ProjectStorageUpdater, watcher_dont_updates_qmltypes_for_other_projects) { - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); setFilesDontChanged( {directoryPathSourceId, qmlDirPathSourceId, qmlDocumentSourceId1, qmlDocumentSourceId2}); @@ -3373,21 +3312,14 @@ TEST_F(ProjectStorageUpdater, watcher_updates_directories_and_but_not_included_q IsFileStatus(qmlDocumentSourceId1, 1, 21), IsFileStatus(qmlDocumentSourceId2, 1, 21), IsFileStatus(qmlDocumentSourceId3, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId2, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId3, - ModuleId{}, - FileType::QmlDocument)))))); + UnorderedElementsAre( + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument)))))); updater.pathsWithIdsChanged({{directoryProjectChunkId, {directoryPathSourceId}}, {qmlDocumentProjectChunkId, @@ -3450,21 +3382,14 @@ TEST_F(ProjectStorageUpdater, watcher_updates_qmldir_and_but_not_included_qml_do IsFileStatus(qmlDocumentSourceId1, 1, 21), IsFileStatus(qmlDocumentSourceId2, 1, 21), IsFileStatus(qmlDocumentSourceId3, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId2, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId3, - ModuleId{}, - FileType::QmlDocument)))))); + UnorderedElementsAre( + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument)))))); updater.pathsWithIdsChanged({{qmldirProjectChunkId, {qmlDirPathSourceId}}, {qmlDocumentProjectChunkId, @@ -3473,12 +3398,11 @@ TEST_F(ProjectStorageUpdater, watcher_updates_qmldir_and_but_not_included_qml_do TEST_F(ProjectStorageUpdater, watcher_updates_qmldir_and_but_not_included_qmltypes) { - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmlDocumentSourceId1, exampleModuleId, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId2, exampleModuleId, FileType::QmlDocument}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmlDocumentSourceId1, exampleModuleId, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId2, exampleModuleId, FileType::QmlDocument}}); QString qmldir{R"(module Example FirstType 1.0 First.qml FirstType 2.2 First2.qml @@ -3549,29 +3473,22 @@ TEST_F(ProjectStorageUpdater, watcher_updates_qmldir_and_but_not_included_qmltyp IsFileStatus(qmlDocumentSourceId1, 1, 21), IsFileStatus(qmlDocumentSourceId2, 1, 21), IsFileStatus(qmlDocumentSourceId3, 1, 21))), - Field(&SynchronizationPackage::updatedDirectoryInfoSourceIds, - UnorderedElementsAre(directoryPathSourceId)), + Field(&SynchronizationPackage::updatedDirectoryInfoDirectoryIds, + UnorderedElementsAre(directoryPathId)), Field(&SynchronizationPackage::directoryInfos, - UnorderedElementsAre(IsDirectoryInfo(directoryPathSourceId, - qmltypesPathSourceId, - exampleCppNativeModuleId, - FileType::QmlTypes), - IsDirectoryInfo(directoryPathSourceId, - qmltypes2PathSourceId, - exampleCppNativeModuleId, - FileType::QmlTypes), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId1, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId2, - ModuleId{}, - FileType::QmlDocument), - IsDirectoryInfo(directoryPathSourceId, - qmlDocumentSourceId3, - ModuleId{}, - FileType::QmlDocument)))))); + UnorderedElementsAre( + IsDirectoryInfo(directoryPathId, + qmltypesPathSourceId, + exampleCppNativeModuleId, + FileType::QmlTypes), + IsDirectoryInfo(directoryPathId, + qmltypes2PathSourceId, + exampleCppNativeModuleId, + FileType::QmlTypes), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId1, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo(directoryPathId, qmlDocumentSourceId2, ModuleId{}, FileType::QmlDocument), + IsDirectoryInfo( + directoryPathId, qmlDocumentSourceId3, ModuleId{}, FileType::QmlDocument)))))); updater.pathsWithIdsChanged( {{qmldirProjectChunkId, {qmlDirPathSourceId}}, @@ -3599,10 +3516,9 @@ TEST_F(ProjectStorageUpdater, input_is_reused_next_call_if_an_error_happens) FirstType 2.2 First2.qml SecondType 2.2 Second.qml)"}; setContent(u"/path/qmldir", qmldir); - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); setFilesDontChanged({directoryPathSourceId, qmlDirPathSourceId}); ON_CALL(projectStorageMock, synchronize(_)) .WillByDefault(Throw(QmlDesigner::TypeHasInvalidSourceId{})); @@ -3659,10 +3575,9 @@ TEST_F(ProjectStorageUpdater, input_is_reused_next_call_if_an_error_happens_and_ FirstType 2.2 First2.qml SecondType 2.2 Second.qml)"}; setContent(u"/path/qmldir", qmldir); - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); setFilesDontChanged({directoryPathSourceId, qmlDirPathSourceId}); ON_CALL(projectStorageMock, synchronize(_)) .WillByDefault(Throw(QmlDesigner::TypeHasInvalidSourceId{})); @@ -3721,11 +3636,11 @@ TEST_F(ProjectStorageUpdater, input_is_reused_next_call_if_an_error_happens_and_ SecondType 2.2 Second.qml)"}; setContent(u"/path/qmldir", qmldir); setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmlDocumentSourceId1, QmlDesigner::ModuleId{}, FileType::QmlDocument}, - {directoryPathSourceId, qmlDocumentSourceId1, QmlDesigner::ModuleId{}, FileType::QmlDocument}}); + directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmlDocumentSourceId1, QmlDesigner::ModuleId{}, FileType::QmlDocument}, + {directoryPathId, qmlDocumentSourceId1, QmlDesigner::ModuleId{}, FileType::QmlDocument}}); setFilesDontChanged({directoryPathSourceId, qmlDirPathSourceId}); ON_CALL(projectStorageMock, synchronize(_)) .WillByDefault(Throw(QmlDesigner::TypeHasInvalidSourceId{})); @@ -3783,10 +3698,9 @@ TEST_F(ProjectStorageUpdater, input_is_cleared_after_successful_update) FirstType 2.2 First2.qml SecondType 2.2 Second.qml)"}; setContent(u"/path/qmldir", qmldir); - setDirectoryInfos( - directoryPathSourceId, - {{directoryPathSourceId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, - {directoryPathSourceId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); + setDirectoryInfos(directoryPathId, + {{directoryPathId, qmltypesPathSourceId, exampleModuleId, FileType::QmlTypes}, + {directoryPathId, qmltypes2PathSourceId, exampleModuleId, FileType::QmlTypes}}); setFilesDontChanged({directoryPathSourceId, qmlDirPathSourceId}); updater.pathsWithIdsChanged( {{qmltypesProjectChunkId, {qmltypesPathSourceId, qmltypes2PathSourceId}}}); @@ -3835,20 +3749,22 @@ TEST_F(ProjectStorageUpdater, update_property_editor_panes) }); auto sourceId = sourcePathCache.sourceId( QmlDesigner::SourcePath{propertyEditorQmlPath + "/QML/QtObjectPane.qml"}); - auto directoryId = sourcePathCache.sourceId( - QmlDesigner::SourcePath{propertyEditorQmlPath + "/QML/."}); - setFilesChanged({directoryId}); + auto directoryId = sourcePathCache.sourceContextId( + QmlDesigner::SourcePath{propertyEditorQmlPath + "/QML"}); + auto directorySourceId = SourceId::create(QmlDesigner::SourceNameId{}, directoryId); + setFilesChanged({directorySourceId}); auto qmlModuleId = storage.moduleId("QML", ModuleKind::QmlLibrary); EXPECT_CALL(projectStorageMock, synchronize( AllOf(Field(&SynchronizationPackage::fileStatuses, - UnorderedElementsAre(IsFileStatus(directoryId, 1, 21))), + UnorderedElementsAre(IsFileStatus(directorySourceId, 1, 21))), Field(&SynchronizationPackage::updatedFileStatusSourceIds, - UnorderedElementsAre(directoryId)), + UnorderedElementsAre(directorySourceId)), Field(&SynchronizationPackage::propertyEditorQmlPaths, - Contains(IsPropertyEditorQmlPath(qmlModuleId, "QtObject", sourceId))), - Field(&SynchronizationPackage::updatedPropertyEditorQmlPathSourceIds, + Contains(IsPropertyEditorQmlPath( + qmlModuleId, "QtObject", sourceId, directoryId))), + Field(&SynchronizationPackage::updatedPropertyEditorQmlPathSourceContextIds, ElementsAre(directoryId))))); updater.update({.propertyEditorResourcesPath = propertyEditorQmlPath}); @@ -3864,24 +3780,29 @@ TEST_F(ProjectStorageUpdater, update_property_editor_specifics) }); auto textSourceId = sourcePathCache.sourceId( QmlDesigner::SourcePath{propertyEditorQmlPath + "/QtQuick/TextSpecifics.qml"}); - auto qtQuickDirectoryId = sourcePathCache.sourceId( - QmlDesigner::SourcePath{propertyEditorQmlPath + "/QtQuick/."}); + auto qtQuickDirectoryId = sourcePathCache.sourceContextId( + QmlDesigner::SourcePath{propertyEditorQmlPath + "/QtQuick"}); + auto qtQuickDirectorySourceId = SourceId::create(QmlDesigner::SourceNameId{}, qtQuickDirectoryId); auto buttonSourceId = sourcePathCache.sourceId( QmlDesigner::SourcePath{propertyEditorQmlPath + "/QtQuick/Controls/ButtonSpecifics.qml"}); - auto controlsDirectoryId = sourcePathCache.sourceId( - QmlDesigner::SourcePath{propertyEditorQmlPath + "/QtQuick/Controls/."}); - setFilesChanged({qtQuickDirectoryId, controlsDirectoryId}); + auto controlsDirectoryId = sourcePathCache.sourceContextId( + QmlDesigner::SourcePath{propertyEditorQmlPath + "/QtQuick/Controls"}); + auto controlsDirectorySourceId = SourceId::create(QmlDesigner::SourceNameId{}, + controlsDirectoryId); + setFilesChanged({qtQuickDirectorySourceId, controlsDirectorySourceId}); auto qtQuickModuleId = storage.moduleId("QtQuick", ModuleKind::QmlLibrary); auto controlsModuleId = storage.moduleId("QtQuick.Controls", ModuleKind::QmlLibrary); - EXPECT_CALL(projectStorageMock, - synchronize(AllOf( - Field(&SynchronizationPackage::propertyEditorQmlPaths, - IsSupersetOf( - {IsPropertyEditorQmlPath(qtQuickModuleId, "Text", textSourceId), - IsPropertyEditorQmlPath(controlsModuleId, "Button", buttonSourceId)})), - Field(&SynchronizationPackage::updatedPropertyEditorQmlPathSourceIds, - ElementsAre(qtQuickDirectoryId, controlsDirectoryId))))); + EXPECT_CALL( + projectStorageMock, + synchronize( + AllOf(Field(&SynchronizationPackage::propertyEditorQmlPaths, + IsSupersetOf( + {IsPropertyEditorQmlPath(qtQuickModuleId, "Text", textSourceId, qtQuickDirectoryId), + IsPropertyEditorQmlPath( + controlsModuleId, "Button", buttonSourceId, controlsDirectoryId)})), + Field(&SynchronizationPackage::updatedPropertyEditorQmlPathSourceContextIds, + ElementsAre(qtQuickDirectoryId, controlsDirectoryId))))); updater.update({.propertyEditorResourcesPath = propertyEditorQmlPath}); } @@ -3916,7 +3837,7 @@ TEST_F(ProjectStorageUpdater, update_type_annotations) EXPECT_CALL(projectStorageMock, synchronize(AllOf(Field(&SynchronizationPackage::typeAnnotations, IsSupersetOf({IsTypeAnnotation(itemSourceId, - itemLibraryPathSourceId, + itemLibraryPathSourceContextId, "Item", qtQuickModuleId, StartsWith(itemLibraryPath), @@ -3924,7 +3845,7 @@ TEST_F(ProjectStorageUpdater, update_type_annotations) _, _), IsTypeAnnotation(buttonSourceId, - itemLibraryPathSourceId, + itemLibraryPathSourceContextId, "Button", qtQuickControlsModuleId, StartsWith(itemLibraryPath), @@ -3953,7 +3874,7 @@ TEST_F(ProjectStorageUpdater, update_changed_type_annotation) EXPECT_CALL(projectStorageMock, synchronize(AllOf(Field(&SynchronizationPackage::typeAnnotations, IsSupersetOf({IsTypeAnnotation(itemSourceId, - itemLibraryPathSourceId, + itemLibraryPathSourceContextId, "Item", qtQuickModuleId, StartsWith(itemLibraryPath), @@ -3961,7 +3882,7 @@ TEST_F(ProjectStorageUpdater, update_changed_type_annotation) _, _), IsTypeAnnotation(buttonSourceId, - itemLibraryPathSourceId, + itemLibraryPathSourceContextId, "Button", qtQuickControlsModuleId, StartsWith(itemLibraryPath), @@ -3986,9 +3907,9 @@ TEST_F(ProjectStorageUpdater, update_type_annotations_removed_meta_info_file) QmlDesigner::SourcePath{itemLibraryPath + "/quick.metainfo"}); auto buttonSourceId = sourcePathCache.sourceId( QmlDesigner::SourcePath{itemLibraryPath + "/qtquickcontrols2.metainfo"}); - ON_CALL(projectStorageMock, typeAnnotationDirectorySourceIds()) - .WillByDefault(Return(QmlDesigner::SmallSourceIds<64>{itemLibraryPathSourceId})); - ON_CALL(projectStorageMock, typeAnnotationSourceIds(itemLibraryPathSourceId)) + ON_CALL(projectStorageMock, typeAnnotationDirectoryIds()) + .WillByDefault(Return(QmlDesigner::SmallSourceContextIds<64>{itemLibraryPathSourceContextId})); + ON_CALL(projectStorageMock, typeAnnotationSourceIds(itemLibraryPathSourceContextId)) .WillByDefault(Return(QmlDesigner::SmallSourceIds<4>{itemSourceId, buttonSourceId})); setFilesChanged({itemLibraryPathSourceId}); setFilesDontChanged({itemSourceId, buttonSourceId}); @@ -4013,11 +3934,11 @@ TEST_F(ProjectStorageUpdater, update_type_annotations_removed_directory) QmlDesigner::SourcePath{itemLibraryPath + "/quick.metainfo"}); auto buttonSourceId = sourcePathCache.sourceId( QmlDesigner::SourcePath{itemLibraryPath + "/qtquickcontrols2.metainfo"}); - ON_CALL(projectStorageMock, typeAnnotationDirectorySourceIds()) - .WillByDefault(Return(QmlDesigner::SmallSourceIds<64>{ - itemLibraryPathSourceId, + ON_CALL(projectStorageMock, typeAnnotationDirectoryIds()) + .WillByDefault(Return(QmlDesigner::SmallSourceContextIds<64>{ + itemLibraryPathSourceContextId, })); - ON_CALL(projectStorageMock, typeAnnotationSourceIds(itemLibraryPathSourceId)) + ON_CALL(projectStorageMock, typeAnnotationSourceIds(itemLibraryPathSourceContextId)) .WillByDefault(Return(QmlDesigner::SmallSourceIds<4>{itemSourceId, buttonSourceId})); setFilesDontExists({itemLibraryPathSourceId, buttonSourceId, itemSourceId}); diff --git a/tests/unit/tests/unittests/projectstorage/qmltypesparser-test.cpp b/tests/unit/tests/unittests/projectstorage/qmltypesparser-test.cpp index cfd6b7b10b6..aab92287fe9 100644 --- a/tests/unit/tests/unittests/projectstorage/qmltypesparser-test.cpp +++ b/tests/unit/tests/unittests/projectstorage/qmltypesparser-test.cpp @@ -189,10 +189,10 @@ protected: Synchronization::Types types; SourceId qmltypesFileSourceId{sourcePathCache.sourceId("path/to/types.qmltypes")}; ModuleId qtQmlNativeModuleId = storage.moduleId("QtQml", ModuleKind::CppLibrary); - Synchronization::DirectoryInfo directoryInfo{qmltypesFileSourceId, - qmltypesFileSourceId, - qtQmlNativeModuleId, - Synchronization::FileType::QmlTypes}; + Synchronization::DirectoryInfo directoryInfo{qmltypesFileSourceId.contextId(), + qmltypesFileSourceId, + qtQmlNativeModuleId, + Synchronization::FileType::QmlTypes}; SourceContextId qmltypesFileSourceContextId{qmltypesFileSourceId.contextId()}; }; @@ -886,10 +886,10 @@ TEST_F(QmlTypesParser, default_property) TEST_F(QmlTypesParser, skip_template_item) { ModuleId moduleId = storage.moduleId("QtQuick.Templates", ModuleKind::CppLibrary); - Synchronization::DirectoryInfo directoryInfo{qmltypesFileSourceId, - qmltypesFileSourceId, - moduleId, - Synchronization::FileType::QmlTypes}; + Synchronization::DirectoryInfo directoryInfo{qmltypesFileSourceId.contextId(), + qmltypesFileSourceId, + moduleId, + Synchronization::FileType::QmlTypes}; QString source{R"(import QtQuick.tooling 1.2 Module{ Component { name: "QQuickItem"} diff --git a/tests/unit/tests/unittests/projectstorage/typeannotationreader-test.cpp b/tests/unit/tests/unittests/projectstorage/typeannotationreader-test.cpp index ead2a1fce56..d802289dabb 100644 --- a/tests/unit/tests/unittests/projectstorage/typeannotationreader-test.cpp +++ b/tests/unit/tests/unittests/projectstorage/typeannotationreader-test.cpp @@ -53,7 +53,7 @@ protected: QmlDesigner::ProjectStorage &storage = staticData->storage; QmlDesigner::Storage::TypeAnnotationReader reader{storage}; QmlDesigner::SourceId sourceId = QmlDesigner::SourceId::create(33); - QmlDesigner::SourceId directorySourceId = QmlDesigner::SourceId::create(77); + QmlDesigner::SourceContextId directoryId = QmlDesigner::SourceContextId::create(77); QmlDesigner::Storage::TypeTraits traits; }; @@ -71,11 +71,11 @@ TEST_F(TypeAnnotationReader, parse_type) } })xy"}; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, UnorderedElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -83,7 +83,7 @@ TEST_F(TypeAnnotationReader, parse_type) IsEmpty(), IsEmpty()), IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Item", moduleId("QtQuick"), "/path/images/item-icon16.png", @@ -108,11 +108,11 @@ TEST_F(TypeAnnotationReader, parse_true_canBeContainer) })xy"}; traits.canBeContainer = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -137,11 +137,11 @@ TEST_F(TypeAnnotationReader, parse_true_forceClip) })xy"}; traits.forceClip = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -166,11 +166,11 @@ TEST_F(TypeAnnotationReader, parse_true_doesLayoutChildren) })xy"}; traits.doesLayoutChildren = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -195,11 +195,11 @@ TEST_F(TypeAnnotationReader, parse_false_canBeDroppedInFormEditor) })xy"}; traits.canBeDroppedInFormEditor = FlagIs::False; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -224,11 +224,11 @@ TEST_F(TypeAnnotationReader, parse_false_canBeDroppedInNavigator) })xy"}; traits.canBeDroppedInNavigator = FlagIs::False; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -253,11 +253,11 @@ TEST_F(TypeAnnotationReader, parse_true_hideInNavigator) })xy"}; traits.hideInNavigator = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -282,11 +282,11 @@ TEST_F(TypeAnnotationReader, parse_true_canBeDroppedInView3D) })xy"}; traits.canBeDroppedInView3D = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -311,11 +311,11 @@ TEST_F(TypeAnnotationReader, parse_false_isMovable) })xy"}; traits.isMovable = FlagIs::False; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -340,11 +340,11 @@ TEST_F(TypeAnnotationReader, parse_false_isResizable) })xy"}; traits.isResizable = FlagIs::False; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -369,11 +369,11 @@ TEST_F(TypeAnnotationReader, parse_false_hasFormEditorItem) })xy"}; traits.hasFormEditorItem = FlagIs::False; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -398,11 +398,11 @@ TEST_F(TypeAnnotationReader, parse_true_isStackedContainer) })xy"}; traits.isStackedContainer = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -427,11 +427,11 @@ TEST_F(TypeAnnotationReader, parse_true_takesOverRenderingOfChildren) })xy"}; traits.takesOverRenderingOfChildren = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -456,11 +456,11 @@ TEST_F(TypeAnnotationReader, parse_true_visibleInNavigator) })xy"}; traits.visibleInNavigator = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -485,11 +485,11 @@ TEST_F(TypeAnnotationReader, parse_false_visibleInLibrary) })xy"}; traits.visibleInLibrary = FlagIs::False; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -513,11 +513,11 @@ TEST_F(TypeAnnotationReader, parse_false) } })xy"}; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -555,11 +555,11 @@ TEST_F(TypeAnnotationReader, parse_complex_expression) QmlDesigner::Storage::TypeTraits itemTraits = traits; itemTraits.canBeContainer = QmlDesigner::FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, UnorderedElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -568,7 +568,7 @@ TEST_F(TypeAnnotationReader, parse_complex_expression) "visibleNonDefaultProperties":"layer.effect"})xy"), IsEmpty()), IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Item", moduleId("QtQuick"), "/path/images/item-icon16.png", @@ -603,11 +603,11 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry) } })xy"}; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -659,11 +659,11 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry_with_properties) } })xy"}; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -709,11 +709,11 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry_template_path) } })xy"}; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), Utils::SmallStringView{}, @@ -724,7 +724,7 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry_template_path) "templatePath":"/path/templates/frame.qml"}] )xy")), IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Item", moduleId("QtQuick"), Utils::SmallStringView{}, @@ -761,11 +761,11 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry_extra_file_paths) } })xy"}; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directoryId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Frame", moduleId("QtQuick.Controls"), Utils::SmallStringView{}, @@ -776,7 +776,7 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry_extra_file_paths) "name":"Frame"}] )xy")), IsTypeAnnotation(sourceId, - directorySourceId, + directoryId, "Item", moduleId("QtQuick"), Utils::SmallStringView{},