aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2021-10-11 11:15:47 +0200
committerTim Jenssen <tim.jenssen@qt.io>2021-10-20 16:41:34 +0000
commitcb946ec3078312c3d29ec456805803e55c38717d (patch)
tree0dc8c2958510b88985971b56e80540d9dbeb47bf
parent3871e40f432c9a0d7cb072acba17273f113ccd59 (diff)
QmlDesigner: Support multiple module ids per type
The type will be use source id and name instead of module id and name as key. Task-number: QDS-5236 Task-number: QDS-5238 Change-Id: Ibc9c298dc0a6363b630173ec4981d574cecd02ff Reviewed-by: Tim Jenssen <tim.jenssen@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
-rw-r--r--src/libs/utils/set_algorithm.h18
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h830
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/projectstorageinterface.h5
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h131
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp23
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.cpp18
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.h8
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.cpp68
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.h8
-rw-r--r--tests/unit/unittest/gtest-creator-printing.cpp26
-rw-r--r--tests/unit/unittest/gtest-creator-printing.h4
-rw-r--r--tests/unit/unittest/projectstorage-test.cpp2630
-rw-r--r--tests/unit/unittest/projectstoragemock.h5
-rw-r--r--tests/unit/unittest/projectstorageupdater-test.cpp177
-rw-r--r--tests/unit/unittest/qmldocumentparser-test.cpp20
-rw-r--r--tests/unit/unittest/qmltypesparser-test.cpp64
16 files changed, 1832 insertions, 2203 deletions
diff --git a/src/libs/utils/set_algorithm.h b/src/libs/utils/set_algorithm.h
index 42a21f3f2d..97e33a047f 100644
--- a/src/libs/utils/set_algorithm.h
+++ b/src/libs/utils/set_algorithm.h
@@ -99,6 +99,24 @@ bool set_intersection_compare(
return false;
}
+template<class InputIt1, class InputIt2, class Callable, class Compare>
+void set_greedy_difference(
+ InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, Callable call, Compare comp)
+{
+ while (first1 != last1 && first2 != last2) {
+ if (comp(*first1, *first2)) {
+ call(*first1++);
+ } else if (comp(*first2, *first1)) {
+ ++first2;
+ } else {
+ ++first1;
+ }
+ }
+
+ while (first1 != last1)
+ call(*first1++);
+}
+
template<typename InputIt1, typename InputIt2, typename BinaryPredicate, typename Callable, typename Value>
Value mismatch_collect(InputIt1 first1,
InputIt1 last1,
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h
index 9bd49ef467..f6412d231b 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h
+++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h
@@ -28,6 +28,7 @@
#include "projectstorageexceptions.h"
#include "projectstorageinterface.h"
#include "sourcepathcachetypes.h"
+#include "storagecache.h"
#include <sqlitealgorithms.h>
#include <sqlitetable.h>
@@ -35,7 +36,9 @@
#include <utils/algorithm.h>
#include <utils/optional.h>
+#include <utils/set_algorithm.h>
+#include <algorithm>
#include <tuple>
namespace QmlDesigner {
@@ -53,18 +56,24 @@ public:
ProjectStorage(Database &database, bool isInitialized)
: database{database}
, initializer{database, isInitialized}
- {}
+ {
+ moduleCache.populate();
+ }
- void synchronize(Storage::Modules modules,
- Storage::Imports imports,
+ void synchronize(Storage::Imports imports,
Storage::Types types,
SourceIds sourceIds,
FileStatuses fileStatuses) override
{
Sqlite::ImmediateTransaction transaction{database};
- std::vector<AliasPropertyDeclaration> insertedAliasPropertyDeclarations;
- std::vector<AliasPropertyDeclaration> updatedAliasPropertyDeclarations;
+ AliasPropertyDeclarations insertedAliasPropertyDeclarations;
+ AliasPropertyDeclarations updatedAliasPropertyDeclarations;
+
+ AliasPropertyDeclarations relinkableAliasPropertyDeclarations;
+ PropertyDeclarations relinkablePropertyDeclarations;
+ Prototypes relinkablePrototypes;
+ TypeIds deletedTypeIds;
TypeIds updatedTypeIds;
updatedTypeIds.reserve(types.size());
@@ -78,40 +87,45 @@ public:
std::sort(sourceIdValues.begin(), sourceIdValues.end());
synchronizeFileStatuses(fileStatuses, sourceIdValues);
- synchronizeModules(modules, typeIdsToBeDeleted, sourceIdValues);
synchronizeImports(imports, sourceIdValues);
synchronizeTypes(types,
updatedTypeIds,
insertedAliasPropertyDeclarations,
- updatedAliasPropertyDeclarations);
-
- deleteNotUpdatedTypes(updatedTypeIds, sourceIdValues, typeIdsToBeDeleted);
+ updatedAliasPropertyDeclarations,
+ relinkableAliasPropertyDeclarations,
+ relinkablePropertyDeclarations,
+ relinkablePrototypes,
+ sourceIdValues);
+
+ deleteNotUpdatedTypes(updatedTypeIds,
+ sourceIdValues,
+ typeIdsToBeDeleted,
+ relinkableAliasPropertyDeclarations,
+ relinkablePropertyDeclarations,
+ relinkablePrototypes,
+ deletedTypeIds);
+
+ relink(relinkableAliasPropertyDeclarations,
+ relinkablePropertyDeclarations,
+ relinkablePrototypes,
+ deletedTypeIds);
linkAliases(insertedAliasPropertyDeclarations, updatedAliasPropertyDeclarations);
transaction.commit();
}
- ModuleId fetchModuleId(Utils::SmallStringView moduleName)
+ ModuleId moduleId(Utils::SmallStringView moduleName) override
{
- Sqlite::DeferredTransaction transaction{database};
-
- ModuleId moduleId = fetchModuleIdUnguarded(moduleName);
-
- transaction.commit();
-
- return moduleId;
+ return moduleCache.id(moduleName);
}
- ModuleIds fetchModuleIds(const Storage::Modules &modules)
+ Utils::SmallString moduleName(ModuleId moduleId)
{
- Sqlite::DeferredTransaction transaction{database};
-
- ModuleIds moduleIds = fetchModuleIdsUnguarded(modules);
-
- transaction.commit();
+ if (!moduleId)
+ throw ModuleDoesNotExists{};
- return moduleIds;
+ return moduleCache.value(moduleId);
}
PropertyDeclarationId fetchPropertyDeclarationByTypeIdAndName(TypeId typeId,
@@ -132,9 +146,9 @@ public:
static_cast<void *>(moduleIds.data()), static_cast<long long>(moduleIds.size()), name);
}
- TypeId fetchTypeIdByName(ModuleId moduleId, Utils::SmallStringView name)
+ TypeId fetchTypeIdByName(SourceId sourceId, Utils::SmallStringView name)
{
- return selectTypeIdByModuleIdAndNameStatement.template valueWithTransaction<TypeId>(&moduleId,
+ return selectTypeIdBySourceIdAndNameStatement.template valueWithTransaction<TypeId>(&sourceId,
name);
}
@@ -283,11 +297,6 @@ public:
return writeSourceId(sourceContextId, sourceName);
}
- auto fetchAllModules() const
- {
- return selectAllModulesStatement.template valuesWithTransaction<Storage::Module>(128);
- }
-
auto fetchAllFileStatuses() const
{
return selectAllFileStatusesStatement.template rangeWithTransaction<FileStatus>();
@@ -302,6 +311,73 @@ public:
SourceIds fetchSourceDependencieIds(SourceId sourceId) const override { return {}; }
private:
+ class ModuleStorageAdapter
+ {
+ public:
+ auto fetchId(const Utils::SmallStringView name) { return storage.fetchModuleId(name); }
+
+ auto fetchValue(ModuleId id) { return storage.fetchModuleName(id); }
+
+ auto fetchAll() { return storage.fetchAllModules(); }
+
+ ProjectStorage &storage;
+ };
+
+ class Module : public StorageCacheEntry<Utils::PathString, Utils::SmallStringView, ModuleId>
+ {
+ using Base = StorageCacheEntry<Utils::PathString, Utils::SmallStringView, ModuleId>;
+
+ public:
+ using Base::Base;
+
+ friend bool operator==(const Module &first, const Module &second)
+ {
+ return first.id == second.id && first.value == second.value;
+ }
+ };
+
+ friend ModuleStorageAdapter;
+
+ static bool moduleNameLess(Utils::SmallStringView first, Utils::SmallStringView second) noexcept
+ {
+ return Utils::reverseCompare(first, second) < 0;
+ }
+
+ using ModuleCache = StorageCache<Utils::PathString,
+ Utils::SmallStringView,
+ ModuleId,
+ ModuleStorageAdapter,
+ NonLockingMutex,
+ moduleNameLess,
+ Module>;
+
+ ModuleId fetchModuleId(Utils::SmallStringView moduleName)
+ {
+ Sqlite::DeferredTransaction transaction{database};
+
+ ModuleId moduleId = fetchModuleIdUnguarded(moduleName);
+
+ transaction.commit();
+
+ return moduleId;
+ }
+
+ auto fetchModuleName(ModuleId id)
+ {
+ Sqlite::DeferredTransaction transaction{database};
+
+ auto moduleName = fetchModuleNameUnguarded(id);
+
+ transaction.commit();
+
+ return moduleName;
+ }
+
+ auto fetchAllModules() const
+ {
+ return selectAllModulesStatement.template valuesWithTransaction<Module>(128);
+ }
+
class AliasPropertyDeclaration
{
public:
@@ -318,6 +394,13 @@ private:
, aliasPropertyDeclarationId{aliasPropertyDeclarationId}
{}
+ friend bool operator<(const AliasPropertyDeclaration &first,
+ const AliasPropertyDeclaration &second)
+ {
+ return std::tie(first.typeId, first.propertyDeclarationId)
+ < std::tie(second.typeId, second.propertyDeclarationId);
+ }
+
public:
TypeId typeId;
PropertyDeclarationId propertyDeclarationId;
@@ -326,6 +409,8 @@ private:
PropertyDeclarationId aliasPropertyDeclarationId;
};
+ using AliasPropertyDeclarations = std::vector<AliasPropertyDeclaration>;
+
class PropertyDeclaration
{
public:
@@ -345,12 +430,20 @@ private:
, importedTypeNameId{importedTypeNameId}
{}
+ friend bool operator<(const PropertyDeclaration &first, const PropertyDeclaration &second)
+ {
+ return std::tie(first.typeId, first.propertyDeclarationId)
+ < std::tie(second.typeId, second.propertyDeclarationId);
+ }
+
public:
TypeId typeId;
PropertyDeclarationId propertyDeclarationId;
ImportedTypeNameId importedTypeNameId;
};
+ using PropertyDeclarations = std::vector<PropertyDeclaration>;
+
class Prototype
{
public:
@@ -359,15 +452,58 @@ private:
, prototypeNameId{std::move(prototypeNameId)}
{}
+ friend bool operator<(Prototype first, Prototype second)
+ {
+ return first.typeId < second.typeId;
+ }
+
public:
TypeId typeId;
ImportedTypeNameId prototypeNameId;
};
+ using Prototypes = std::vector<Prototype>;
+
+ template<typename Type>
+ struct TypeCompare
+ {
+ bool operator()(const Type &type, TypeId typeId) { return type.typeId < typeId; };
+
+ bool operator()(TypeId typeId, const Type &type) { return typeId < type.typeId; };
+
+ bool operator()(const Type &first, const Type &second)
+ {
+ return first.typeId < second.typeId;
+ };
+ };
+
+ template<typename Property>
+ struct PropertyCompare
+ {
+ bool operator()(const Property &property, PropertyDeclarationId id)
+ {
+ return property.propertyDeclarationId < id;
+ };
+
+ bool operator()(PropertyDeclarationId id, const Property &property)
+ {
+ return id < property.propertyDeclarationId;
+ };
+
+ bool operator()(const Property &first, const Property &second)
+ {
+ return first.propertyDeclarationId < second.propertyDeclarationId;
+ };
+ };
+
void synchronizeTypes(Storage::Types &types,
TypeIds &updatedTypeIds,
- std::vector<AliasPropertyDeclaration> &insertedAliasPropertyDeclarations,
- std::vector<AliasPropertyDeclaration> &updatedAliasPropertyDeclarations)
+ AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
+ AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
+ AliasPropertyDeclarations &relinkableAliasPropertyDeclarations,
+ PropertyDeclarations &relinkablePropertyDeclarations,
+ Prototypes &relinkablePrototypes,
+ const std::vector<int> &sourceIdValues)
{
Storage::ExportedTypes exportedTypes;
exportedTypes.reserve(types.size() * 3);
@@ -381,16 +517,19 @@ private:
extractExportedTypes(typeId, type, exportedTypes);
}
- synchronizeExportedTypes(updatedTypeIds, exportedTypes);
-
- for (auto &&type : types)
- syncPrototypes(type);
-
- for (auto &&type : types)
- resetRemovedAliasPropertyDeclarationsToNull(type.typeId, type.propertyDeclarations);
+ synchronizeExportedTypes(sourceIdValues,
+ updatedTypeIds,
+ exportedTypes,
+ relinkableAliasPropertyDeclarations,
+ relinkablePropertyDeclarations,
+ relinkablePrototypes);
- for (auto &&type : types)
- syncDeclarations(type, insertedAliasPropertyDeclarations, updatedAliasPropertyDeclarations);
+ syncPrototypes(types, relinkablePrototypes);
+ resetRemovedAliasPropertyDeclarationsToNull(types, relinkableAliasPropertyDeclarations);
+ syncDeclarations(types,
+ insertedAliasPropertyDeclarations,
+ updatedAliasPropertyDeclarations,
+ relinkablePropertyDeclarations);
}
void synchronizeFileStatuses(FileStatuses &fileStatuses, const std::vector<int> &sourceIdValues)
@@ -428,43 +567,10 @@ private:
Sqlite::insertUpdateDelete(range, fileStatuses, compareKey, insert, update, remove);
}
- void synchronizeModules(Storage::Modules &modules,
- TypeIds &typeIdsToBeDeleted,
- const std::vector<int> &moduleIdValues)
- {
- auto compareKey = [](auto &&first, auto &&second) {
- return first.sourceId.id - second.sourceId.id;
- };
-
- std::sort(modules.begin(), modules.end(), [&](auto &&first, auto &&second) {
- return compareKey(first, second) < 0;
- });
-
- auto range = selectModulesForIdsStatement.template range<Storage::ModuleView>(
- Utils::span(moduleIdValues));
-
- auto insert = [&](Storage::Module &module) {
- insertModuleStatement.write(module.name, &module.sourceId);
- };
-
- auto update = [&](const Storage::ModuleView &moduleView, Storage::Module &module) {
- if (moduleView.name != module.name)
- updateModuleStatement.write(&moduleView.sourceId, module.name);
- };
-
- auto remove = [&](const Storage::ModuleView &moduleView) {
- deleteModuleStatement.write(&moduleView.sourceId);
- selectTypeIdsForModuleIdStatement.readTo(typeIdsToBeDeleted, &moduleView.sourceId);
- };
-
- Sqlite::insertUpdateDelete(range, modules, compareKey, insert, update, remove);
- }
-
void synchronizeImports(Storage::Imports &imports, std::vector<int> &sourceIdValues)
{
deleteDocumentImportsForDeletedDocuments(imports, sourceIdValues);
- addModuleIdToImports(imports);
synchronizeDocumentImports(imports, sourceIdValues);
}
@@ -487,50 +593,28 @@ private:
deleteDocumentImportsWithSourceIdsStatement.write(Utils::span{documentSourceIdsToBeDeleted});
}
- void synchronizeModulesAndUpdatesModuleIds(Storage::Modules &modules,
- TypeIds &typeIdsToBeDeleted,
- const std::vector<int> &moduleIds)
+ ModuleId fetchModuleIdUnguarded(Utils::SmallStringView name) const
{
- auto compareKey = [](auto &&first, auto &&second) {
- return first.sourceId.id - second.sourceId.id;
- };
+ auto moduleId = selectModuleIdByNameStatement.template value<ModuleId>(name);
- std::sort(modules.begin(), modules.end(), [&](auto &&first, auto &&second) {
- return compareKey(first, second) < 0;
- });
+ if (moduleId)
+ return moduleId;
- auto range = selectModulesForIdsStatement.template range<Storage::ModuleView>(
- Utils::span(moduleIds));
-
- auto insert = [&](Storage::Module &module) {
- insertModuleStatement.write(module.name, &module.sourceId);
- };
-
- auto update = [&](const Storage::ModuleView &moduleView, Storage::Module &module) {
- if (moduleView.name != module.name)
- updateModuleStatement.write(&moduleView.sourceId, module.name);
- };
-
- auto remove = [&](const Storage::ModuleView &moduleView) {
- deleteModuleStatement.write(&moduleView.sourceId);
- selectTypeIdsForModuleIdStatement.readTo(typeIdsToBeDeleted, &moduleView.sourceId);
- };
-
- Sqlite::insertUpdateDelete(range, modules, compareKey, insert, update, remove);
+ return insertModuleNameStatement.template value<ModuleId>(name);
}
- ModuleId fetchModuleIdUnguarded(const Storage::Module &module) const
+ auto fetchModuleNameUnguarded(ModuleId id) const
{
- return fetchModuleIdUnguarded(module.name);
- }
+ auto moduleName = selectModuleNameStatement.template value<Utils::PathString>(&id);
- ModuleId fetchModuleIdUnguarded(Utils::SmallStringView name) const
- {
- return selectModuleIdByNameStatement.template value<ModuleId>(name);
+ if (moduleName.empty())
+ throw ModuleDoesNotExists{};
+
+ return moduleName;
}
void handleAliasPropertyDeclarationsWithPropertyType(
- TypeId typeId, std::vector<AliasPropertyDeclaration> &relinkableAliasPropertyDeclarations)
+ TypeId typeId, AliasPropertyDeclarations &relinkableAliasPropertyDeclarations)
{
auto callback = [&](long long typeId,
long long propertyDeclarationId,
@@ -555,8 +639,7 @@ private:
}
void prepareLinkingOfAliasPropertiesDeclarationsWithAliasId(
- PropertyDeclarationId aliasId,
- std::vector<AliasPropertyDeclaration> &relinkableAliasPropertyDeclarations)
+ PropertyDeclarationId aliasId, AliasPropertyDeclarations &relinkableAliasPropertyDeclarations)
{
auto callback = [&](long long propertyDeclarationId,
long long propertyImportedTypeNameId,
@@ -578,14 +661,14 @@ private:
&aliasId);
}
- void handlePropertyDeclarationWithPropertyType(
- TypeId typeId, std::vector<PropertyDeclaration> &relinkablePropertyDeclarations)
+ void handlePropertyDeclarationWithPropertyType(TypeId typeId,
+ PropertyDeclarations &relinkablePropertyDeclarations)
{
updatesPropertyDeclarationPropertyTypeToNullStatement.readTo(relinkablePropertyDeclarations,
&typeId);
}
- void handlePrototypes(TypeId prototypeId, std::vector<Prototype> &relinkablePrototypes)
+ void handlePrototypes(TypeId prototypeId, Prototypes &relinkablePrototypes)
{
auto callback = [&](long long typeId, long long prototypeNameId) {
relinkablePrototypes.emplace_back(TypeId{typeId}, ImportedTypeNameId{prototypeNameId});
@@ -597,9 +680,9 @@ private:
}
void deleteType(TypeId typeId,
- std::vector<AliasPropertyDeclaration> &relinkableAliasPropertyDeclarations,
- std::vector<PropertyDeclaration> &relinkablePropertyDeclarations,
- std::vector<Prototype> &relinkablePrototypes)
+ AliasPropertyDeclarations &relinkableAliasPropertyDeclarations,
+ PropertyDeclarations &relinkablePropertyDeclarations,
+ Prototypes &relinkablePrototypes)
{
handlePropertyDeclarationWithPropertyType(typeId, relinkablePropertyDeclarations);
handleAliasPropertyDeclarationsWithPropertyType(typeId, relinkableAliasPropertyDeclarations);
@@ -612,72 +695,85 @@ private:
deleteTypeStatement.write(&typeId);
}
- void relinkAliasPropertyDeclarations(
- const std::vector<AliasPropertyDeclaration> &aliasPropertyDeclarations,
- const TypeIds &deletedTypeIds)
+ void relinkAliasPropertyDeclarations(AliasPropertyDeclarations &aliasPropertyDeclarations,
+ const TypeIds &deletedTypeIds)
{
- for (const AliasPropertyDeclaration &alias : aliasPropertyDeclarations) {
- if (std::binary_search(deletedTypeIds.begin(), deletedTypeIds.end(), alias.typeId))
- continue;
+ std::sort(aliasPropertyDeclarations.begin(), aliasPropertyDeclarations.end());
- auto typeId = fetchTypeId(alias.aliasImportedTypeNameId);
+ Utils::set_greedy_difference(
+ aliasPropertyDeclarations.cbegin(),
+ aliasPropertyDeclarations.cend(),
+ deletedTypeIds.begin(),
+ deletedTypeIds.end(),
+ [&](const AliasPropertyDeclaration &alias) {
+ auto typeId = fetchTypeId(alias.aliasImportedTypeNameId);
- if (!typeId)
- throw TypeNameDoesNotExists{};
+ if (!typeId)
+ throw TypeNameDoesNotExists{};
- auto [propertyTypeId, aliasId, propertyTraits] = fetchPropertyDeclarationByTypeIdAndNameUngarded(
- typeId, alias.aliasPropertyName);
+ auto [propertyTypeId, aliasId, propertyTraits] = fetchPropertyDeclarationByTypeIdAndNameUngarded(
+ typeId, alias.aliasPropertyName);
- updatePropertyDeclarationWithAliasAndTypeStatement.write(&alias.propertyDeclarationId,
- &propertyTypeId,
- propertyTraits,
- &alias.aliasImportedTypeNameId,
- &aliasId);
- }
+ updatePropertyDeclarationWithAliasAndTypeStatement.write(&alias.propertyDeclarationId,
+ &propertyTypeId,
+ propertyTraits,
+ &alias.aliasImportedTypeNameId,
+ &aliasId);
+ },
+ TypeCompare<AliasPropertyDeclaration>{});
}
- void relinkPropertyDeclarations(const std::vector<PropertyDeclaration> &relinkablePropertyDeclaration,
+ void relinkPropertyDeclarations(PropertyDeclarations &relinkablePropertyDeclaration,
const TypeIds &deletedTypeIds)
{
- for (const PropertyDeclaration &property : relinkablePropertyDeclaration) {
- if (std::binary_search(deletedTypeIds.begin(), deletedTypeIds.end(), property.typeId))
- continue;
+ std::sort(relinkablePropertyDeclaration.begin(), relinkablePropertyDeclaration.end());
- TypeId propertyTypeId = fetchTypeId(property.importedTypeNameId);
+ Utils::set_greedy_difference(
+ relinkablePropertyDeclaration.cbegin(),
+ relinkablePropertyDeclaration.cend(),
+ deletedTypeIds.begin(),
+ deletedTypeIds.end(),
+ [&](const PropertyDeclaration &property) {
+ TypeId propertyTypeId = fetchTypeId(property.importedTypeNameId);
- if (!propertyTypeId)
- throw TypeNameDoesNotExists{};
+ if (!propertyTypeId)
+ throw TypeNameDoesNotExists{};
- updatePropertyDeclarationTypeStatement.write(&property.propertyDeclarationId,
- &propertyTypeId);
- }
+ updatePropertyDeclarationTypeStatement.write(&property.propertyDeclarationId,
+ &propertyTypeId);
+ },
+ TypeCompare<PropertyDeclaration>{});
}
- void relinkPrototypes(std::vector<Prototype> relinkablePrototypes, const TypeIds &deletedTypeIds)
+ void relinkPrototypes(Prototypes &relinkablePrototypes, const TypeIds &deletedTypeIds)
{
- for (const Prototype &prototype : relinkablePrototypes) {
- if (std::binary_search(deletedTypeIds.begin(), deletedTypeIds.end(), prototype.typeId))
- continue;
+ std::sort(relinkablePrototypes.begin(), relinkablePrototypes.end());
- TypeId prototypeId = fetchTypeId(prototype.prototypeNameId);
+ Utils::set_greedy_difference(
+ relinkablePrototypes.cbegin(),
+ relinkablePrototypes.cend(),
+ deletedTypeIds.begin(),
+ deletedTypeIds.end(),
+ [&](const Prototype &prototype) {
+ TypeId prototypeId = fetchTypeId(prototype.prototypeNameId);
- if (!prototypeId)
- throw TypeNameDoesNotExists{};
+ if (!prototypeId)
+ throw TypeNameDoesNotExists{};
- updateTypePrototypeStatement.write(&prototype.typeId, &prototypeId);
- checkForPrototypeChainCycle(prototype.typeId);
- }
+ updateTypePrototypeStatement.write(&prototype.typeId, &prototypeId);
+ checkForPrototypeChainCycle(prototype.typeId);
+ },
+ TypeCompare<Prototype>{});
}
void deleteNotUpdatedTypes(const TypeIds &updatedTypeIds,
const std::vector<int> &sourceIdValues,
- const TypeIds &typeIdsToBeDeleted)
+ const TypeIds &typeIdsToBeDeleted,
+ AliasPropertyDeclarations &relinkableAliasPropertyDeclarations,
+ PropertyDeclarations &relinkablePropertyDeclarations,
+ Prototypes &relinkablePrototypes,
+ TypeIds &deletedTypeIds)
{
- std::vector<AliasPropertyDeclaration> relinkableAliasPropertyDeclarations;
- std::vector<PropertyDeclaration> relinkablePropertyDeclarations;
- std::vector<Prototype> relinkablePrototypes;
- TypeIds deletedTypeIds;
-
auto updatedTypeIdValues = Utils::transform<std::vector>(updatedTypeIds, [](TypeId typeId) {
return &typeId;
});
@@ -696,7 +792,13 @@ private:
Utils::span(updatedTypeIdValues));
for (TypeId typeIdToBeDeleted : typeIdsToBeDeleted)
callback(&typeIdToBeDeleted);
+ }
+ void relink(AliasPropertyDeclarations &relinkableAliasPropertyDeclarations,
+ PropertyDeclarations &relinkablePropertyDeclarations,
+ Prototypes &relinkablePrototypes,
+ TypeIds &deletedTypeIds)
+ {
std::sort(deletedTypeIds.begin(), deletedTypeIds.end());
relinkPrototypes(relinkablePrototypes, deletedTypeIds);
@@ -704,7 +806,7 @@ private:
relinkAliasPropertyDeclarations(relinkableAliasPropertyDeclarations, deletedTypeIds);
}
- void linkAliasPropertyDeclarationAliasIds(const std::vector<AliasPropertyDeclaration> &aliasDeclarations)
+ void linkAliasPropertyDeclarationAliasIds(const AliasPropertyDeclarations &aliasDeclarations)
{
for (const auto &aliasDeclaration : aliasDeclarations) {
auto aliasTypeId = fetchTypeId(aliasDeclaration.aliasImportedTypeNameId);
@@ -722,7 +824,7 @@ private:
}
}
- void updateAliasPropertyDeclarationValues(const std::vector<AliasPropertyDeclaration> &aliasDeclarations)
+ void updateAliasPropertyDeclarationValues(const AliasPropertyDeclarations &aliasDeclarations)
{
for (const auto &aliasDeclaration : aliasDeclarations) {
updatetPropertiesDeclarationValuesOfAliasStatement.write(
@@ -732,14 +834,14 @@ private:
}
}
- void checkAliasPropertyDeclarationCycles(const std::vector<AliasPropertyDeclaration> &aliasDeclarations)
+ void checkAliasPropertyDeclarationCycles(const AliasPropertyDeclarations &aliasDeclarations)
{
for (const auto &aliasDeclaration : aliasDeclarations)
checkForAliasChainCycle(aliasDeclaration.propertyDeclarationId);
}
- void linkAliases(const std::vector<AliasPropertyDeclaration> &insertedAliasPropertyDeclarations,
- const std::vector<AliasPropertyDeclaration> &updatedAliasPropertyDeclarations)
+ void linkAliases(const AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
+ const AliasPropertyDeclarations &updatedAliasPropertyDeclarations)
{
linkAliasPropertyDeclarationAliasIds(insertedAliasPropertyDeclarations);
linkAliasPropertyDeclarationAliasIds(updatedAliasPropertyDeclarations);
@@ -751,16 +853,25 @@ private:
updateAliasPropertyDeclarationValues(updatedAliasPropertyDeclarations);
}
- void synchronizeExportedTypes(const TypeIds &typeIds, Storage::ExportedTypes &exportedTypes)
+ void synchronizeExportedTypes(const std::vector<int> &sourceIdValues,
+ const TypeIds &updatedTypeIds,
+ Storage::ExportedTypes &exportedTypes,
+ AliasPropertyDeclarations &relinkableAliasPropertyDeclarations,
+ PropertyDeclarations &relinkablePropertyDeclarations,
+ Prototypes &relinkablePrototypes)
{
std::sort(exportedTypes.begin(), exportedTypes.end(), [](auto &&first, auto &&second) {
return std::tie(first.moduleId, first.name, first.version)
< std::tie(second.moduleId, second.name, second.version);
});
- auto range = selectExportedTypesForTypeIdStatement.template range<Storage::ExportedTypeView>(
- const_cast<void *>(static_cast<const void *>(typeIds.data())),
- static_cast<long long>(typeIds.size()));
+ Utils::span typeIdValues{static_cast<const TypeIds::value_type::DatabaseType *>(
+ &updatedTypeIds.data()->id),
+ updatedTypeIds.size()};
+
+ auto range = selectExportedTypesForSourceIdsStatement
+ .template range<Storage::ExportedTypeView>(Utils::span{sourceIdValues},
+ typeIdValues);
auto compareKey = [](const Storage::ExportedTypeView &view,
const Storage::ExportedType &type) -> long long {
@@ -780,53 +891,51 @@ private:
};
auto insert = [&](const Storage::ExportedType &type) {
+ if (!type.moduleId)
+ throw QmlDesigner::ModuleDoesNotExists{};
+
if (type.version) {
- upsertExportedTypeNamesWithVersionStatement.write(&type.moduleId,
+ insertExportedTypeNamesWithVersionStatement.write(&type.moduleId,
type.name,
- static_cast<long long>(
- Storage::TypeNameKind::Exported),
type.version.major.value,
type.version.minor.value,
&type.typeId);
} else if (type.version.major) {
- upsertExportedTypeNamesWithMajorVersionStatement
- .write(&type.moduleId,
- type.name,
- static_cast<long long>(Storage::TypeNameKind::Exported),
- type.version.major.value,
- &type.typeId);
+ insertExportedTypeNamesWithMajorVersionStatement.write(&type.moduleId,
+ type.name,
+ type.version.major.value,
+ &type.typeId);
} else {
- upsertExportedTypeNamesWithoutVersionStatement
- .write(&type.moduleId,
- type.name,
- static_cast<long long>(Storage::TypeNameKind::Exported),
- &type.typeId);
+ insertExportedTypeNamesWithoutVersionStatement.write(&type.moduleId,
+ type.name,
+ &type.typeId);
}
};
auto update = [&](const Storage::ExportedTypeView &view, const Storage::ExportedType &type) {
- if (view.typeId != type.typeId)
+ if (view.typeId != type.typeId) {
+ handlePropertyDeclarationWithPropertyType(view.typeId, relinkablePropertyDeclarations);
+ handleAliasPropertyDeclarationsWithPropertyType(view.typeId,
+ relinkableAliasPropertyDeclarations);
+ handlePrototypes(view.typeId, relinkablePrototypes);
updateExportedTypeNameTypeIdStatement.write(&view.exportedTypeNameId, &type.typeId);
+ }
};
auto remove = [&](const Storage::ExportedTypeView &view) {
+ handlePropertyDeclarationWithPropertyType(view.typeId, relinkablePropertyDeclarations);
+ handleAliasPropertyDeclarationsWithPropertyType(view.typeId,
+ relinkableAliasPropertyDeclarations);
+ handlePrototypes(view.typeId, relinkablePrototypes);
deleteExportedTypeNameStatement.write(&view.exportedTypeNameId);
};
Sqlite::insertUpdateDelete(range, exportedTypes, compareKey, insert, update, remove);
}
- void upsertNativeType(ModuleId moduleId, Utils::SmallStringView name, TypeId typeId)
- {
- upsertExportedTypeNameStatement.write(&moduleId,
- name,
- static_cast<long long>(Storage::TypeNameKind::Native),
- &typeId);
- }
-
void synchronizePropertyDeclarationsInsertAlias(
- std::vector<AliasPropertyDeclaration> &insertedAliasPropertyDeclarations,
+ AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
const Storage::PropertyDeclaration &value,
SourceId sourceId,
TypeId typeId)
@@ -872,7 +981,7 @@ private:
}
void synchronizePropertyDeclarationsUpdateAlias(
- std::vector<AliasPropertyDeclaration> &updatedAliasPropertyDeclarations,
+ AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
const Storage::PropertyDeclarationView &view,
const Storage::PropertyDeclaration &value,
SourceId sourceId)
@@ -887,7 +996,8 @@ private:
void synchronizePropertyDeclarationsUpdateProperty(const Storage::PropertyDeclarationView &view,
const Storage::PropertyDeclaration &value,
- SourceId sourceId)
+ SourceId sourceId,
+ PropertyDeclarationIds &propertyDeclarationIds)
{
auto propertyImportedTypeNameId = fetchImportedTypeNameId(value.typeName, sourceId);
@@ -906,14 +1016,15 @@ private:
&propertyImportedTypeNameId);
updatePropertyAliasDeclarationRecursivelyWithTypeAndTraitsStatement
.write(&view.id, &propertyTypeId, static_cast<int>(value.traits));
+ propertyDeclarationIds.push_back(view.id);
}
- void synchronizePropertyDeclarations(
- TypeId typeId,
- Storage::PropertyDeclarations &propertyDeclarations,
- SourceId sourceId,
- std::vector<AliasPropertyDeclaration> &insertedAliasPropertyDeclarations,
- std::vector<AliasPropertyDeclaration> &updatedAliasPropertyDeclarations)
+ void synchronizePropertyDeclarations(TypeId typeId,
+ Storage::PropertyDeclarations &propertyDeclarations,
+ SourceId sourceId,
+ AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
+ AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
+ PropertyDeclarationIds &propertyDeclarationIds)
{
std::sort(propertyDeclarations.begin(),
propertyDeclarations.end(),
@@ -947,8 +1058,12 @@ private:
view,
value,
sourceId);
+ propertyDeclarationIds.push_back(view.id);
} else {
- synchronizePropertyDeclarationsUpdateProperty(view, value, sourceId);
+ synchronizePropertyDeclarationsUpdateProperty(view,
+ value,
+ sourceId,
+ propertyDeclarationIds);
}
};
@@ -962,14 +1077,20 @@ private:
}
deletePropertyDeclarationStatement.write(&view.id);
+ propertyDeclarationIds.push_back(view.id);
};
Sqlite::insertUpdateDelete(range, propertyDeclarations, compareKey, insert, update, remove);
}
- void resetRemovedAliasPropertyDeclarationsToNull(TypeId typeId,
- Storage::PropertyDeclarations &aliasDeclarations)
+ void resetRemovedAliasPropertyDeclarationsToNull(Storage::Type &type,
+ PropertyDeclarationIds &propertyDeclarationIds)
{
+ if (type.changeLevel == Storage::ChangeLevel::Minimal)
+ return;
+
+ Storage::PropertyDeclarations &aliasDeclarations = type.propertyDeclarations;
+
class AliasPropertyDeclarationView
{
public:
@@ -992,7 +1113,7 @@ private:
});
auto range = selectPropertyDeclarationsWithAliasForTypeIdStatement
- .template range<AliasPropertyDeclarationView>(&typeId);
+ .template range<AliasPropertyDeclarationView>(&type.typeId);
auto compareKey = [](const AliasPropertyDeclarationView &view,
const Storage::PropertyDeclaration &value) {
@@ -1006,29 +1127,24 @@ private:
auto remove = [&](const AliasPropertyDeclarationView &view) {
updatePropertyDeclarationAliasIdToNullStatement.write(&view.id);
+ propertyDeclarationIds.push_back(view.id);
};
Sqlite::insertUpdateDelete(range, aliasDeclarations, compareKey, insert, update, remove);
}
- ModuleIds fetchModuleIdsUnguarded(const Storage::Modules &modules)
+ void resetRemovedAliasPropertyDeclarationsToNull(
+ Storage::Types &types, AliasPropertyDeclarations &relinkableAliasPropertyDeclarations)
{
- ModuleIds moduleIds;
- moduleIds.reserve(moduleIds.size());
+ PropertyDeclarationIds propertyDeclarationIds;
+ propertyDeclarationIds.reserve(types.size());
- for (auto &&module : modules)
- moduleIds.push_back(fetchModuleIdUnguarded(module));
+ for (auto &&type : types)
+ resetRemovedAliasPropertyDeclarationsToNull(type, propertyDeclarationIds);
- return moduleIds;
- }
-
- void addModuleIdToImports(Storage::Imports &imports)
- {
- for (Storage::Import &import : imports) {
- import.moduleId = fetchModuleIdUnguarded(import.name);
- if (!import.moduleId)
- throw ModuleDoesNotExists{};
- }
+ removeRelinkableEntries(relinkableAliasPropertyDeclarations,
+ propertyDeclarationIds,
+ PropertyCompare<AliasPropertyDeclaration>{});
}
void synchronizeDocumentImports(Storage::Imports &imports, const std::vector<int> &sourceIdValues)
@@ -1257,60 +1373,88 @@ private:
Storage::ExportedTypes &exportedTypes)
{
for (const auto &exportedType : type.exportedTypes)
- exportedTypes.emplace_back(exportedType.name, exportedType.version, typeId, type.moduleId);
+ exportedTypes.emplace_back(exportedType.name,
+ exportedType.version,
+ typeId,
+ exportedType.moduleId);
}
- struct ModuleAndTypeId
- {
- ModuleAndTypeId() = default;
- ModuleAndTypeId(int moduleId, long long typeId)
- : moduleId{moduleId}
- , typeId{typeId}
- {}
-
- ModuleId moduleId;
- TypeId typeId;
- };
-
TypeId declareType(Storage::Type &type)
{
- if (!type.moduleId && type.typeName.isEmpty()) {
- auto [moduleId, typeId] = selectModuleAndTypeIdBySourceIdStatement
- .template value<ModuleAndTypeId>(&type.sourceId);
- type.typeId = typeId;
- type.moduleId = moduleId;
+ if (type.typeName.isEmpty()) {
+ type.typeId = selectTypeIdBySourceIdStatement.template value<TypeId>(&type.sourceId);
+
return type.typeId;
}
- if (!type.moduleId)
- throw ModuleDoesNotExists{};
-
- type.typeId = upsertTypeStatement.template value<TypeId>(&type.moduleId,
+ type.typeId = upsertTypeStatement.template value<TypeId>(&type.sourceId,
type.typeName,
- static_cast<int>(type.accessSemantics),
- &type.sourceId);
+ static_cast<int>(
+ type.accessSemantics));
if (!type.typeId)
- type.typeId = selectTypeIdByModuleIdAndNameStatement.template value<TypeId>(&type.moduleId,
+ type.typeId = selectTypeIdBySourceIdAndNameStatement.template value<TypeId>(&type.sourceId,
type.typeName);
- upsertNativeType(type.moduleId, type.typeName, type.typeId);
return type.typeId;
}
void syncDeclarations(Storage::Type &type,
- std::vector<AliasPropertyDeclaration> &insertedAliasPropertyDeclarations,
- std::vector<AliasPropertyDeclaration> &updatedAliasPropertyDeclarations)
+ AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
+ AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
+ PropertyDeclarationIds &propertyDeclarationIds)
{
- auto typeId = type.typeId;
- synchronizePropertyDeclarations(typeId,
+ if (type.changeLevel == Storage::ChangeLevel::Minimal)
+ return;
+
+ synchronizePropertyDeclarations(type.typeId,
type.propertyDeclarations,
type.sourceId,
insertedAliasPropertyDeclarations,
- updatedAliasPropertyDeclarations);
- synchronizeFunctionDeclarations(typeId, type.functionDeclarations);
- synchronizeSignalDeclarations(typeId, type.signalDeclarations);
- synchronizeEnumerationDeclarations(typeId, type.enumerationDeclarations);
+ updatedAliasPropertyDeclarations,
+ propertyDeclarationIds);
+ synchronizeFunctionDeclarations(type.typeId, type.functionDeclarations);
+ synchronizeSignalDeclarations(type.typeId, type.signalDeclarations);
+ synchronizeEnumerationDeclarations(type.typeId, type.enumerationDeclarations);
+ }
+
+ template<typename Relinkable, typename Ids, typename Compare>
+ void removeRelinkableEntries(std::vector<Relinkable> &relinkables, Ids &ids, Compare compare)
+ {
+ std::vector<Relinkable> newRelinkables;
+ newRelinkables.reserve(relinkables.size());
+
+ std::sort(ids.begin(), ids.end());
+ std::sort(relinkables.begin(), relinkables.end(), compare);
+
+ Utils::set_greedy_difference(
+ relinkables.begin(),
+ relinkables.end(),
+ ids.cbegin(),
+ ids.cend(),
+ [&](Relinkable &entry) { newRelinkables.push_back(std::move(entry)); },
+ compare);
+
+ relinkables = std::move(newRelinkables);
+ }
+
+ void syncDeclarations(Storage::Types &types,
+ AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
+ AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
+ PropertyDeclarations &relinkablePropertyDeclarations)
+ {
+ PropertyDeclarationIds propertyDeclarationIds;
+ propertyDeclarationIds.reserve(types.size() * 10);
+
+ for (auto &&type : types)
+ syncDeclarations(type,
+ insertedAliasPropertyDeclarations,
+ updatedAliasPropertyDeclarations,
+ propertyDeclarationIds);
+
+ removeRelinkableEntries(relinkablePropertyDeclarations,
+ propertyDeclarationIds,
+ PropertyCompare<PropertyDeclaration>{});
}
void checkForPrototypeChainCycle(TypeId typeId) const
@@ -1338,7 +1482,7 @@ private:
&propertyDeclarationId);
}
- void syncPrototypes(Storage::Type &type)
+ void syncPrototype(Storage::Type &type, TypeIds &typeIds)
{
if (type.changeLevel == Storage::ChangeLevel::Minimal)
return;
@@ -1358,22 +1502,35 @@ private:
updatePrototypeStatement.write(&type.typeId, &prototypeId, &prototypeTypeNameId);
checkForPrototypeChainCycle(type.typeId);
}
+
+ typeIds.push_back(type.typeId);
+ }
+
+ void syncPrototypes(Storage::Types &types, Prototypes &relinkablePrototypes)
+ {
+ TypeIds typeIds;
+ typeIds.reserve(types.size());
+
+ for (auto &type : types)
+ syncPrototype(type, typeIds);
+
+ removeRelinkableEntries(relinkablePrototypes, typeIds, TypeCompare<Prototype>{});
}
ImportId fetchImportId(SourceId sourceId, const Storage::Import &import) const
{
if (import.version) {
- return selectImportIdBySourceIdAndImportNameAndVersionStatement.template value<ImportId>(
- &sourceId, import.name, import.version.major.value, import.version.minor.value);
+ return selectImportIdBySourceIdAndModuleIdAndVersionStatement.template value<ImportId>(
+ &sourceId, &import.moduleId, import.version.major.value, import.version.minor.value);
}
if (import.version.major) {
- return selectImportIdBySourceIdAndImportNameAndMajorVersionStatement
- .template value<ImportId>(&sourceId, import.name, import.version.major.value);
+ return selectImportIdBySourceIdAndModuleIdAndMajorVersionStatement
+ .template value<ImportId>(&sourceId, &import.moduleId, import.version.major.value);
}
- return selectImportIdBySourceIdAndImportNameStatement.template value<ImportId>(&sourceId,
- import.name);
+ return selectImportIdBySourceIdAndModuleIdStatement.template value<ImportId>(&sourceId,
+ &import.moduleId);
}
ImportedTypeNameId fetchImportedTypeNameId(const Storage::ImportedTypeName &name, SourceId sourceId)
@@ -1440,9 +1597,6 @@ private:
&typeNameId);
}
- if (kind == Storage::TypeNameKind::Native)
- return selectTypeIdForNativeTypeNameNamesStatement.template value<TypeId>(&typeNameId);
-
return selectTypeIdForImportedTypeNameNamesStatement.template value<TypeId>(&typeNameId);
}
@@ -1649,21 +1803,16 @@ private:
typesTable.setUseIfNotExists(true);
typesTable.setName("types");
typesTable.addColumn("typeId", Sqlite::ColumnType::Integer, {Sqlite::PrimaryKey{}});
- auto &moduleIdColumn = typesTable.addForeignKeyColumn("moduleId",
- foreignModuleIdColumn,
- Sqlite::ForeignKeyAction::NoAction,
- Sqlite::ForeignKeyAction::NoAction,
- Sqlite::Enforment::Deferred);
+ auto &sourceIdColumn = typesTable.addColumn("sourceId");
auto &typesNameColumn = typesTable.addColumn("name");
typesTable.addColumn("accessSemantics");
- typesTable.addColumn("sourceId");
typesTable.addForeignKeyColumn("prototypeId",
typesTable,
Sqlite::ForeignKeyAction::NoAction,
Sqlite::ForeignKeyAction::Restrict);
typesTable.addColumn("prototypeNameId");
- typesTable.addUniqueIndex({moduleIdColumn, typesNameColumn});
+ typesTable.addUniqueIndex({sourceIdColumn, typesNameColumn});
typesTable.initialize(database);
@@ -1709,20 +1858,18 @@ private:
Sqlite::ForeignKeyAction::NoAction,
Sqlite::Enforment::Deferred);
auto &nameColumn = table.addColumn("name");
- auto &kindColumn = table.addColumn("kind");
auto &typeIdColumn = table.addColumn("typeId");
auto &majorVersionColumn = table.addColumn("majorVersion");
auto &minorVersionColumn = table.addColumn("minorVersion");
- table.addUniqueIndex({moduleIdColumn, nameColumn, kindColumn},
+ table.addUniqueIndex({moduleIdColumn, nameColumn},
"majorVersion IS NULL AND minorVersion IS NULL");
- table.addUniqueIndex({moduleIdColumn, nameColumn, kindColumn, majorVersionColumn},
+ table.addUniqueIndex({moduleIdColumn, nameColumn, majorVersionColumn},
"majorVersion IS NOT NULL AND minorVersion IS NULL");
- table.addUniqueIndex(
- {moduleIdColumn, nameColumn, kindColumn, majorVersionColumn, minorVersionColumn},
- "majorVersion IS NOT NULL AND minorVersion IS NOT NULL");
+ table.addUniqueIndex({moduleIdColumn, nameColumn, majorVersionColumn, minorVersionColumn},
+ "majorVersion IS NOT NULL AND minorVersion IS NOT NULL");
- table.addIndex({typeIdColumn}, "kind=1");
+ table.addIndex({typeIdColumn});
table.initialize(database);
}
@@ -1823,6 +1970,7 @@ private:
Sqlite::Enforment::Deferred);
auto &majorVersionColumn = table.addColumn("majorVersion");
auto &minorVersionColumn = table.addColumn("minorVersion");
+ table.addColumn("kind");
table.addUniqueIndex({sourceIdColumn, moduleIdColumn},
"majorVersion IS NULL AND minorVersion IS NULL");
@@ -1856,18 +2004,18 @@ private:
public:
Database &database;
Initializer initializer;
+ ModuleCache moduleCache{ModuleStorageAdapter{*this}};
ReadWriteStatement<1> upsertTypeStatement{
- "INSERT INTO types(moduleId, name, accessSemantics, sourceId) VALUES(?1, ?2, "
- "?3, nullif(?4, -1)) ON CONFLICT DO UPDATE SET accessSemantics=excluded.accessSemantics, "
- "sourceId=excluded.sourceId WHERE accessSemantics IS NOT excluded.accessSemantics OR "
- "sourceId IS NOT excluded.sourceId RETURNING typeId",
+ "INSERT INTO types(sourceId, name, accessSemantics) VALUES(?1, ?2, ?3) ON CONFLICT DO "
+ "UPDATE SET accessSemantics=excluded.accessSemantics WHERE accessSemantics IS NOT "
+ "excluded.accessSemantics RETURNING typeId",
database};
WriteStatement updatePrototypeStatement{
"UPDATE types SET prototypeId=?2, prototypeNameId=?3 WHERE typeId=?1 AND (prototypeId IS "
"NOT ?2 OR prototypeNameId IS NOT ?3)",
database};
mutable ReadStatement<1> selectTypeIdByExportedNameStatement{
- "SELECT typeId FROM exportedTypeNames WHERE name=?1 AND kind=1", database};
+ "SELECT typeId FROM exportedTypeNames WHERE name=?1", database};
mutable ReadStatement<1> selectPrototypeIdStatement{
"WITH RECURSIVE "
" typeSelection(typeId) AS ("
@@ -1925,18 +2073,14 @@ public:
"INSERT INTO sources(sourceContextId, sourceName) VALUES (?,?)", database};
mutable ReadStatement<3> selectAllSourcesStatement{
"SELECT sourceName, sourceContextId, sourceId FROM sources", database};
- mutable ReadStatement<5> selectTypeByTypeIdStatement{
- "SELECT moduleId, name, (SELECT name FROM types WHERE typeId=outerTypes.prototypeId), "
- "accessSemantics, ifnull(sourceId, -1) FROM types AS outerTypes WHERE typeId=?",
+ mutable ReadStatement<4> selectTypeByTypeIdStatement{
+ "SELECT sourceId, name, prototypeId, accessSemantics FROM types WHERE typeId=?", database};
+ mutable ReadStatement<4> selectExportedTypesByTypeIdStatement{
+ "SELECT moduleId, name, ifnull(majorVersion, -1), ifnull(minorVersion, -1) FROM "
+ "exportedTypeNames WHERE typeId=?",
database};
- mutable ReadStatement<3> selectExportedTypesByTypeIdStatement{
- "SELECT name, ifnull(majorVersion, -1), ifnull(minorVersion, -1) FROM exportedTypeNames "
- "WHERE typeId=? AND kind=1",
- database};
- mutable ReadStatement<6> selectTypesStatement{
- "SELECT moduleId, name, typeId, (SELECT name FROM types WHERE "
- "typeId=t.prototypeId), accessSemantics, ifnull(sourceId, -1) FROM types AS "
- "t",
+ mutable ReadStatement<5> selectTypesStatement{
+ "SELECT sourceId, name, typeId, ifnull(prototypeId, -1), accessSemantics FROM types",
database};
ReadStatement<1> selectNotUpdatedTypesInSourcesStatement{
"SELECT typeId FROM types WHERE (sourceId IN carray(?1) AND typeId NOT IN carray(?2))",
@@ -1953,10 +2097,9 @@ public:
"DELETE FROM signalDeclarations WHERE typeId=?", database};
WriteStatement deleteTypeStatement{"DELETE FROM types WHERE typeId=?", database};
mutable ReadStatement<4> selectPropertyDeclarationsByTypeIdStatement{
- "SELECT name, (SELECT name FROM types WHERE typeId=pd.propertyTypeId), propertyTraits, "
- "(SELECT name FROM propertyDeclarations WHERE "
- "propertyDeclarationId=pd.aliasPropertyDeclarationId) FROM propertyDeclarations AS pd "
- "WHERE typeId=?",
+ "SELECT name, nullif(propertyTypeId, -1), propertyTraits, (SELECT name FROM "
+ "propertyDeclarations WHERE propertyDeclarationId=pd.aliasPropertyDeclarationId) FROM "
+ "propertyDeclarations AS pd WHERE typeId=?",
database};
ReadStatement<6> selectPropertyDeclarationsForTypeIdStatement{
"SELECT name, propertyTraits, propertyTypeId, propertyImportedTypeNameId, "
@@ -2081,25 +2224,18 @@ public:
database};
WriteStatement deleteEnumerationDeclarationStatement{
"DELETE FROM enumerationDeclarations WHERE enumerationDeclarationId=?", database};
- WriteStatement insertModuleStatement{"INSERT INTO modules(name, moduleId) VALUES(?1, ?2)",
- database};
- WriteStatement updateModuleStatement{"UPDATE modules SET name=?2 WHERE moduleId=?1", database};
- WriteStatement deleteModuleStatement{"DELETE FROM modules WHERE moduleId=?", database};
mutable ReadStatement<1> selectModuleIdByNameStatement{
"SELECT moduleId FROM modules WHERE name=? LIMIT 1", database};
- mutable ReadStatement<2> selectModulesForIdsStatement{
- "SELECT name, moduleId FROM modules WHERE moduleId IN carray(?1) ORDER BY "
- "moduleId",
- database};
- mutable ReadStatement<2> selectAllModulesStatement{
- "SELECT name, moduleId FROM modules ORDER BY moduleId", database};
- mutable ReadStatement<1> selectTypeIdsForModuleIdStatement{
- "SELECT typeId FROM types WHERE moduleId=?", database};
- mutable ReadStatement<1> selectTypeIdByModuleIdAndNameStatement{
- "SELECT typeId FROM types WHERE moduleId=?1 and name=?2", database};
+ mutable ReadWriteStatement<1> insertModuleNameStatement{
+ "INSERT INTO modules(name) VALUES(?1) RETURNING moduleId", database};
+ mutable ReadStatement<1> selectModuleNameStatement{
+ "SELECT name FROM modules WHERE moduleId =?1", database};
+ mutable ReadStatement<2> selectAllModulesStatement{"SELECT name, moduleId FROM modules", database};
+ mutable ReadStatement<1> selectTypeIdBySourceIdAndNameStatement{
+ "SELECT typeId FROM types WHERE sourceId=?1 and name=?2", database};
mutable ReadStatement<1> selectTypeIdByModuleIdsAndExportedNameStatement{
"SELECT typeId FROM exportedTypeNames WHERE moduleId IN carray(?1, ?2, 'int32') AND "
- "name=?3 AND kind=1",
+ "name=?3",
database};
mutable ReadStatement<5> selectDocumentImportForSourceIdStatement{
"SELECT importId, sourceId, moduleId, ifnull(majorVersion, -1), ifnull(minorVersion, -1) "
@@ -2241,8 +2377,8 @@ public:
WriteStatement deleteFileStatusStatement{"DELETE FROM fileStatuses WHERE sourceId=?1", database};
WriteStatement updateFileStatusStatement{
"UPDATE fileStatuses SET size=?2, lastModified=?3 WHERE sourceId=?1", database};
- ReadStatement<2> selectModuleAndTypeIdBySourceIdStatement{
- "SELECT moduleId, typeId FROM types WHERE sourceId=?", database};
+ ReadStatement<1> selectTypeIdBySourceIdStatement{"SELECT typeId FROM types WHERE sourceId=?",
+ database};
mutable ReadStatement<1> selectImportedTypeNameIdStatement{
"SELECT importedTypeNameId FROM importedTypeNames WHERE kind=?1 AND importOrSourceId=?2 "
"AND name=?3 LIMIT 1",
@@ -2251,24 +2387,24 @@ public:
"INSERT INTO importedTypeNames(kind, importOrSourceId, name) VALUES (?1, ?2, ?3) "
"RETURNING importedTypeNameId",
database};
- mutable ReadStatement<1> selectImportIdBySourceIdAndImportNameStatement{
- "SELECT importId FROM documentImports JOIN modules AS m USING(moduleId) WHERE sourceId=?1 "
- "AND m.name=?2 AND majorVersion IS NULL AND minorVersion IS NULL LIMIT 1",
+ mutable ReadStatement<1> selectImportIdBySourceIdAndModuleIdStatement{
+ "SELECT importId FROM documentImports WHERE sourceId=?1 AND moduleId=?2 AND majorVersion "
+ "IS NULL AND minorVersion IS NULL LIMIT 1",
database};
- mutable ReadStatement<1> selectImportIdBySourceIdAndImportNameAndMajorVersionStatement{
- "SELECT importId FROM documentImports JOIN modules AS m USING(moduleId) WHERE sourceId=?1 "
- "AND m.name=?2 AND majorVersion=?3 AND minorVersion IS NULL LIMIT 1",
+ mutable ReadStatement<1> selectImportIdBySourceIdAndModuleIdAndMajorVersionStatement{
+ "SELECT importId FROM documentImports WHERE sourceId=?1 AND moduleId=?2 AND "
+ "majorVersion=?3 AND minorVersion IS NULL LIMIT 1",
database};
- mutable ReadStatement<1> selectImportIdBySourceIdAndImportNameAndVersionStatement{
- "SELECT importId FROM documentImports JOIN modules AS m USING(moduleId) WHERE sourceId=?1 "
- "AND m.name=?2 AND majorVersion=?3 AND minorVersion=?4 LIMIT 1",
+ mutable ReadStatement<1> selectImportIdBySourceIdAndModuleIdAndVersionStatement{
+ "SELECT importId FROM documentImports WHERE sourceId=?1 AND moduleId=?2 AND "
+ "majorVersion=?3 AND minorVersion=?4 LIMIT 1",
database};
mutable ReadStatement<1> selectKindFromImportedTypeNamesStatement{
"SELECT kind FROM importedTypeNames WHERE importedTypeNameId=?1", database};
mutable ReadStatement<1> selectTypeIdForQualifiedImportedTypeNameNamesStatement{
"SELECT typeId FROM importedTypeNames AS itn JOIN documentImports AS di ON "
"importOrSourceId=importId JOIN exportedTypeNames AS etn USING(moduleId) WHERE "
- "itn.kind=2 AND importedTypeNameId=?1 AND itn.name=etn.name AND etn.kind=1 AND "
+ "itn.kind=2 AND importedTypeNameId=?1 AND itn.name=etn.name AND "
"(di.majorVersion IS NULL OR (di.majorVersion=etn.majorVersion AND (di.minorVersion IS "
"NULL OR di.minorVersion>=etn.minorVersion))) ORDER BY etn.majorVersion DESC NULLS FIRST, "
"etn.minorVersion DESC NULLS FIRST LIMIT 1",
@@ -2276,39 +2412,29 @@ public:
mutable ReadStatement<1> selectTypeIdForImportedTypeNameNamesStatement{
"SELECT typeId FROM importedTypeNames AS itn JOIN documentImports AS di ON "
"importOrSourceId=sourceId JOIN exportedTypeNames AS etn USING(moduleId) WHERE "
- "itn.kind=1 AND importedTypeNameId=?1 AND itn.name=etn.name AND etn.kind=1 AND "
+ "itn.kind=1 AND importedTypeNameId=?1 AND itn.name=etn.name AND "
"(di.majorVersion IS NULL OR (di.majorVersion=etn.majorVersion AND (di.minorVersion IS "
"NULL OR di.minorVersion>=etn.minorVersion))) ORDER BY etn.majorVersion DESC NULLS FIRST, "
"etn.minorVersion DESC NULLS FIRST LIMIT 1",
database};
- mutable ReadStatement<1> selectTypeIdForNativeTypeNameNamesStatement{
- "SELECT typeId FROM importedTypeNames AS itn JOIN documentImports AS di ON "
- "importOrSourceId=sourceId JOIN exportedTypeNames AS etn USING(moduleId) WHERE itn.kind=0 "
- "AND importedTypeNameId=?1 AND itn.name=etn.name AND etn.kind=0 LIMIT 1",
- database};
WriteStatement deleteAllSourcesStatement{"DELETE FROM sources", database};
WriteStatement deleteAllSourceContextsStatement{"DELETE FROM sourceContexts", database};
- mutable ReadStatement<6> selectExportedTypesForTypeIdStatement{
- "SELECT moduleId, name, ifnull(majorVersion, -1), ifnull(minorVersion, -1), typeId, "
- "exportedTypeNameId FROM exportedTypeNames WHERE typeId IN carray(?1, ?2, 'int64') AND "
- "kind=1 ORDER BY moduleId, name, majorVersion, minorVersion",
- database};
- WriteStatement upsertExportedTypeNamesWithVersionStatement{
- "INSERT INTO exportedTypeNames(moduleId, name, kind, majorVersion, minorVersion, typeId) "
- "VALUES(?1, ?2, ?3, ?4, ?5, ?6) ON CONFLICT DO UPDATE SET typeId=excluded.typeId",
- database};
- WriteStatement upsertExportedTypeNamesWithMajorVersionStatement{
- "INSERT INTO exportedTypeNames(moduleId, name, kind, majorVersion, typeId) "
- "VALUES(?1, ?2, ?3, ?4, ?5) ON CONFLICT DO UPDATE SET typeId=excluded.typeId",
- database};
- WriteStatement upsertExportedTypeNamesWithoutVersionStatement{
- "INSERT INTO exportedTypeNames(moduleId, name, kind, typeId) VALUES(?1, ?2, ?3, ?4) ON "
- "CONFLICT DO UPDATE SET typeId=excluded.typeId",
- database};
- WriteStatement upsertExportedTypeNameStatement{
- "INSERT INTO exportedTypeNames(moduleId, name, kind, typeId) VALUES(?1, ?2, ?3, ?4) ON "
- "CONFLICT DO UPDATE SET typeId=excluded.typeId WHERE typeId IS NOT excluded.typeId",
- database};
+ mutable ReadStatement<6> selectExportedTypesForSourceIdsStatement{
+ "SELECT moduleId, etn.name, ifnull(majorVersion, -1), ifnull(minorVersion, -1), typeId, "
+ "exportedTypeNameId FROM exportedTypeNames AS etn JOIN types USING(typeId) WHERE sourceId "
+ "IN carray(?1) OR typeId in carray(?2) ORDER BY moduleId, etn.name, majorVersion, "
+ "minorVersion",
+ database};
+ WriteStatement insertExportedTypeNamesWithVersionStatement{
+ "INSERT INTO exportedTypeNames(moduleId, name, majorVersion, minorVersion, typeId) "
+ "VALUES(?1, ?2, ?3, ?4, ?5)",
+ database};
+ WriteStatement insertExportedTypeNamesWithMajorVersionStatement{
+ "INSERT INTO exportedTypeNames(moduleId, name, majorVersion, typeId) "
+ "VALUES(?1, ?2, ?3, ?4)",
+ database};
+ WriteStatement insertExportedTypeNamesWithoutVersionStatement{
+ "INSERT INTO exportedTypeNames(moduleId, name, typeId) VALUES(?1, ?2, ?3)", database};
WriteStatement deleteExportedTypeNameStatement{
"DELETE FROM exportedTypeNames WHERE exportedTypeNameId=?", database};
WriteStatement updateExportedTypeNameTypeIdStatement{
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageinterface.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageinterface.h
index 302a1801a2..4eaa0527d2 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageinterface.h
+++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageinterface.h
@@ -33,13 +33,14 @@ namespace QmlDesigner {
class ProjectStorageInterface
{
public:
- virtual void synchronize(Storage::Modules modules,
- Storage::Imports imports,
+ virtual void synchronize(Storage::Imports imports,
Storage::Types types,
SourceIds sourceIds,
FileStatuses fileStatuses)
= 0;
+ virtual ModuleId moduleId(Utils::SmallStringView name) = 0;
+
virtual FileStatus fetchFileStatus(SourceId sourceId) const = 0;
virtual SourceIds fetchSourceDependencieIds(SourceId sourceId) const = 0;
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h
index 592f510c8d..ffbfe7364c 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h
+++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h
@@ -121,38 +121,6 @@ public:
VersionNumber minor;
};
-class Module
-{
-public:
- explicit Module() = default;
-
- explicit Module(Utils::SmallStringView name, SourceId sourceId = SourceId{})
- : name{name}
- , sourceId{sourceId}
- {}
-
- explicit Module(QStringView name, SourceId sourceId = SourceId{})
- : name{name}
- , sourceId{sourceId}
- {}
-
- explicit Module(Utils::SmallStringView name, int sourceId)
- : name{name}
- , sourceId{sourceId}
- {}
-
- friend bool operator==(const Module &first, const Module &second)
- {
- return first.name == second.name;
- }
-
-public:
- Utils::PathString name;
- SourceId sourceId;
-};
-
-using Modules = std::vector<Module>;
-
enum class IsQualified : int { No, Yes };
inline int operator-(IsQualified first, IsQualified second)
@@ -172,41 +140,29 @@ class Import
public:
explicit Import() = default;
- explicit Import(Utils::SmallStringView name,
- Version version,
- SourceId sourceId,
- ImportKind kind = ImportKind::Module)
- : name{name}
- , version{version}
- , sourceId{sourceId}
- , kind{kind}
- {}
-
- explicit Import(Version version, ModuleId moduleId, SourceId sourceId)
+ explicit Import(ModuleId moduleId, Version version, SourceId sourceId)
: version{version}
, moduleId{moduleId}
, sourceId{sourceId}
{}
- explicit Import(Utils::SmallStringView name, int majorVersion, int minorVersion, int sourceId)
- : name{name}
+ explicit Import(int moduleId, int majorVersion, int minorVersion, int sourceId)
+ : moduleId{moduleId}
, version{majorVersion, minorVersion}
, sourceId{sourceId}
{}
friend bool operator==(const Import &first, const Import &second)
{
- return first.name == second.name && first.version == second.version
- && first.sourceId == second.sourceId && first.moduleId.id == second.moduleId.id;
+ return first.moduleId == second.moduleId && first.version == second.version
+ && first.sourceId == second.sourceId;
}
public:
- Utils::SmallString name;
Version version;
ModuleId moduleId;
SourceId sourceId;
Utils::SmallString aliasName;
- ImportKind kind = ImportKind::Module;
};
using Imports = std::vector<Import>;
@@ -296,9 +252,10 @@ public:
, moduleId{moduleId}
{}
- explicit ExportedType(Utils::SmallStringView name, int majorVersion, int minorVersion)
+ explicit ExportedType(int moduleId, Utils::SmallStringView name, int majorVersion, int minorVersion)
: name{name}
, version{majorVersion, minorVersion}
+ , moduleId{moduleId}
{}
friend bool operator==(const ExportedType &first, const ExportedType &second)
@@ -577,6 +534,15 @@ public:
{}
explicit PropertyDeclaration(Utils::SmallStringView name,
+ TypeId propertyTypeId,
+ PropertyDeclarationTraits traits)
+ : name{name}
+ , traits{traits}
+ , propertyTypeId{propertyTypeId}
+ , kind{PropertyKind::Property}
+ {}
+
+ explicit PropertyDeclaration(Utils::SmallStringView name,
ImportedTypeName typeName,
PropertyDeclarationTraits traits,
Utils::SmallStringView aliasPropertyName)
@@ -588,13 +554,24 @@ public:
{}
explicit PropertyDeclaration(Utils::SmallStringView name,
- Utils::SmallStringView typeName,
+ TypeId propetyTypeId,
+ PropertyDeclarationTraits traits,
+ Utils::SmallStringView aliasPropertyName)
+ : name{name}
+ , aliasPropertyName{aliasPropertyName}
+ , traits{traits}
+ , propertyTypeId{propertyTypeId}
+ , kind{PropertyKind::Property}
+ {}
+
+ explicit PropertyDeclaration(Utils::SmallStringView name,
+ long long propertyTypeId,
int traits,
Utils::SmallStringView aliasPropertyName)
: name{name}
- , typeName{NativeType{typeName}}
, aliasPropertyName{aliasPropertyName}
, traits{static_cast<PropertyDeclarationTraits>(traits)}
+ , propertyTypeId{propertyTypeId}
, kind{PropertyKind::Property}
{}
@@ -619,6 +596,7 @@ public:
ImportedTypeName typeName;
Utils::SmallString aliasPropertyName;
PropertyDeclarationTraits traits = {};
+ TypeId propertyTypeId;
TypeId typeId;
PropertyKind kind = PropertyKind::Property;
};
@@ -657,8 +635,7 @@ class Type
{
public:
explicit Type() = default;
- explicit Type(ModuleId moduleId,
- Utils::SmallStringView typeName,
+ explicit Type(Utils::SmallStringView typeName,
ImportedTypeName prototype,
TypeAccessSemantics accessSemantics,
SourceId sourceId,
@@ -677,12 +654,20 @@ public:
, enumerationDeclarations{std::move(enumerationDeclarations)}
, accessSemantics{accessSemantics}
, sourceId{sourceId}
- , moduleId{moduleId}
, changeLevel{changeLevel}
{}
- explicit Type(ModuleId moduleId,
- Utils::SmallStringView typeName,
+ explicit Type(Utils::SmallStringView typeName,
+ TypeId prototypeId,
+ TypeAccessSemantics accessSemantics,
+ SourceId sourceId)
+ : typeName{typeName}
+ , accessSemantics{accessSemantics}
+ , sourceId{sourceId}
+ , prototypeId{prototypeId}
+ {}
+
+ explicit Type(Utils::SmallStringView typeName,
Utils::SmallStringView prototype,
int accessSemantics,
int sourceId)
@@ -690,22 +675,19 @@ public:
, prototype{NativeType{prototype}}
, accessSemantics{static_cast<TypeAccessSemantics>(accessSemantics)}
, sourceId{sourceId}
- , moduleId{moduleId}
{}
- explicit Type(int moduleId,
+ explicit Type(int sourceId,
Utils::SmallStringView typeName,
long long typeId,
- Utils::SmallStringView prototype,
- int accessSemantics,
- int sourceId)
+ long long prototypeId,
+ int accessSemantics)
: typeName{typeName}
- , prototype{NativeType{prototype}}
, accessSemantics{static_cast<TypeAccessSemantics>(accessSemantics)}
, sourceId{sourceId}
, typeId{typeId}
- , moduleId{moduleId}
+ , prototypeId{prototypeId}
{}
friend bool operator==(const Type &first, const Type &second) noexcept
@@ -715,7 +697,6 @@ public:
&& first.propertyDeclarations == second.propertyDeclarations
&& first.functionDeclarations == second.functionDeclarations
&& first.signalDeclarations == second.signalDeclarations
- && first.moduleId == second.moduleId && first.sourceId == second.sourceId
&& first.sourceId == second.sourceId;
}
@@ -730,28 +711,10 @@ public:
TypeAccessSemantics accessSemantics = TypeAccessSemantics::None;
SourceId sourceId;
TypeId typeId;
- ModuleId moduleId;
+ TypeId prototypeId;
ChangeLevel changeLevel = ChangeLevel::Full;
};
using Types = std::vector<Type>;
-class ModuleView
-{
-public:
- explicit ModuleView(Utils::SmallStringView name, int sourceId)
- : name{name}
- , sourceId{sourceId}
- {}
-
- friend bool operator==(const ModuleView &first, const ModuleView &second)
- {
- return first.name == second.name && first.sourceId == second.sourceId;
- }
-
-public:
- Utils::SmallStringView name;
- SourceId sourceId;
-};
-
} // namespace QmlDesigner::Storage
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp
index a16859ae23..5a23b69944 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp
+++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp
@@ -52,7 +52,6 @@ ComponentReferences createComponentReferences(const QMultiHash<QString, QmlDirPa
void ProjectUpdater::update()
{
- Storage::Modules modules;
Storage::Imports imports;
Storage::Types types;
SourceIds sourceIds;
@@ -67,22 +66,17 @@ void ProjectUpdater::update()
QmlDirParser parser;
parser.parse(m_fileSystem.contentAsQString(qmldirPath));
- modules.emplace_back(parser.typeNamespace(), qmlDirSourceId);
-
sourceIds.push_back(qmlDirSourceId);
SourceContextId directoryId = m_pathCache.sourceContextId(qmlDirSourceId);
- parseTypeInfos(parser.typeInfos(),
- directoryId,
- ModuleId{&qmlDirSourceId},
- imports,
- types,
- sourceIds,
- fileStatuses);
+ ModuleId moduleId = m_projectStorage.moduleId(Utils::PathString{parser.typeNamespace()});
+
+ parseTypeInfos(
+ parser.typeInfos(), directoryId, moduleId, imports, types, sourceIds, fileStatuses);
parseQmlComponents(createComponentReferences(parser.components()),
directoryId,
- ModuleId{&qmlDirSourceId},
+ moduleId,
imports,
types,
sourceIds,
@@ -106,8 +100,7 @@ void ProjectUpdater::update()
}
}
- m_projectStorage.synchronize(std::move(modules),
- std::move(imports),
+ m_projectStorage.synchronize(std::move(imports),
std::move(types),
std::move(sourceIds),
std::move(fileStatuses));
@@ -197,11 +190,11 @@ void ProjectUpdater::parseQmlComponents(ComponentReferences components,
auto type = m_qmlDocumentParser.parse(content, imports);
type.typeName = fileName;
- type.moduleId = moduleId;
type.accessSemantics = Storage::TypeAccessSemantics::Reference;
type.sourceId = sourceId;
type.exportedTypes.push_back(
- Storage::ExportedType{Utils::SmallString{component.typeName},
+ Storage::ExportedType{moduleId,
+ Utils::SmallString{component.typeName},
Storage::Version{component.majorVersion, component.minorVersion}});
types.push_back(std::move(type));
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.cpp b/src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.cpp
index be0474e77f..c4a2bae617 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.cpp
+++ b/src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.cpp
@@ -69,19 +69,19 @@ void addImports(Storage::Imports &imports,
const QList<QmlDom::Import> &qmlImports,
SourceId sourceId,
SourceContextId sourceContextId,
- QmlDocumentParser::PathCache &pathCache)
+ QmlDocumentParser::PathCache &pathCache,
+ QmlDocumentParser::ProjectStorage &storage)
{
for (const QmlDom::Import &qmlImport : qmlImports) {
if (qmlImport.uri == u"file://.") {
- SourceId directorySourceId = pathCache.sourceId(sourceContextId, ".");
- imports.emplace_back(Storage::Version{}, ModuleId{&directorySourceId}, sourceId);
+ auto moduleId = storage.moduleId(pathCache.sourceContextPath(sourceContextId));
+ imports.emplace_back(moduleId, Storage::Version{}, sourceId);
} else if (qmlImport.uri.startsWith(u"file://")) {
- SourceId uriSourceId = pathCache.sourceId(sourceContextId, convertUri(qmlImport.uri));
- imports.emplace_back(Storage::Version{}, ModuleId{&uriSourceId}, sourceId);
+ auto moduleId = storage.moduleId(convertUri(qmlImport.uri));
+ imports.emplace_back(moduleId, Storage::Version{}, sourceId);
} else {
- imports.emplace_back(Utils::SmallString{qmlImport.uri},
- convertVersion(qmlImport.version),
- sourceId);
+ auto moduleId = storage.moduleId(Utils::SmallString{qmlImport.uri});
+ imports.emplace_back(moduleId, convertVersion(qmlImport.version), sourceId);
}
}
}
@@ -185,7 +185,7 @@ Storage::Type QmlDocumentParser::parse(const QString &sourceContent,
type.prototype = Storage::ImportedType{Utils::SmallString{qmlObject.name()}};
- addImports(imports, qmlFile->imports(), sourceId, sourceContextId, m_pathCache);
+ addImports(imports, qmlFile->imports(), sourceId, sourceContextId, m_pathCache, m_storage);
addPropertyDeclarations(type, qmlObject);
addFunctionAndSignalDeclarations(type, qmlObject);
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.h b/src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.h
index cc272dd422..e2dd243405 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.h
+++ b/src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.h
@@ -43,11 +43,12 @@ class SourcePathCache;
class QmlDocumentParser
{
public:
- using PathCache = QmlDesigner::SourcePathCache<QmlDesigner::ProjectStorage<Sqlite::Database>,
- NonLockingMutex>;
+ using ProjectStorage = QmlDesigner::ProjectStorage<Sqlite::Database>;
+ using PathCache = QmlDesigner::SourcePathCache<ProjectStorage, NonLockingMutex>;
- QmlDocumentParser(PathCache &pathCache)
+ QmlDocumentParser(PathCache &pathCache, ProjectStorage &storage)
: m_pathCache{pathCache}
+ , m_storage{storage}
{}
virtual Storage::Type parse(const QString &sourceContent,
@@ -57,5 +58,6 @@ public:
private:
PathCache &m_pathCache;
+ ProjectStorage &m_storage;
};
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.cpp b/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.cpp
index ed9352cd47..e394265321 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.cpp
+++ b/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.cpp
@@ -45,15 +45,20 @@ namespace QmlDom = QQmlJS::Dom;
namespace {
void addType(const QQmlJSScope::Ptr &object, Storage::Types &types) {}
-Storage::Import createImport(const QString &dependency, SourceId sourceId)
+void appendImports(Storage::Imports &imports,
+ const QString &dependency,
+ SourceId sourceId,
+ QmlTypesParser::ProjectStorage &storage)
{
- Storage::Import import;
- import.kind = Storage::ImportKind::QmlTypesDependency;
- import.sourceId = sourceId;
auto spaceFound = std::find_if(dependency.begin(), dependency.end(), [](QChar c) {
return c.isSpace();
});
- import.name = Utils::SmallString{QStringView(dependency.begin(), spaceFound)};
+
+ Utils::PathString moduleName{QStringView(dependency.begin(), spaceFound)};
+ ModuleId moduleId = storage.moduleId(moduleName);
+
+ moduleName.append("-cppnative");
+ ModuleId cppModuleId = storage.moduleId(moduleName);
auto majorVersionFound = std::find_if(spaceFound, dependency.end(), [](QChar c) {
return c.isDigit();
@@ -61,33 +66,39 @@ Storage::Import createImport(const QString &dependency, SourceId sourceId)
auto majorVersionEnd = std::find_if(majorVersionFound, dependency.end(), [](QChar c) {
return !c.isDigit();
});
- QStringView majorVersionString(majorVersionFound, majorVersionEnd);
- if (majorVersionString.isEmpty())
- return import;
- import.version.major.value = majorVersionString.toInt();
- auto minorVersionFound = std::find_if(majorVersionEnd, dependency.end(), [](QChar c) {
- return c.isDigit();
- });
- auto minorVersionEnd = std::find_if(minorVersionFound, dependency.end(), [](QChar c) {
- return !c.isDigit();
- });
- QStringView minorVersionString(minorVersionFound, minorVersionEnd);
- if (minorVersionString.isEmpty())
- return import;
- import.version.minor.value = QStringView(minorVersionFound, minorVersionEnd).toInt();
+ Storage::Version version;
- return import;
+ QStringView majorVersionString(majorVersionFound, majorVersionEnd);
+ if (!majorVersionString.isEmpty()) {
+ version.major.value = majorVersionString.toInt();
+
+ auto minorVersionFound = std::find_if(majorVersionEnd, dependency.end(), [](QChar c) {
+ return c.isDigit();
+ });
+ auto minorVersionEnd = std::find_if(minorVersionFound, dependency.end(), [](QChar c) {
+ return !c.isDigit();
+ });
+ QStringView minorVersionString(minorVersionFound, minorVersionEnd);
+ if (!minorVersionString.isEmpty())
+ version.minor.value = QStringView(minorVersionFound, minorVersionEnd).toInt();
+ }
+
+ imports.emplace_back(moduleId, version, sourceId);
+ imports.emplace_back(cppModuleId, version, sourceId);
}
-void addImports(Storage::Imports &imports, SourceId sourceId, const QStringList &dependencies)
+void addImports(Storage::Imports &imports,
+ SourceId sourceId,
+ const QStringList &dependencies,
+ QmlTypesParser::ProjectStorage &storage)
{
- for (const QString &dependency : dependencies) {
- imports.push_back(createImport(dependency, sourceId));
- }
+ for (const QString &dependency : dependencies)
+ appendImports(imports, dependency, sourceId, storage);
- imports.emplace_back("QML", Storage::Version{}, sourceId, Storage::ImportKind::QmlTypesDependency);
- imports.emplace_back("QtQml", Storage::Version{}, sourceId, Storage::ImportKind::QmlTypesDependency);
+ imports.emplace_back(storage.moduleId("QML"), Storage::Version{}, sourceId);
+ imports.emplace_back(storage.moduleId("QtQml"), Storage::Version{}, sourceId);
+ imports.emplace_back(storage.moduleId("QtQml-cppnative"), Storage::Version{}, sourceId);
}
Storage::TypeAccessSemantics createTypeAccessSemantics(QQmlJSScope::AccessSemantics accessSematics)
@@ -249,8 +260,7 @@ Storage::EnumerationDeclarations createEnumeration(const QHash<QString, QQmlJSMe
void addType(Storage::Types &types, SourceId sourceId, ModuleId moduleId, const QQmlJSScope &component)
{
auto [functionsDeclarations, signalDeclarations] = createFunctionAndSignals(component.ownMethods());
- types.emplace_back(moduleId,
- Utils::SmallString{component.internalName()},
+ types.emplace_back(Utils::SmallString{component.internalName()},
Storage::NativeType{Utils::SmallString{component.baseTypeName()}},
createTypeAccessSemantics(component.accessSemantics()),
sourceId,
@@ -287,7 +297,7 @@ void QmlTypesParser::parse(const QString &sourceContent,
if (!isValid)
throw CannotParseQmlTypesFile{};
- addImports(imports, sourceId, dependencies);
+ addImports(imports, sourceId, dependencies, m_storage);
addTypes(types, sourceId, moduleId, components);
}
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.h b/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.h
index 04733f3ecd..eeb58f0e31 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.h
+++ b/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.h
@@ -43,11 +43,12 @@ class SourcePathCache;
class QmlTypesParser : public QmlTypesParserInterface
{
public:
- using PathCache = QmlDesigner::SourcePathCache<QmlDesigner::ProjectStorage<Sqlite::Database>,
- NonLockingMutex>;
+ using ProjectStorage = QmlDesigner::ProjectStorage<Sqlite::Database>;
+ using PathCache = QmlDesigner::SourcePathCache<ProjectStorage, NonLockingMutex>;
- QmlTypesParser(PathCache &pathCache)
+ QmlTypesParser(PathCache &pathCache, ProjectStorage &storage)
: m_pathCache{pathCache}
+ , m_storage{storage}
{}
void parse(const QString &sourceContent,
@@ -58,5 +59,6 @@ public:
private:
PathCache &m_pathCache;
+ ProjectStorage &m_storage;
};
} // namespace QmlDesigner
diff --git a/tests/unit/unittest/gtest-creator-printing.cpp b/tests/unit/unittest/gtest-creator-printing.cpp
index 85ff406f95..3123ffcf1d 100644
--- a/tests/unit/unittest/gtest-creator-printing.cpp
+++ b/tests/unit/unittest/gtest-creator-printing.cpp
@@ -1095,8 +1095,8 @@ std::ostream &operator<<(std::ostream &out, Version version)
std::ostream &operator<<(std::ostream &out, const ExportedType &exportedType)
{
- return out << "(\"" << exportedType.name << "\""
- << ", " << exportedType.version << ")";
+ return out << "(\"" << exportedType.name << "\"," << exportedType.moduleId << ", "
+ << exportedType.version << ")";
}
std::ostream &operator<<(std::ostream &out, const NativeType &nativeType)
@@ -1116,10 +1116,9 @@ std::ostream &operator<<(std::ostream &out, const QualifiedImportedType &importe
std::ostream &operator<<(std::ostream &out, const Type &type)
{
using Utils::operator<<;
- return out << "(moduleId: " << type.moduleId << ", typename: \"" << type.typeName
- << "\", prototype: " << type.prototype << ", " << type.accessSemantics
- << ", source: " << type.sourceId << ", exports: " << type.exportedTypes
- << ", properties: " << type.propertyDeclarations
+ return out << "( typename: \"" << type.typeName << "\", prototype: " << type.prototype << ", "
+ << type.prototypeId << ", " << type.accessSemantics << ", source: " << type.sourceId
+ << ", exports: " << type.exportedTypes << ", properties: " << type.propertyDeclarations
<< ", functions: " << type.functionDeclarations
<< ", signals: " << type.signalDeclarations << ")";
}
@@ -1127,9 +1126,10 @@ std::ostream &operator<<(std::ostream &out, const Type &type)
std::ostream &operator<<(std::ostream &out, const PropertyDeclaration &propertyDeclaration)
{
using Utils::operator<<;
- return out << "(\"" << propertyDeclaration.name << "\", \"" << propertyDeclaration.typeName
- << "\", " << propertyDeclaration.traits << ", " << propertyDeclaration.typeId
- << ", \"" << propertyDeclaration.aliasPropertyName << "\")";
+ return out << "(\"" << propertyDeclaration.name << "\", " << propertyDeclaration.typeName
+ << ", " << propertyDeclaration.typeId << ", " << propertyDeclaration.traits << ", "
+ << propertyDeclaration.typeId << ", \"" << propertyDeclaration.aliasPropertyName
+ << "\")";
}
std::ostream &operator<<(std::ostream &out, PropertyDeclarationTraits traits)
@@ -1186,11 +1186,6 @@ std::ostream &operator<<(std::ostream &out, const EnumerationDeclaration &enumer
<< enumerationDeclaration.enumeratorDeclarations << ")";
}
-std::ostream &operator<<(std::ostream &out, const Module &module)
-{
- return out << "(" << module.name << ", " << module.sourceId << ")";
-}
-
std::ostream &operator<<(std::ostream &out, const ImportKind &importKind)
{
return out << importKindToText(importKind);
@@ -1198,8 +1193,7 @@ std::ostream &operator<<(std::ostream &out, const ImportKind &importKind)
std::ostream &operator<<(std::ostream &out, const Import &import)
{
- return out << "(" << import.name << ", " << import.version << ", " << import.sourceId << ", "
- << import.moduleId << ", " << import.kind << ")";
+ return out << "(" << import.moduleId << ", " << import.version << ", " << import.sourceId << ")";
}
} // namespace Storage
diff --git a/tests/unit/unittest/gtest-creator-printing.h b/tests/unit/unittest/gtest-creator-printing.h
index 5b8cb51e8e..074fada6d9 100644
--- a/tests/unit/unittest/gtest-creator-printing.h
+++ b/tests/unit/unittest/gtest-creator-printing.h
@@ -260,8 +260,6 @@ class ParameterDeclaration;
class SignalDeclaration;
class EnumerationDeclaration;
class EnumeratorDeclaration;
-class Module;
-class ModuleDependency;
enum class ImportKind : char;
class Import;
enum class IsQualified : int;
@@ -281,8 +279,6 @@ std::ostream &operator<<(std::ostream &out, const ParameterDeclaration &paramete
std::ostream &operator<<(std::ostream &out, const SignalDeclaration &signalDeclaration);
std::ostream &operator<<(std::ostream &out, const EnumerationDeclaration &enumerationDeclaration);
std::ostream &operator<<(std::ostream &out, const EnumeratorDeclaration &enumeratorDeclaration);
-std::ostream &operator<<(std::ostream &out, const Module &module);
-std::ostream &operator<<(std::ostream &out, const ModuleDependency &module);
std::ostream &operator<<(std::ostream &out, const ImportKind &importKind);
std::ostream &operator<<(std::ostream &out, const Import &import);
std::ostream &operator<<(std::ostream &out, IsQualified isQualified);
diff --git a/tests/unit/unittest/projectstorage-test.cpp b/tests/unit/unittest/projectstorage-test.cpp
index da71b36d31..bd6fda06bc 100644
--- a/tests/unit/unittest/projectstorage-test.cpp
+++ b/tests/unit/unittest/projectstorage-test.cpp
@@ -83,34 +83,18 @@ MATCHER_P2(IsSourceNameAndSourceContextId,
&& sourceNameAndSourceContextId.sourceContextId == id;
}
-MATCHER_P5(IsStorageType,
- moduleId,
- typeName,
- prototype,
- accessSemantics,
+MATCHER_P4(IsStorageType,
sourceId,
- std::string(negation ? "isn't " : "is ")
- + PrintToString(Storage::Type{moduleId, typeName, prototype, accessSemantics, sourceId}))
-{
- const Storage::Type &type = arg;
-
- return type.moduleId == moduleId && type.typeName == typeName
- && type.accessSemantics == accessSemantics && type.sourceId == sourceId
- && Storage::ImportedTypeName{prototype} == type.prototype;
-}
-
-MATCHER_P4(IsStorageTypeWithInvalidSourceId,
- moduleId,
typeName,
- prototype,
+ prototypeId,
accessSemantics,
std::string(negation ? "isn't " : "is ")
- + PrintToString(Storage::Type{moduleId, typeName, prototype, accessSemantics, SourceId{}}))
+ + PrintToString(Storage::Type{typeName, prototypeId, accessSemantics, sourceId}))
{
const Storage::Type &type = arg;
- return type.moduleId == moduleId && type.typeName == typeName && type.prototype == prototype
- && type.accessSemantics == accessSemantics && !type.sourceId.isValid();
+ return type.sourceId == sourceId && type.typeName == typeName
+ && type.accessSemantics == accessSemantics && prototypeId.id == type.prototypeId.id;
}
MATCHER_P(IsExportedType,
@@ -122,6 +106,17 @@ MATCHER_P(IsExportedType,
return type.name == name;
}
+MATCHER_P2(IsExportedType,
+ moduleId,
+ name,
+ std::string(negation ? "isn't " : "is ")
+ + PrintToString(Storage::ExportedType{moduleId, name}))
+{
+ const Storage::ExportedType &type = arg;
+
+ return type.moduleId == moduleId && type.name == name;
+}
+
MATCHER_P3(IsExportedType,
name,
majorVersion,
@@ -135,56 +130,51 @@ MATCHER_P3(IsExportedType,
return type.name == name && type.version == Storage::Version{majorVersion, minorVersion};
}
+MATCHER_P4(IsExportedType,
+ moduleId,
+ name,
+ majorVersion,
+ minorVersion,
+ std::string(negation ? "isn't " : "is ")
+ + PrintToString(Storage::ExportedType{moduleId,
+ name,
+ Storage::Version{majorVersion, minorVersion}}))
+{
+ const Storage::ExportedType &type = arg;
+
+ return type.moduleId == moduleId && type.name == name
+ && type.version == Storage::Version{majorVersion, minorVersion};
+}
+
MATCHER_P3(IsPropertyDeclaration,
name,
- typeName,
+ propertyTypeId,
traits,
std::string(negation ? "isn't " : "is ")
- + PrintToString(Storage::PropertyDeclaration{name, typeName, traits}))
+ + PrintToString(Storage::PropertyDeclaration{name, propertyTypeId, traits}))
{
const Storage::PropertyDeclaration &propertyDeclaration = arg;
- return propertyDeclaration.name == name
- && Storage::ImportedTypeName{typeName} == propertyDeclaration.typeName
+ return propertyDeclaration.name == name && propertyTypeId == propertyDeclaration.propertyTypeId
&& propertyDeclaration.traits == traits;
}
MATCHER_P4(IsPropertyDeclaration,
name,
- typeName,
+ propertyTypeId,
traits,
aliasPropertyName,
std::string(negation ? "isn't " : "is ")
- + PrintToString(Storage::PropertyDeclaration(name, typeName, traits, aliasPropertyName)))
+ + PrintToString(
+ Storage::PropertyDeclaration{name, propertyTypeId, traits, aliasPropertyName}))
{
const Storage::PropertyDeclaration &propertyDeclaration = arg;
- return propertyDeclaration.name == name
- && Utils::visit([&](auto &&v) -> bool { return v.name == typeName.name; },
- propertyDeclaration.typeName)
+ return propertyDeclaration.name == name && propertyTypeId == propertyDeclaration.propertyTypeId
&& propertyDeclaration.aliasPropertyName == aliasPropertyName
&& propertyDeclaration.traits == traits;
}
-MATCHER_P(IsModule,
- name,
- std::string(negation ? "isn't " : "is ") + PrintToString(Storage::Module{name}))
-{
- const Storage::Module &module = arg;
-
- return module.name == name;
-}
-
-MATCHER_P2(IsModule,
- name,
- sourceId,
- std::string(negation ? "isn't " : "is ") + PrintToString(Storage::Module{name, sourceId}))
-{
- const Storage::Module &module = arg;
-
- return module.name == name;
-}
-
class ProjectStorage : public testing::Test
{
protected:
@@ -214,25 +204,31 @@ protected:
auto createTypes()
{
- imports.emplace_back("Qml", Storage::Version{}, sourceId1);
- imports.emplace_back("Qml", Storage::Version{}, sourceId2);
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId1);
+ imports.emplace_back(qmlModuleId, Storage::Version{}, sourceId1);
+ imports.emplace_back(qmlNativeModuleId, Storage::Version{}, sourceId1);
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId1);
+ imports.emplace_back(qtQuickNativeModuleId, Storage::Version{}, sourceId1);
+ imports.emplace_back(qmlModuleId, Storage::Version{}, sourceId2);
+ imports.emplace_back(qmlNativeModuleId, Storage::Version{}, sourceId2);
- importsSourceId1.emplace_back("Qml", Storage::Version{}, sourceId1);
- importsSourceId1.emplace_back("QtQuick", Storage::Version{}, sourceId1);
+ importsSourceId1.emplace_back(qmlModuleId, Storage::Version{}, sourceId1);
+ importsSourceId1.emplace_back(qmlNativeModuleId, Storage::Version{}, sourceId1);
+ importsSourceId1.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId1);
+ importsSourceId1.emplace_back(qtQuickNativeModuleId, Storage::Version{}, sourceId1);
- importsSourceId2.emplace_back("Qml", Storage::Version{}, sourceId2);
+ importsSourceId2.emplace_back(qmlModuleId, Storage::Version{}, sourceId2);
+ importsSourceId2.emplace_back(qmlNativeModuleId, Storage::Version{}, sourceId2);
return Storage::Types{
Storage::Type{
- qtQuickModuleId,
"QQuickItem",
- Storage::NativeType{"QObject"},
+ Storage::ImportedType{"QObject"},
TypeAccessSemantics::Reference,
sourceId1,
- {Storage::ExportedType{"Item"}},
+ {Storage::ExportedType{qtQuickModuleId, "Item"},
+ Storage::ExportedType{qtQuickNativeModuleId, "QQuickItem"}},
{Storage::PropertyDeclaration{"data",
- Storage::NativeType{"QObject"},
+ Storage::ImportedType{"QObject"},
Storage::PropertyDeclarationTraits::IsList},
Storage::PropertyDeclaration{"children",
Storage::ImportedType{"Item"},
@@ -261,48 +257,48 @@ protected:
Storage::EnumerationDeclaration{"Type",
{Storage::EnumeratorDeclaration{"Foo"},
Storage::EnumeratorDeclaration{"Poo", 12}}}}},
- Storage::Type{qmlModuleId,
- "QObject",
- Storage::NativeType{},
+ Storage::Type{"QObject",
+ Storage::ImportedType{},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Object", Storage::Version{2}},
- Storage::ExportedType{"Obj", Storage::Version{2}}}}};
+ {Storage::ExportedType{qmlModuleId, "Object", Storage::Version{2}},
+ Storage::ExportedType{qmlModuleId, "Obj", Storage::Version{2}},
+ Storage::ExportedType{qmlNativeModuleId, "QObject"}}}};
}
auto createVersionedTypes()
{
- return Storage::Types{Storage::Type{qmlModuleId,
- "QObject",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId1,
- {Storage::ExportedType{"Object", Storage::Version{1}},
- Storage::ExportedType{"Obj", Storage::Version{1, 2}},
- Storage::ExportedType{"BuiltInObj", Storage::Version{}}}},
- Storage::Type{qmlModuleId,
- "QObject2",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId1,
- {Storage::ExportedType{"Object", Storage::Version{2, 0}},
- Storage::ExportedType{"Obj", Storage::Version{2, 3}}}},
- Storage::Type{qmlModuleId,
- "QObject3",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId1,
- {Storage::ExportedType{"Object", Storage::Version{2, 11}},
- Storage::ExportedType{"Obj", Storage::Version{2, 11}}}},
- Storage::Type{qmlModuleId,
- "QObject4",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId1,
- {Storage::ExportedType{"Object", Storage::Version{3, 4}},
- Storage::ExportedType{"Obj", Storage::Version{3, 4}},
- Storage::ExportedType{"BuiltInObj",
- Storage::Version{3, 4}}}}};
+ return Storage::Types{
+ Storage::Type{"QObject",
+ Storage::ImportedType{},
+ TypeAccessSemantics::Reference,
+ sourceId1,
+ {Storage::ExportedType{qmlModuleId, "Object", Storage::Version{1}},
+ Storage::ExportedType{qmlModuleId, "Obj", Storage::Version{1, 2}},
+ Storage::ExportedType{qmlModuleId, "BuiltInObj"},
+ Storage::ExportedType{qmlNativeModuleId, "QObject"}}},
+ Storage::Type{"QObject2",
+ Storage::ImportedType{},
+ TypeAccessSemantics::Reference,
+ sourceId1,
+ {Storage::ExportedType{qmlModuleId, "Object", Storage::Version{2, 0}},
+ Storage::ExportedType{qmlModuleId, "Obj", Storage::Version{2, 3}},
+ Storage::ExportedType{qmlNativeModuleId, "QObject2"}}},
+ Storage::Type{"QObject3",
+ Storage::ImportedType{},
+ TypeAccessSemantics::Reference,
+ sourceId1,
+ {Storage::ExportedType{qmlModuleId, "Object", Storage::Version{2, 11}},
+ Storage::ExportedType{qmlModuleId, "Obj", Storage::Version{2, 11}},
+ Storage::ExportedType{qmlNativeModuleId, "QObject3"}}},
+ Storage::Type{"QObject4",
+ Storage::ImportedType{},
+ TypeAccessSemantics::Reference,
+ sourceId1,
+ {Storage::ExportedType{qmlModuleId, "Object", Storage::Version{3, 4}},
+ Storage::ExportedType{qmlModuleId, "Obj", Storage::Version{3, 4}},
+ Storage::ExportedType{qmlModuleId, "BuiltInObj", Storage::Version{3, 4}},
+ Storage::ExportedType{qmlNativeModuleId, "QObject4"}}}};
}
auto createTypesWithExportedTypeNamesOnly()
@@ -319,48 +315,53 @@ protected:
{
auto types = createTypes();
- imports.emplace_back("Qml", Storage::Version{}, sourceId3);
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId3);
+ imports.emplace_back(qmlModuleId, Storage::Version{}, sourceId3);
+ imports.emplace_back(qmlNativeModuleId, Storage::Version{}, sourceId3);
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId3);
+ imports.emplace_back(qtQuickNativeModuleId, Storage::Version{}, sourceId3);
- imports.emplace_back("Qml", Storage::Version{}, sourceId4);
- imports.emplace_back("/path/to", Storage::Version{}, sourceId4);
+ imports.emplace_back(qmlModuleId, Storage::Version{}, sourceId4);
+ imports.emplace_back(qmlNativeModuleId, Storage::Version{}, sourceId4);
+ imports.emplace_back(pathToModuleId, Storage::Version{}, sourceId4);
- importsSourceId3.emplace_back("Qml", Storage::Version{}, sourceId3);
- importsSourceId3.emplace_back("QtQuick", Storage::Version{}, sourceId3);
+ importsSourceId3.emplace_back(qmlModuleId, Storage::Version{}, sourceId3);
+ importsSourceId3.emplace_back(qmlNativeModuleId, Storage::Version{}, sourceId3);
+ importsSourceId3.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId3);
+ importsSourceId3.emplace_back(qtQuickNativeModuleId, Storage::Version{}, sourceId3);
- importsSourceId4.emplace_back("Qml", Storage::Version{}, sourceId4);
- importsSourceId4.emplace_back("/path/to", Storage::Version{}, sourceId4);
+ importsSourceId4.emplace_back(qmlModuleId, Storage::Version{}, sourceId4);
+ importsSourceId4.emplace_back(qmlNativeModuleId, Storage::Version{}, sourceId4);
+ importsSourceId4.emplace_back(pathToModuleId, Storage::Version{}, sourceId4);
types[1].propertyDeclarations.push_back(
Storage::PropertyDeclaration{"objects",
- Storage::NativeType{"QObject"},
+ Storage::ImportedType{"QObject"},
Storage::PropertyDeclarationTraits::IsList});
- types.push_back(Storage::Type{qtQuickModuleId,
- "QAliasItem",
+ types.push_back(Storage::Type{"QAliasItem",
Storage::ImportedType{"Item"},
TypeAccessSemantics::Reference,
sourceId3,
- {Storage::ExportedType{"AliasItem"}}});
+ {Storage::ExportedType{qtQuickModuleId, "AliasItem"},
+ Storage::ExportedType{qtQuickNativeModuleId, "QAliasItem"}}});
types.back().propertyDeclarations.push_back(
Storage::PropertyDeclaration{"data",
- Storage::NativeType{"QObject"},
+ Storage::ImportedType{"QObject"},
Storage::PropertyDeclarationTraits::IsList});
types.back().propertyDeclarations.push_back(
Storage::PropertyDeclaration{"items", Storage::ImportedType{"Item"}, "children"});
types.back().propertyDeclarations.push_back(
Storage::PropertyDeclaration{"objects", Storage::ImportedType{"Item"}, "objects"});
- types.push_back(
- Storage::Type{pathToModuleId,
- "QObject2",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId4,
- {Storage::ExportedType{"Object2"}, Storage::ExportedType{"Obj2"}}});
+ types.push_back(Storage::Type{"QObject2",
+ Storage::ImportedType{},
+ TypeAccessSemantics::Reference,
+ sourceId4,
+ {Storage::ExportedType{pathToModuleId, "Object2"},
+ Storage::ExportedType{pathToModuleId, "Obj2"}}});
types[3].propertyDeclarations.push_back(
Storage::PropertyDeclaration{"objects",
- Storage::NativeType{"QObject"},
+ Storage::ImportedType{"QObject"},
Storage::PropertyDeclarationTraits::IsList});
return types;
@@ -368,16 +369,16 @@ protected:
auto createTypesWithRecursiveAliases()
{
- imports.emplace_back("Qml", Storage::Version{}, sourceId5);
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId5);
+ imports.emplace_back(qmlModuleId, Storage::Version{}, sourceId5);
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId5);
auto types = createTypesWithAliases();
- types.push_back(Storage::Type{qtQuickModuleId,
- "QAliasItem2",
+ types.push_back(Storage::Type{"QAliasItem2",
Storage::ImportedType{"Object"},
TypeAccessSemantics::Reference,
sourceId5,
- {Storage::ExportedType{"AliasItem2"}}});
+ {Storage::ExportedType{qtQuickModuleId, "AliasItem2"},
+ Storage::ExportedType{qtQuickNativeModuleId, "QAliasItem2"}}});
types.back().propertyDeclarations.push_back(
Storage::PropertyDeclaration{"objects", Storage::ImportedType{"AliasItem"}, "objects"});
@@ -388,38 +389,19 @@ protected:
auto createTypesWithAliases2()
{
auto types = createTypesWithAliases();
- types[2].prototype = Storage::NativeType{"QObject"};
+ types[2].prototype = Storage::ImportedType{"Object"};
types[2].propertyDeclarations.erase(std::next(types[2].propertyDeclarations.begin()));
return types;
}
- Storage::Modules createModules()
- {
- return Storage::Modules{Storage::Module{"Qml", qmlModuleSourceId},
- Storage::Module{"QtQuick", qtQuickModuleSourceId},
- Storage::Module{"/path/to", pathToModuleSourceId}};
- }
-
Storage::Imports createImports(SourceId sourceId)
{
- return Storage::Imports{Storage::Import{"Qml", Storage::Version{2}, sourceId},
- Storage::Import{"QtQuick", Storage::Version{}, sourceId},
- Storage::Import{"/path/to", Storage::Version{}, sourceId}};
- }
-
- static Storage::Imports createImports(const SourceIds &sourceIds)
- {
- Storage::Imports imports;
- imports.reserve(3 * sourceIds.size());
-
- for (SourceId sourceId : sourceIds) {
- imports.emplace_back("Qml", Storage::Version{2}, sourceId);
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId);
- imports.emplace_back("/path/to", Storage::Version{}, sourceId);
- }
-
- return imports;
+ return Storage::Imports{Storage::Import{qmlModuleId, Storage::Version{2}, sourceId},
+ Storage::Import{qmlNativeModuleId, Storage::Version{}, sourceId},
+ Storage::Import{qtQuickModuleId, Storage::Version{}, sourceId},
+ Storage::Import{qtQuickNativeModuleId, Storage::Version{}, sourceId},
+ Storage::Import{pathToModuleId, Storage::Version{}, sourceId}};
}
template<typename Range>
@@ -428,9 +410,14 @@ protected:
return FileStatuses(range.begin(), range.end());
}
+ TypeId fetchTypeId(SourceId sourceId, Utils::SmallStringView name)
+ {
+ return storage.fetchTypeIdByName(sourceId, name);
+ }
+
protected:
Sqlite::Database database{":memory:", Sqlite::JournalMode::Memory};
- //Sqlite::Database database{TESTDATA_DIR "/aaaa.db", Sqlite::JournalMode::Wal};
+ //Sqlite::Database database{TESTDATA_DIR "/aaaaa.db", Sqlite::JournalMode::Wal};
QmlDesigner::ProjectStorage<Sqlite::Database> storage{database, database.isInitialized()};
QmlDesigner::SourcePathCache<QmlDesigner::ProjectStorage<Sqlite::Database>> sourcePathCache{
storage};
@@ -455,10 +442,11 @@ protected:
SourceId pathToModuleSourceId{sourcePathCache.sourceId(modulePath3)};
SourceId moduleSourceId4{sourcePathCache.sourceId(modulePath4)};
SourceId moduleSourceId5{sourcePathCache.sourceId(modulePath5)};
- Storage::Modules modules{createModules()};
- ModuleId qmlModuleId{&qmlModuleSourceId};
- ModuleId qtQuickModuleId{&qtQuickModuleSourceId};
- ModuleId pathToModuleId{&pathToModuleSourceId};
+ ModuleId qmlModuleId{storage.moduleId("Qml")};
+ ModuleId qmlNativeModuleId{storage.moduleId("Qml-cppnative")};
+ ModuleId qtQuickModuleId{storage.moduleId("QtQuick")};
+ ModuleId qtQuickNativeModuleId{storage.moduleId("QtQuick-cppnative")};
+ ModuleId pathToModuleId{storage.moduleId("/path/to")};
Storage::Imports imports;
Storage::Imports importsSourceId1;
Storage::Imports importsSourceId2;
@@ -674,28 +662,26 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypes)
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- ASSERT_THAT(storage.fetchTypes(),
- UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId,
- "QObject",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId2),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Object"),
- IsExportedType("Obj")))),
- AllOf(IsStorageType(qtQuickModuleId,
- "QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Item"))))));
+ ASSERT_THAT(
+ storage.fetchTypes(),
+ UnorderedElementsAre(
+ AllOf(IsStorageType(sourceId2, "QObject", TypeId{}, TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qmlModuleId, "Object"),
+ IsExportedType(qmlModuleId, "Obj"),
+ IsExportedType(qmlNativeModuleId, "QObject")))),
+ AllOf(IsStorageType(sourceId1,
+ "QQuickItem",
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Item"),
+ IsExportedType(qtQuickNativeModuleId, "QQuickItem"))))));
}
TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesWithExportedPrototypeName)
@@ -704,28 +690,26 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesWithExportedPrototypeName)
types[0].prototype = Storage::ImportedType{"Object"};
storage.synchronize(
- modules,
importsSourceId1,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- ASSERT_THAT(storage.fetchTypes(),
- UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId,
- "QObject",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId2),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Object"),
- IsExportedType("Obj")))),
- AllOf(IsStorageType(qtQuickModuleId,
- "QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Item"))))));
+ ASSERT_THAT(
+ storage.fetchTypes(),
+ UnorderedElementsAre(
+ AllOf(IsStorageType(sourceId2, "QObject", TypeId{}, TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qmlModuleId, "Object"),
+ IsExportedType(qmlModuleId, "Obj"),
+ IsExportedType(qmlNativeModuleId, "QObject")))),
+ AllOf(IsStorageType(sourceId1,
+ "QQuickItem",
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Item"),
+ IsExportedType(qtQuickNativeModuleId, "QQuickItem"))))));
}
TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesThrowsWithWrongPrototypeName)
@@ -733,8 +717,7 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesThrowsWithWrongPrototypeName)
Storage::Types types{createTypes()};
types[0].prototype = Storage::ImportedType{"Objec"};
- ASSERT_THROW(storage.synchronize(modules,
- imports,
+ ASSERT_THROW(storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -748,80 +731,55 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesThrowsWithWrongPrototypeName)
TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesWithMissingModuleAndPrototypeName)
{
Storage::Types types{createTypes()};
- types.push_back(Storage::Type{pathToModuleId,
- "QObject2",
- Storage::NativeType{},
+ types.push_back(Storage::Type{"QObject2",
+ Storage::ImportedType{},
TypeAccessSemantics::Reference,
sourceId3,
- {Storage::ExportedType{"Object2"}, Storage::ExportedType{"Obj2"}}});
+ {Storage::ExportedType{ModuleId{22}, "Object2"},
+ Storage::ExportedType{pathToModuleId, "Obj2"}}});
storage.synchronize(
- modules,
imports,
{},
{sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[1].prototype = Storage::ImportedType{"Object2"};
- ASSERT_THROW(storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
-TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesWithMissingModule)
-{
- Storage::Types types{createTypes()};
- storage.synchronize(modules,
- imports,
- {},
- {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
- {});
-
- ASSERT_THROW(storage.synchronize({},
- imports,
- types,
- {sourceId1,
- sourceId2,
- qmlModuleSourceId,
- qtQuickModuleSourceId,
- pathToModuleSourceId},
- {}),
- QmlDesigner::ModuleDoesNotExists);
-}
-
TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesReverseOrder)
{
Storage::Types types{createTypes()};
std::reverse(types.begin(), types.end());
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- ASSERT_THAT(storage.fetchTypes(),
- UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId,
- "QObject",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId2),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Object"),
- IsExportedType("Obj")))),
- AllOf(IsStorageType(qtQuickModuleId,
- "QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Item"))))));
+ ASSERT_THAT(
+ storage.fetchTypes(),
+ UnorderedElementsAre(
+ AllOf(IsStorageType(sourceId2, "QObject", TypeId{}, TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qmlModuleId, "Object"),
+ IsExportedType(qmlModuleId, "Obj"),
+ IsExportedType(qmlNativeModuleId, "QObject")))),
+ AllOf(IsStorageType(sourceId1,
+ "QQuickItem",
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Item"),
+ IsExportedType(qtQuickNativeModuleId, "QQuickItem"))))));
}
TEST_F(ProjectStorage, SynchronizeTypesOverwritesTypeAccessSemantics)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -829,31 +787,29 @@ TEST_F(ProjectStorage, SynchronizeTypesOverwritesTypeAccessSemantics)
types[0].accessSemantics = TypeAccessSemantics::Value;
types[1].accessSemantics = TypeAccessSemantics::Value;
- storage.synchronize({}, imports, types, {sourceId1, sourceId2}, {});
+ storage.synchronize(imports, types, {sourceId1, sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId,
- "QObject",
- Storage::NativeType{},
- TypeAccessSemantics::Value,
- sourceId2),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Object"),
- IsExportedType("Obj")))),
- AllOf(IsStorageType(qtQuickModuleId,
- "QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Value,
- sourceId1),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Item"))))));
+ UnorderedElementsAre(
+ AllOf(IsStorageType(sourceId2, "QObject", TypeId{}, TypeAccessSemantics::Value),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qmlModuleId, "Object"),
+ IsExportedType(qmlModuleId, "Obj"),
+ IsExportedType(qmlNativeModuleId, "QObject")))),
+ AllOf(IsStorageType(sourceId1,
+ "QQuickItem",
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Value),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Item"),
+ IsExportedType(qtQuickNativeModuleId,
+ "QQuickItem"))))));
}
TEST_F(ProjectStorage, SynchronizeTypesOverwritesSources)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -861,132 +817,129 @@ TEST_F(ProjectStorage, SynchronizeTypesOverwritesSources)
types[0].sourceId = sourceId3;
types[1].sourceId = sourceId4;
Storage::Imports newImports;
- newImports.emplace_back("Qml", Storage::Version{}, sourceId3);
- newImports.emplace_back("Qml", Storage::Version{}, sourceId4);
- newImports.emplace_back("QtQuick", Storage::Version{}, sourceId3);
+ newImports.emplace_back(qmlModuleId, Storage::Version{}, sourceId3);
+ newImports.emplace_back(qmlNativeModuleId, Storage::Version{}, sourceId3);
+ newImports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId3);
+ newImports.emplace_back(qtQuickNativeModuleId, Storage::Version{}, sourceId3);
+ newImports.emplace_back(qmlModuleId, Storage::Version{}, sourceId4);
+ newImports.emplace_back(qmlNativeModuleId, Storage::Version{}, sourceId4);
- storage.synchronize({}, newImports, types, {sourceId1, sourceId2, sourceId3, sourceId4}, {});
+ storage.synchronize(newImports, types, {sourceId1, sourceId2, sourceId3, sourceId4}, {});
- ASSERT_THAT(storage.fetchTypes(),
- UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId,
- "QObject",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId4),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Object"),
- IsExportedType("Obj")))),
- AllOf(IsStorageType(qtQuickModuleId,
- "QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId3),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Item"))))));
+ ASSERT_THAT(
+ storage.fetchTypes(),
+ UnorderedElementsAre(
+ AllOf(IsStorageType(sourceId4, "QObject", TypeId{}, TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qmlModuleId, "Object"),
+ IsExportedType(qmlModuleId, "Obj"),
+ IsExportedType(qmlNativeModuleId, "QObject")))),
+ AllOf(IsStorageType(sourceId3,
+ "QQuickItem",
+ fetchTypeId(sourceId4, "QObject"),
+ TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Item"),
+ IsExportedType(qtQuickNativeModuleId, "QQuickItem"))))));
}
TEST_F(ProjectStorage, SynchronizeTypesInsertTypeIntoPrototypeChain)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- types[0].prototype = Storage::NativeType{"QQuickObject"};
- types.push_back(Storage::Type{qtQuickModuleId,
- "QQuickObject",
- Storage::NativeType{"QObject"},
+ types[0].prototype = Storage::ImportedType{"QQuickObject"};
+ types.push_back(Storage::Type{"QQuickObject",
+ Storage::ImportedType{"QObject"},
TypeAccessSemantics::Reference,
sourceId1,
- {Storage::ExportedType{"Object"}}});
+ {Storage::ExportedType{qtQuickModuleId, "Object"},
+ Storage::ExportedType{qtQuickNativeModuleId, "QQuickObject"}}});
- storage.synchronize({}, importsSourceId1, {types[0], types[2]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0], types[2]}, {sourceId1}, {});
- ASSERT_THAT(storage.fetchTypes(),
- UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId,
- "QObject",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId2),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Object"),
- IsExportedType("Obj")))),
- AllOf(IsStorageType(qtQuickModuleId,
- "QQuickObject",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Object")))),
- AllOf(IsStorageType(qtQuickModuleId,
- "QQuickItem",
- Storage::NativeType{"QQuickObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Item"))))));
+ ASSERT_THAT(
+ storage.fetchTypes(),
+ UnorderedElementsAre(
+ AllOf(IsStorageType(sourceId2, "QObject", TypeId{}, TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qmlModuleId, "Object"),
+ IsExportedType(qmlModuleId, "Obj"),
+ IsExportedType(qmlNativeModuleId, "QObject")))),
+ AllOf(IsStorageType(sourceId1,
+ "QQuickObject",
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Object"),
+ IsExportedType(qtQuickNativeModuleId, "QQuickObject")))),
+ AllOf(IsStorageType(sourceId1,
+ "QQuickItem",
+ fetchTypeId(sourceId1, "QQuickObject"),
+ TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Item"),
+ IsExportedType(qtQuickNativeModuleId, "QQuickItem"))))));
}
TEST_F(ProjectStorage, SynchronizeTypesAddQualifiedPrototype)
{
Storage::Types types{createTypes()};
types[0].prototype = Storage::QualifiedImportedType{"Object",
- Storage::Import{"QtQuick",
+ Storage::Import{qtQuickModuleId,
Storage::Version{},
sourceId1}};
- types.push_back(Storage::Type{qtQuickModuleId,
- "QQuickObject",
- Storage::NativeType{"QObject"},
+ types.push_back(Storage::Type{"QQuickObject",
+ Storage::ImportedType{"QObject"},
TypeAccessSemantics::Reference,
sourceId1,
- {Storage::ExportedType{"Object"}}});
+ {Storage::ExportedType{qtQuickModuleId, "Object"},
+ Storage::ExportedType{qtQuickNativeModuleId, "QQuickObject"}}});
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- ASSERT_THAT(storage.fetchTypes(),
- UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId,
- "QObject",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId2),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Object"),
- IsExportedType("Obj")))),
- AllOf(IsStorageType(qtQuickModuleId,
- "QQuickObject",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Object")))),
- AllOf(IsStorageType(qtQuickModuleId,
- "QQuickItem",
- Storage::NativeType{"QQuickObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Item"))))));
+ ASSERT_THAT(
+ storage.fetchTypes(),
+ UnorderedElementsAre(
+ AllOf(IsStorageType(sourceId2, "QObject", TypeId{}, TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qmlModuleId, "Object"),
+ IsExportedType(qmlModuleId, "Obj"),
+ IsExportedType(qmlNativeModuleId, "QObject")))),
+ AllOf(IsStorageType(sourceId1,
+ "QQuickObject",
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Object"),
+ IsExportedType(qtQuickNativeModuleId, "QQuickObject")))),
+ AllOf(IsStorageType(sourceId1,
+ "QQuickItem",
+ fetchTypeId(sourceId1, "QQuickObject"),
+ TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Item"),
+ IsExportedType(qtQuickNativeModuleId, "QQuickItem"))))));
}
TEST_F(ProjectStorage, SynchronizeTypesThrowsForMissingPrototype)
{
sourceId1 = sourcePathCache.sourceId(path1);
- Storage::Types types{Storage::Type{qtQuickModuleId,
- "QQuickItem",
- Storage::NativeType{"QObject"},
+ Storage::Types types{Storage::Type{"QQuickItem",
+ Storage::ImportedType{"QObject"},
TypeAccessSemantics::Reference,
sourceId1,
- {Storage::ExportedType{"Item"}}}};
+ {Storage::ExportedType{qtQuickModuleId, "Item"},
+ Storage::ExportedType{qtQuickNativeModuleId, "QQuickItem"}}}};
ASSERT_THROW(storage.synchronize(
- modules,
imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -997,28 +950,25 @@ TEST_F(ProjectStorage, SynchronizeTypesThrowsForMissingPrototype)
TEST_F(ProjectStorage, SynchronizeTypesThrowsForInvalidModule)
{
sourceId1 = sourcePathCache.sourceId(path1);
- Storage::Types types{Storage::Type{ModuleId{},
- "QQuickItem",
- Storage::NativeType{"QObject"},
+ Storage::Types types{Storage::Type{"QQuickItem",
+ Storage::ImportedType{"QObject"},
TypeAccessSemantics::Reference,
sourceId1,
- {Storage::ExportedType{"Item"}}}};
+ {Storage::ExportedType{ModuleId{}, "Item"}}}};
- ASSERT_THROW(storage.synchronize({}, imports, types, {sourceId1}, {}),
+ ASSERT_THROW(storage.synchronize(imports, types, {sourceId1}, {}),
QmlDesigner::ModuleDoesNotExists);
}
TEST_F(ProjectStorage, TypeWithInvalidSourceIdThrows)
{
- Storage::Types types{Storage::Type{qtQuickModuleId,
- "QQuickItem",
- Storage::NativeType{""},
+ Storage::Types types{Storage::Type{"QQuickItem",
+ Storage::ImportedType{""},
TypeAccessSemantics::Reference,
SourceId{},
- {Storage::ExportedType{"Item"}}}};
+ {Storage::ExportedType{qtQuickModuleId, "Item"}}}};
ASSERT_THROW(storage.synchronize(
- modules,
imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -1030,100 +980,92 @@ TEST_F(ProjectStorage, DeleteTypeIfSourceIdIsSynchronized)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types.erase(types.begin());
- storage.synchronize({}, importsSourceId2, types, {sourceId1, sourceId2}, {});
+ storage.synchronize(importsSourceId2, types, {sourceId1, sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId,
- "QObject",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId2),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Object"),
- IsExportedType("Obj"))))));
+ UnorderedElementsAre(
+ AllOf(IsStorageType(sourceId2, "QObject", TypeId{}, TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qmlModuleId, "Object"),
+ IsExportedType(qmlModuleId, "Obj"),
+ IsExportedType(qmlNativeModuleId, "QObject"))))));
}
TEST_F(ProjectStorage, DontDeleteTypeIfSourceIdIsNotSynchronized)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types.pop_back();
- storage.synchronize({}, importsSourceId1, types, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, types, {sourceId1}, {});
- ASSERT_THAT(storage.fetchTypes(),
- UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId,
- "QObject",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId2),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Object"),
- IsExportedType("Obj")))),
- AllOf(IsStorageType(qtQuickModuleId,
- "QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Item"))))));
+ ASSERT_THAT(
+ storage.fetchTypes(),
+ UnorderedElementsAre(
+ AllOf(IsStorageType(sourceId2, "QObject", TypeId{}, TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qmlModuleId, "Object"),
+ IsExportedType(qmlModuleId, "Obj"),
+ IsExportedType(qmlNativeModuleId, "QObject")))),
+ AllOf(IsStorageType(sourceId1,
+ "QQuickItem",
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Item"),
+ IsExportedType(qtQuickNativeModuleId, "QQuickItem"))))));
}
TEST_F(ProjectStorage, UpdateExportedTypesIfTypeNameChanges)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].typeName = "QQuickItem2";
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
- ASSERT_THAT(storage.fetchTypes(),
- UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId,
- "QObject",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId2),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Object"),
- IsExportedType("Obj")))),
- AllOf(IsStorageType(qtQuickModuleId,
- "QQuickItem2",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Item"))))));
+ ASSERT_THAT(
+ storage.fetchTypes(),
+ UnorderedElementsAre(
+ AllOf(IsStorageType(sourceId2, "QObject", TypeId{}, TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qmlModuleId, "Object"),
+ IsExportedType(qmlModuleId, "Obj"),
+ IsExportedType(qmlNativeModuleId, "QObject")))),
+ AllOf(IsStorageType(sourceId1,
+ "QQuickItem2",
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Item"),
+ IsExportedType(qtQuickNativeModuleId, "QQuickItem"))))));
}
TEST_F(ProjectStorage, BreakingPrototypeChainByDeletingBaseComponentThrows)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types.pop_back();
- ASSERT_THROW(storage.synchronize({}, importsSourceId1, types, {sourceId1, sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize(importsSourceId1, types, {sourceId1, sourceId2}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
@@ -1132,7 +1074,6 @@ TEST_F(ProjectStorage, SynchronizeTypesAddPropertyDeclarations)
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -1140,19 +1081,18 @@ TEST_F(ProjectStorage, SynchronizeTypesAddPropertyDeclarations)
ASSERT_THAT(storage.fetchTypes(),
Contains(
- AllOf(IsStorageType(qtQuickModuleId,
+ AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration(
"children",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly))))));
}
@@ -1162,8 +1102,7 @@ TEST_F(ProjectStorage, SynchronizeTypesAddPropertyDeclarationsWithMissingImports
Storage::Types types{createTypes()};
types[0].propertyDeclarations.pop_back();
- ASSERT_THROW(storage.synchronize(modules,
- {},
+ ASSERT_THROW(storage.synchronize({},
types,
{sourceId1,
sourceId2,
@@ -1178,14 +1117,13 @@ TEST_F(ProjectStorage, SynchronizeTypesAddPropertyDeclarationsWithMissingImports
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].propertyDeclarations[0].typeName = Storage::ImportedType{"Obj"};
- ASSERT_THROW(storage.synchronize({}, {}, {types[0]}, {sourceId1}, {}),
+ ASSERT_THROW(storage.synchronize({}, {types[0]}, {sourceId1}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
@@ -1193,16 +1131,14 @@ TEST_F(ProjectStorage, SynchronizeTypesAddPropertyDeclarationQualifiedType)
{
Storage::Types types{createTypes()};
types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{
- "Object", Storage::Import{"QtQuick", Storage::Version{}, sourceId1}};
- types.push_back(Storage::Type{qtQuickModuleId,
- "QQuickObject",
- Storage::NativeType{"QObject"},
+ "Object", Storage::Import{qtQuickModuleId, Storage::Version{}, sourceId1}};
+ types.push_back(Storage::Type{"QQuickObject",
+ Storage::ImportedType{"QObject"},
TypeAccessSemantics::Reference,
sourceId1,
- {Storage::ExportedType{"Object"}}});
+ {Storage::ExportedType{qtQuickModuleId, "Object"}}});
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -1210,19 +1146,18 @@ TEST_F(ProjectStorage, SynchronizeTypesAddPropertyDeclarationQualifiedType)
ASSERT_THAT(storage.fetchTypes(),
Contains(
- AllOf(IsStorageType(qtQuickModuleId,
+ AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("data",
- Storage::NativeType{"QQuickObject"},
+ fetchTypeId(sourceId1, "QQuickObject"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration(
"children",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly))))));
}
@@ -1231,29 +1166,27 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesPropertyDeclarationType)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- types[0].propertyDeclarations[0].typeName = Storage::NativeType{"QQuickItem"};
+ types[0].propertyDeclarations[0].typeName = Storage::ImportedType{"QQuickItem"};
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
Contains(
- AllOf(IsStorageType(qtQuickModuleId,
+ AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("data",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration(
"children",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly))))));
}
@@ -1262,30 +1195,28 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesDeclarationTraits)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].propertyDeclarations[0].traits = Storage::PropertyDeclarationTraits::IsPointer;
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
Contains(
- AllOf(IsStorageType(qtQuickModuleId,
+ AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsPointer),
IsPropertyDeclaration(
"children",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly))))));
}
@@ -1294,31 +1225,29 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesDeclarationTraitsAndType)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].propertyDeclarations[0].traits = Storage::PropertyDeclarationTraits::IsPointer;
- types[0].propertyDeclarations[0].typeName = Storage::NativeType{"QQuickItem"};
+ types[0].propertyDeclarations[0].typeName = Storage::ImportedType{"QQuickItem"};
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
Contains(
- AllOf(IsStorageType(qtQuickModuleId,
+ AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("data",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsPointer),
IsPropertyDeclaration(
"children",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly))))));
}
@@ -1327,25 +1256,23 @@ TEST_F(ProjectStorage, SynchronizeTypesRemovesAPropertyDeclaration)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].propertyDeclarations.pop_back();
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(IsPropertyDeclaration(
"data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
@@ -1353,36 +1280,34 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsAPropertyDeclaration)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].propertyDeclarations.push_back(
Storage::PropertyDeclaration{"object",
- Storage::NativeType{"QObject"},
+ Storage::ImportedType{"QObject"},
Storage::PropertyDeclarationTraits::IsPointer});
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(
storage.fetchTypes(),
Contains(AllOf(
- IsStorageType(qtQuickModuleId,
+ IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("object",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsPointer),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration("children",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly))))));
}
@@ -1391,30 +1316,28 @@ TEST_F(ProjectStorage, SynchronizeTypesRenameAPropertyDeclaration)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].propertyDeclarations[1].name = "objects";
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
Contains(
- AllOf(IsStorageType(qtQuickModuleId,
+ AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration(
"objects",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly))))));
}
@@ -1422,11 +1345,10 @@ TEST_F(ProjectStorage, SynchronizeTypesRenameAPropertyDeclaration)
TEST_F(ProjectStorage, UsingNonExistingNativePropertyTypeThrows)
{
Storage::Types types{createTypes()};
- types[0].propertyDeclarations[0].typeName = Storage::NativeType{"QObject2"};
+ types[0].propertyDeclarations[0].typeName = Storage::ImportedType{"QObject2"};
types.pop_back();
- ASSERT_THROW(storage.synchronize(modules,
- importsSourceId1,
+ ASSERT_THROW(storage.synchronize(importsSourceId1,
types,
{sourceId1,
sourceId2,
@@ -1443,8 +1365,7 @@ TEST_F(ProjectStorage, UsingNonExistingExportedPropertyTypeThrows)
types[0].propertyDeclarations[0].typeName = Storage::ImportedType{"QObject2"};
types.pop_back();
- ASSERT_THROW(storage.synchronize(modules,
- importsSourceId1,
+ ASSERT_THROW(storage.synchronize(importsSourceId1,
types,
{sourceId1,
sourceId2,
@@ -1459,11 +1380,10 @@ TEST_F(ProjectStorage, UsingNonExistingQualifiedExportedPropertyTypeWithWrongNam
{
Storage::Types types{createTypes()};
types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{
- "QObject2", Storage::Import{"Qml", Storage::Version{}, sourceId1}};
+ "QObject2", Storage::Import{qmlNativeModuleId, Storage::Version{}, sourceId1}};
types.pop_back();
- ASSERT_THROW(storage.synchronize(modules,
- importsSourceId1,
+ ASSERT_THROW(storage.synchronize(importsSourceId1,
types,
{sourceId1,
sourceId2,
@@ -1478,11 +1398,10 @@ TEST_F(ProjectStorage, UsingNonExistingQualifiedExportedPropertyTypeWithWrongMod
{
Storage::Types types{createTypes()};
types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{
- "QObject", Storage::Import{"QtQuick", Storage::Version{}, sourceId1}};
+ "QObject", Storage::Import{qmlModuleId, Storage::Version{}, sourceId1}};
types.pop_back();
- ASSERT_THROW(storage.synchronize(modules,
- importsSourceId1,
+ ASSERT_THROW(storage.synchronize(importsSourceId1,
types,
{sourceId1,
sourceId2,
@@ -1497,16 +1416,14 @@ TEST_F(ProjectStorage, BreakingPropertyDeclarationTypeDependencyByDeletingTypeTh
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- types[0].prototype = Storage::NativeType{};
+ types[0].prototype = Storage::ImportedType{};
types.pop_back();
- ASSERT_THROW(storage.synchronize(modules,
- importsSourceId1,
+ ASSERT_THROW(storage.synchronize(importsSourceId1,
types,
{sourceId1,
sourceId2,
@@ -1522,18 +1439,16 @@ TEST_F(ProjectStorage, SynchronizeTypesAddFunctionDeclarations)
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::functionDeclarations,
UnorderedElementsAre(Eq(types[0].functionDeclarations[0]),
Eq(types[0].functionDeclarations[1]))))));
@@ -1543,21 +1458,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationReturnType)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].functionDeclarations[1].returnTypeName = "item";
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::functionDeclarations,
UnorderedElementsAre(Eq(types[0].functionDeclarations[0]),
Eq(types[0].functionDeclarations[1]))))));
@@ -1567,21 +1480,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationName)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].functionDeclarations[1].name = "name";
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::functionDeclarations,
UnorderedElementsAre(Eq(types[0].functionDeclarations[0]),
Eq(types[0].functionDeclarations[1]))))));
@@ -1591,21 +1502,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationPopParameters)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].functionDeclarations[1].parameters.pop_back();
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::functionDeclarations,
UnorderedElementsAre(Eq(types[0].functionDeclarations[0]),
Eq(types[0].functionDeclarations[1]))))));
@@ -1615,21 +1524,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationAppendParameter
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].functionDeclarations[1].parameters.push_back(Storage::ParameterDeclaration{"arg4", "int"});
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::functionDeclarations,
UnorderedElementsAre(Eq(types[0].functionDeclarations[0]),
Eq(types[0].functionDeclarations[1]))))));
@@ -1639,21 +1546,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationChangeParameter
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].functionDeclarations[1].parameters[0].name = "other";
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::functionDeclarations,
UnorderedElementsAre(Eq(types[0].functionDeclarations[0]),
Eq(types[0].functionDeclarations[1]))))));
@@ -1663,21 +1568,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationChangeParameter
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].functionDeclarations[1].parameters[0].name = "long long";
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::functionDeclarations,
UnorderedElementsAre(Eq(types[0].functionDeclarations[0]),
Eq(types[0].functionDeclarations[1]))))));
@@ -1687,21 +1590,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationChangeParameter
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].functionDeclarations[1].parameters[0].traits = QmlDesigner::Storage::PropertyDeclarationTraits::IsList;
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::functionDeclarations,
UnorderedElementsAre(Eq(types[0].functionDeclarations[0]),
Eq(types[0].functionDeclarations[1]))))));
@@ -1711,21 +1612,19 @@ TEST_F(ProjectStorage, SynchronizeTypesRemovesFunctionDeclaration)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].functionDeclarations.pop_back();
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::functionDeclarations,
UnorderedElementsAre(Eq(types[0].functionDeclarations[0]))))));
}
@@ -1734,7 +1633,6 @@ TEST_F(ProjectStorage, SynchronizeTypesAddFunctionDeclaration)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -1742,14 +1640,13 @@ TEST_F(ProjectStorage, SynchronizeTypesAddFunctionDeclaration)
types[0].functionDeclarations.push_back(
Storage::FunctionDeclaration{"name", "string", {Storage::ParameterDeclaration{"arg", "int"}}});
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::functionDeclarations,
UnorderedElementsAre(Eq(types[0].functionDeclarations[0]),
Eq(types[0].functionDeclarations[1]),
@@ -1761,18 +1658,16 @@ TEST_F(ProjectStorage, SynchronizeTypesAddSignalDeclarations)
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::signalDeclarations,
UnorderedElementsAre(Eq(types[0].signalDeclarations[0]),
Eq(types[0].signalDeclarations[1]))))));
@@ -1782,21 +1677,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationName)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].signalDeclarations[1].name = "name";
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::signalDeclarations,
UnorderedElementsAre(Eq(types[0].signalDeclarations[0]),
Eq(types[0].signalDeclarations[1]))))));
@@ -1806,21 +1699,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationPopParameters)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].signalDeclarations[1].parameters.pop_back();
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::signalDeclarations,
UnorderedElementsAre(Eq(types[0].signalDeclarations[0]),
Eq(types[0].signalDeclarations[1]))))));
@@ -1830,21 +1721,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationAppendParameters)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].signalDeclarations[1].parameters.push_back(Storage::ParameterDeclaration{"arg4", "int"});
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::signalDeclarations,
UnorderedElementsAre(Eq(types[0].signalDeclarations[0]),
Eq(types[0].signalDeclarations[1]))))));
@@ -1854,21 +1743,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationChangeParameterNa
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].signalDeclarations[1].parameters[0].name = "other";
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::signalDeclarations,
UnorderedElementsAre(Eq(types[0].signalDeclarations[0]),
Eq(types[0].signalDeclarations[1]))))));
@@ -1878,21 +1765,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationChangeParameterTy
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].signalDeclarations[1].parameters[0].typeName = "long long";
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::signalDeclarations,
UnorderedElementsAre(Eq(types[0].signalDeclarations[0]),
Eq(types[0].signalDeclarations[1]))))));
@@ -1902,21 +1787,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationChangeParameterTr
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].signalDeclarations[1].parameters[0].traits = QmlDesigner::Storage::PropertyDeclarationTraits::IsList;
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::signalDeclarations,
UnorderedElementsAre(Eq(types[0].signalDeclarations[0]),
Eq(types[0].signalDeclarations[1]))))));
@@ -1926,21 +1809,19 @@ TEST_F(ProjectStorage, SynchronizeTypesRemovesSignalDeclaration)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].signalDeclarations.pop_back();
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::signalDeclarations,
UnorderedElementsAre(Eq(types[0].signalDeclarations[0]))))));
}
@@ -1949,7 +1830,6 @@ TEST_F(ProjectStorage, SynchronizeTypesAddSignalDeclaration)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -1957,14 +1837,13 @@ TEST_F(ProjectStorage, SynchronizeTypesAddSignalDeclaration)
types[0].signalDeclarations.push_back(
Storage::SignalDeclaration{"name", {Storage::ParameterDeclaration{"arg", "int"}}});
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::signalDeclarations,
UnorderedElementsAre(Eq(types[0].signalDeclarations[0]),
Eq(types[0].signalDeclarations[1]),
@@ -1976,18 +1855,16 @@ TEST_F(ProjectStorage, SynchronizeTypesAddEnumerationDeclarations)
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::enumerationDeclarations,
UnorderedElementsAre(Eq(types[0].enumerationDeclarations[0]),
Eq(types[0].enumerationDeclarations[1]))))));
@@ -1997,21 +1874,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationName)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].enumerationDeclarations[1].name = "Name";
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::enumerationDeclarations,
UnorderedElementsAre(Eq(types[0].enumerationDeclarations[0]),
Eq(types[0].enumerationDeclarations[1]))))));
@@ -2021,21 +1896,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationPopEnumerato
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].enumerationDeclarations[1].enumeratorDeclarations.pop_back();
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::enumerationDeclarations,
UnorderedElementsAre(Eq(types[0].enumerationDeclarations[0]),
Eq(types[0].enumerationDeclarations[1]))))));
@@ -2045,7 +1918,6 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationAppendEnumer
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -2053,14 +1925,13 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationAppendEnumer
types[0].enumerationDeclarations[1].enumeratorDeclarations.push_back(
Storage::EnumeratorDeclaration{"Haa", 54});
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::enumerationDeclarations,
UnorderedElementsAre(Eq(types[0].enumerationDeclarations[0]),
Eq(types[0].enumerationDeclarations[1]))))));
@@ -2070,21 +1941,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationChangeEnumer
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].enumerationDeclarations[1].enumeratorDeclarations[0].name = "Hoo";
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::enumerationDeclarations,
UnorderedElementsAre(Eq(types[0].enumerationDeclarations[0]),
Eq(types[0].enumerationDeclarations[1]))))));
@@ -2094,21 +1963,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationChangeEnumer
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].enumerationDeclarations[1].enumeratorDeclarations[1].value = 11;
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::enumerationDeclarations,
UnorderedElementsAre(Eq(types[0].enumerationDeclarations[0]),
Eq(types[0].enumerationDeclarations[1]))))));
@@ -2119,7 +1986,6 @@ TEST_F(ProjectStorage,
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -2127,14 +1993,13 @@ TEST_F(ProjectStorage,
types[0].enumerationDeclarations[1].enumeratorDeclarations[0].value = 11;
types[0].enumerationDeclarations[1].enumeratorDeclarations[0].hasValue = true;
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::enumerationDeclarations,
UnorderedElementsAre(Eq(types[0].enumerationDeclarations[0]),
Eq(types[0].enumerationDeclarations[1]))))));
@@ -2145,21 +2010,19 @@ TEST_F(ProjectStorage,
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].enumerationDeclarations[1].enumeratorDeclarations[0].hasValue = false;
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::enumerationDeclarations,
UnorderedElementsAre(Eq(types[0].enumerationDeclarations[0]),
Eq(types[0].enumerationDeclarations[1]))))));
@@ -2169,21 +2032,19 @@ TEST_F(ProjectStorage, SynchronizeTypesRemovesEnumerationDeclaration)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].enumerationDeclarations.pop_back();
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::enumerationDeclarations,
UnorderedElementsAre(Eq(types[0].enumerationDeclarations[0]))))));
}
@@ -2192,7 +2053,6 @@ TEST_F(ProjectStorage, SynchronizeTypesAddEnumerationDeclaration)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -2200,203 +2060,29 @@ TEST_F(ProjectStorage, SynchronizeTypesAddEnumerationDeclaration)
types[0].enumerationDeclarations.push_back(
Storage::EnumerationDeclaration{"name", {Storage::EnumeratorDeclaration{"Foo", 98, true}}});
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::enumerationDeclarations,
UnorderedElementsAre(Eq(types[0].enumerationDeclarations[0]),
Eq(types[0].enumerationDeclarations[1]),
Eq(types[0].enumerationDeclarations[2]))))));
}
-TEST_F(ProjectStorage, SynchronizeModulesAddModules)
-{
- Storage::Modules modules{createModules()};
-
- storage.synchronize(modules, {}, {}, {qmlModuleSourceId, qtQuickModuleSourceId, moduleSourceId5}, {});
-
- ASSERT_THAT(storage.fetchAllModules(),
- UnorderedElementsAre(IsModule("Qml", qmlModuleSourceId),
- IsModule("QtQuick", qtQuickModuleSourceId),
- IsModule("/path/to", pathToModuleSourceId)));
-}
-
-TEST_F(ProjectStorage, SynchronizeModulesAddModulesAgain)
-{
- Storage::Modules modules{createModules()};
- storage.synchronize(modules,
- {},
- {},
- {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
- {});
-
- storage.synchronize(modules,
- {},
- {},
- {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
- {});
-
- ASSERT_THAT(storage.fetchAllModules(),
- UnorderedElementsAre(IsModule("Qml", qmlModuleSourceId),
- IsModule("QtQuick", qtQuickModuleSourceId),
- IsModule("/path/to", pathToModuleSourceId)));
-}
-
-TEST_F(ProjectStorage, SynchronizeModulesUpdateToMoreModules)
-{
- Storage::Modules modules{createModules()};
- storage.synchronize(modules,
- {},
- {},
- {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
- {});
- modules.push_back(Storage::Module{"QtQuick.Foo", moduleSourceId4});
-
- storage.synchronize(modules,
- {},
- {},
- {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId, moduleSourceId4},
- {});
-
- ASSERT_THAT(storage.fetchAllModules(),
- UnorderedElementsAre(IsModule("Qml", qmlModuleSourceId),
- IsModule("QtQuick", qtQuickModuleSourceId),
- IsModule("/path/to", pathToModuleSourceId),
- IsModule("QtQuick.Foo", moduleSourceId4)));
-}
-
-TEST_F(ProjectStorage, SynchronizeModulesAddOneMoreModules)
-{
- Storage::Modules modules{createModules()};
- storage.synchronize(modules,
- {},
- {},
- {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
- {});
- auto newModule = Storage::Module{"QtQuick.Foo", moduleSourceId4};
-
- storage.synchronize({newModule}, {}, {}, {moduleSourceId4}, {});
-
- ASSERT_THAT(storage.fetchAllModules(),
- UnorderedElementsAre(IsModule("Qml", qmlModuleSourceId),
- IsModule("QtQuick", qtQuickModuleSourceId),
- IsModule("/path/to", pathToModuleSourceId),
- IsModule("QtQuick.Foo", moduleSourceId4)));
-}
-
-TEST_F(ProjectStorage, SynchronizeModulesRemoveModule)
-{
- Storage::Modules modules{createModules()};
- storage.synchronize(modules,
- {},
- {},
- {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
- {});
-
- storage.synchronize({}, {}, {}, {pathToModuleSourceId}, {});
-
- ASSERT_THAT(storage.fetchAllModules(),
- UnorderedElementsAre(IsModule("Qml", qmlModuleSourceId),
- IsModule("QtQuick", qtQuickModuleSourceId)));
-}
-
-TEST_F(ProjectStorage, SynchronizeModulesChangeSourceId)
-{
- Storage::Modules modules{createModules()};
- storage.synchronize(modules,
- {},
- {},
- {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
- {});
- modules[1].sourceId = moduleSourceId4;
-
- storage.synchronize({modules[1]}, {}, {}, {qtQuickModuleSourceId, moduleSourceId4}, {});
-
- ASSERT_THAT(storage.fetchAllModules(),
- UnorderedElementsAre(IsModule("Qml", qmlModuleSourceId),
- IsModule("QtQuick", moduleSourceId4),
- IsModule("/path/to", pathToModuleSourceId)));
-}
-
-TEST_F(ProjectStorage, SynchronizeModulesChangeName)
-{
- Storage::Modules modules{createModules()};
- storage.synchronize(modules,
- {},
- {},
- {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
- {});
- modules[0].name = "Qml2";
-
- storage.synchronize(modules,
- {},
- {},
- {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
- {});
-
- ASSERT_THAT(storage.fetchAllModules(),
- UnorderedElementsAre(IsModule("Qml2", qmlModuleSourceId),
- IsModule("QtQuick", qtQuickModuleSourceId),
- IsModule("/path/to", pathToModuleSourceId)));
-}
-
-TEST_F(ProjectStorage, RemovingModuleRemovesDependentTypesToo)
+TEST_F(ProjectStorage, FetchTypeIdBySourceIdAndName)
{
Storage::Types types{createTypes()};
- types[0].prototype = Storage::NativeType{""};
- types[0].propertyDeclarations.clear();
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- storage.synchronize({}, {}, {}, {qtQuickModuleSourceId, pathToModuleSourceId}, {});
-
- ASSERT_THAT(storage.fetchTypes(),
- UnorderedElementsAre(IsStorageType(qmlModuleId,
- "QObject",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId2)));
-}
-
-TEST_F(ProjectStorage, RemovingModuleThrowsForMissingType)
-{
- Storage::Types types{createTypes()};
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId2);
- types[0].prototype = Storage::NativeType{""};
- types[0].propertyDeclarations.clear();
- types[1].prototype = Storage::ImportedType{"Item"};
- storage.synchronize(
- modules,
- imports,
- types,
- {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
- {});
-
- ASSERT_THROW(storage.synchronize({}, {}, {}, {qtQuickModuleSourceId, pathToModuleSourceId}, {}),
- QmlDesigner::TypeNameDoesNotExists);
-}
-
-TEST_F(ProjectStorage, FetchTypeIdByModuleIdAndName)
-{
- Storage::Types types{createTypes()};
- storage.synchronize(
- modules,
- imports,
- types,
- {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
- {});
- auto qmlModuleId = storage.fetchModuleId("Qml");
-
- auto typeId = storage.fetchTypeIdByName(qmlModuleId, "QObject");
+ auto typeId = storage.fetchTypeIdByName(sourceId2, "QObject");
ASSERT_THAT(storage.fetchTypeIdByExportedName("Object"), Eq(typeId));
}
@@ -2405,45 +2091,40 @@ TEST_F(ProjectStorage, FetchTypeIdByExportedName)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- auto qmlModuleId = storage.fetchModuleId("Qml");
auto typeId = storage.fetchTypeIdByExportedName("Object");
- ASSERT_THAT(storage.fetchTypeIdByName(qmlModuleId, "QObject"), Eq(typeId));
+ ASSERT_THAT(storage.fetchTypeIdByName(sourceId2, "QObject"), Eq(typeId));
}
TEST_F(ProjectStorage, FetchTypeIdByImporIdsAndExportedName)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- auto qmlModuleId = storage.fetchModuleId("Qml");
- auto qtQuickModuleId = storage.fetchModuleId("QtQuick");
auto typeId = storage.fetchTypeIdByModuleIdsAndExportedName({qmlModuleId, qtQuickModuleId},
"Object");
- ASSERT_THAT(storage.fetchTypeIdByName(qmlModuleId, "QObject"), Eq(typeId));
+ ASSERT_THAT(storage.fetchTypeIdByName(sourceId2, "QObject"), Eq(typeId));
}
TEST_F(ProjectStorage, FetchInvalidTypeIdByImporIdsAndExportedNameIfModuleIdsAreEmpty)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
+
auto typeId = storage.fetchTypeIdByModuleIdsAndExportedName({}, "Object");
ASSERT_FALSE(typeId.isValid());
@@ -2453,11 +2134,11 @@ TEST_F(ProjectStorage, FetchInvalidTypeIdByImporIdsAndExportedNameIfModuleIdsAre
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
+
auto typeId = storage.fetchTypeIdByModuleIdsAndExportedName({ModuleId{}}, "Object");
ASSERT_FALSE(typeId.isValid());
@@ -2467,12 +2148,12 @@ TEST_F(ProjectStorage, FetchInvalidTypeIdByImporIdsAndExportedNameIfNotInModule)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- auto qtQuickModuleId = storage.fetchModuleId("QtQuick");
+ auto qtQuickModuleId = storage.moduleId("QtQuick");
+
auto typeId = storage.fetchTypeIdByModuleIdsAndExportedName({qtQuickModuleId}, "Object");
ASSERT_FALSE(typeId.isValid());
@@ -2482,8 +2163,7 @@ TEST_F(ProjectStorage, SynchronizeTypesAddAliasDeclarations)
{
Storage::Types types{createTypesWithAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -2496,30 +2176,28 @@ TEST_F(ProjectStorage, SynchronizeTypesAddAliasDeclarations)
ASSERT_THAT(storage.fetchTypes(),
Contains(AllOf(
- IsStorageType(qtQuickModuleId,
+ IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
TEST_F(ProjectStorage, SynchronizeTypesAddAliasDeclarationsAgain)
{
Storage::Types types{createTypesWithAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -2530,8 +2208,7 @@ TEST_F(ProjectStorage, SynchronizeTypesAddAliasDeclarationsAgain)
pathToModuleSourceId},
{});
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -2544,30 +2221,28 @@ TEST_F(ProjectStorage, SynchronizeTypesAddAliasDeclarationsAgain)
ASSERT_THAT(storage.fetchTypes(),
Contains(AllOf(
- IsStorageType(qtQuickModuleId,
+ IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
TEST_F(ProjectStorage, SynchronizeTypesRemoveAliasDeclarations)
{
Storage::Types types{createTypesWithAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -2579,32 +2254,31 @@ TEST_F(ProjectStorage, SynchronizeTypesRemoveAliasDeclarations)
{});
types[2].propertyDeclarations.pop_back();
- storage.synchronize({}, importsSourceId3, {types[2]}, {sourceId3}, {});
+ storage.synchronize(importsSourceId3, {types[2]}, {sourceId3}, {});
ASSERT_THAT(storage.fetchTypes(),
Contains(AllOf(
- IsStorageType(qtQuickModuleId,
+ IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
TEST_F(ProjectStorage, SynchronizeTypesAddAliasDeclarationsThrowsForWrongTypeName)
{
Storage::Types types{createTypesWithAliases()};
- types[2].propertyDeclarations[1].typeName = Storage::NativeType{"QQuickItemWrong"};
+ types[2].propertyDeclarations[1].typeName = Storage::ImportedType{"QQuickItemWrong"};
- ASSERT_THROW(storage.synchronize(modules, importsSourceId4, {types[2]}, {sourceId4}, {}),
+ ASSERT_THROW(storage.synchronize(importsSourceId4, {types[2]}, {sourceId4}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
TEST_F(ProjectStorage, SynchronizeTypesAddAliasDeclarationsThrowsForWrongPropertyName)
@@ -2612,15 +2286,14 @@ TEST_F(ProjectStorage, SynchronizeTypesAddAliasDeclarationsThrowsForWrongPropert
Storage::Types types{createTypesWithAliases()};
types[2].propertyDeclarations[1].aliasPropertyName = "childrenWrong";
- ASSERT_THROW(storage.synchronize(modules, imports, types, {sourceId4}, {}),
+ ASSERT_THROW(storage.synchronize(imports, types, {sourceId4}, {}),
QmlDesigner::PropertyNameDoesNotExists);
}
TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsTypeName)
{
Storage::Types types{createTypesWithAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -2631,36 +2304,34 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsTypeName)
pathToModuleSourceId},
{});
types[2].propertyDeclarations[2].typeName = Storage::ImportedType{"Obj2"};
- importsSourceId3.emplace_back("/path/to", Storage::Version{}, sourceId3);
+ importsSourceId3.emplace_back(pathToModuleId, Storage::Version{}, sourceId3);
- storage.synchronize({}, importsSourceId3, {types[2]}, {sourceId3}, {});
+ storage.synchronize(importsSourceId3, {types[2]}, {sourceId3}, {});
ASSERT_THAT(storage.fetchTypes(),
Contains(AllOf(
- IsStorageType(qtQuickModuleId,
+ IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsPropertyName)
{
Storage::Types types{createTypesWithAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -2672,36 +2343,34 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsPropertyName)
{});
types[2].propertyDeclarations[2].aliasPropertyName = "children";
- storage.synchronize({}, importsSourceId3, {types[2]}, {sourceId3}, {});
+ storage.synchronize(importsSourceId3, {types[2]}, {sourceId3}, {});
ASSERT_THAT(
storage.fetchTypes(),
Contains(
- AllOf(IsStorageType(qtQuickModuleId,
+ AllOf(IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsToPropertyDeclaration)
{
Storage::Types types{createTypesWithAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -2714,32 +2383,31 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsToPropertyDeclarat
types[2].propertyDeclarations.pop_back();
types[2].propertyDeclarations.push_back(
Storage::PropertyDeclaration{"objects",
- Storage::NativeType{"QQuickItem"},
+ Storage::ImportedType{"QQuickItem"},
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly});
- storage.synchronize({}, importsSourceId3, {types[2]}, {sourceId3}, {});
+ storage.synchronize(importsSourceId3, {types[2]}, {sourceId3}, {});
ASSERT_THAT(
storage.fetchTypes(),
Contains(
- AllOf(IsStorageType(qtQuickModuleId,
+ AllOf(IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
@@ -2750,11 +2418,10 @@ TEST_F(ProjectStorage, SynchronizeTypesChangePropertyDeclarationsToAliasDeclarat
typesChanged[2].propertyDeclarations.pop_back();
typesChanged[2].propertyDeclarations.push_back(
Storage::PropertyDeclaration{"objects",
- Storage::NativeType{"QQuickItem"},
+ Storage::ImportedType{"QQuickItem"},
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly});
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
typesChanged,
{sourceId1,
sourceId2,
@@ -2765,34 +2432,32 @@ TEST_F(ProjectStorage, SynchronizeTypesChangePropertyDeclarationsToAliasDeclarat
pathToModuleSourceId},
{});
- storage.synchronize({}, imports, types, {sourceId1, sourceId2, sourceId3, sourceId4}, {});
+ storage.synchronize(imports, types, {sourceId1, sourceId2, sourceId3, sourceId4}, {});
ASSERT_THAT(storage.fetchTypes(),
Contains(AllOf(
- IsStorageType(qtQuickModuleId,
+ IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
TEST_F(ProjectStorage, SynchronizeTypesChangeAliasTargetPropertyDeclarationTraits)
{
Storage::Types types{createTypesWithAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -2805,36 +2470,34 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasTargetPropertyDeclarationTrait
types[1].propertyDeclarations[0].traits = Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly;
- storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {});
+ storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {});
ASSERT_THAT(
storage.fetchTypes(),
Contains(
- AllOf(IsStorageType(qtQuickModuleId,
+ AllOf(IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
TEST_F(ProjectStorage, SynchronizeTypesChangeAliasTargetPropertyDeclarationTypeName)
{
Storage::Types types{createTypesWithAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -2845,36 +2508,34 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasTargetPropertyDeclarationTypeN
pathToModuleSourceId},
{});
types[1].propertyDeclarations[0].typeName = Storage::ImportedType{"Item"};
- importsSourceId2.emplace_back("QtQuick", Storage::Version{}, sourceId2);
+ importsSourceId2.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId2);
- storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {});
+ storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
Contains(AllOf(
- IsStorageType(qtQuickModuleId,
+ IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
TEST_F(ProjectStorage, SynchronizeTypesRemovePropertyDeclarationWithAnAliasThrows)
{
Storage::Types types{createTypesWithAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -2886,15 +2547,14 @@ TEST_F(ProjectStorage, SynchronizeTypesRemovePropertyDeclarationWithAnAliasThrow
{});
types[1].propertyDeclarations.pop_back();
- ASSERT_THROW(storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {}),
Sqlite::ConstraintPreventsModification);
}
TEST_F(ProjectStorage, SynchronizeTypesRemovePropertyDeclarationAndAlias)
{
Storage::Types types{createTypesWithAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -2907,27 +2567,25 @@ TEST_F(ProjectStorage, SynchronizeTypesRemovePropertyDeclarationAndAlias)
types[1].propertyDeclarations.pop_back();
types[2].propertyDeclarations.pop_back();
- storage.synchronize({},
- importsSourceId2 + importsSourceId3,
+ storage.synchronize(importsSourceId2 + importsSourceId3,
{types[1], types[2]},
{sourceId2, sourceId3},
{});
ASSERT_THAT(storage.fetchTypes(),
Contains(AllOf(
- IsStorageType(qtQuickModuleId,
+ IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
@@ -2935,9 +2593,8 @@ TEST_F(ProjectStorage, SynchronizeTypesRemoveTypeWithAliasTargetPropertyDeclarat
{
Storage::Types types{createTypesWithAliases()};
types[2].propertyDeclarations[2].typeName = Storage::ImportedType{"Object2"};
- imports.emplace_back("/path/to", Storage::Version{}, sourceId3);
- storage.synchronize(modules,
- imports,
+ imports.emplace_back(pathToModuleId, Storage::Version{}, sourceId3);
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -2948,16 +2605,15 @@ TEST_F(ProjectStorage, SynchronizeTypesRemoveTypeWithAliasTargetPropertyDeclarat
pathToModuleSourceId},
{});
- ASSERT_THROW(storage.synchronize({}, {}, {}, {sourceId4}, {}), QmlDesigner::TypeNameDoesNotExists);
+ ASSERT_THROW(storage.synchronize({}, {}, {sourceId4}, {}), QmlDesigner::TypeNameDoesNotExists);
}
TEST_F(ProjectStorage, SynchronizeTypesRemoveTypeAndAliasPropertyDeclaration)
{
Storage::Types types{createTypesWithAliases()};
types[2].propertyDeclarations[2].typeName = Storage::ImportedType{"Object2"};
- imports.emplace_back("/path/to", Storage::Version{}, sourceId3);
- storage.synchronize(modules,
- imports,
+ imports.emplace_back(pathToModuleId, Storage::Version{}, sourceId3);
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -2969,35 +2625,32 @@ TEST_F(ProjectStorage, SynchronizeTypesRemoveTypeAndAliasPropertyDeclaration)
{});
types[2].propertyDeclarations.pop_back();
- storage.synchronize({},
- importsSourceId1 + importsSourceId3,
+ storage.synchronize(importsSourceId1 + importsSourceId3,
{types[0], types[2]},
{sourceId1, sourceId3},
{});
ASSERT_THAT(storage.fetchTypes(),
Contains(AllOf(
- IsStorageType(qtQuickModuleId,
+ IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
TEST_F(ProjectStorage, UpdateAliasPropertyIfPropertyIsOverloaded)
{
Storage::Types types{createTypesWithAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3009,32 +2662,31 @@ TEST_F(ProjectStorage, UpdateAliasPropertyIfPropertyIsOverloaded)
{});
types[0].propertyDeclarations.push_back(
Storage::PropertyDeclaration{"objects",
- Storage::NativeType{"QQuickItem"},
+ Storage::ImportedType{"QQuickItem"},
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly});
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(
storage.fetchTypes(),
Contains(
- AllOf(IsStorageType(qtQuickModuleId,
+ AllOf(IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
@@ -3043,12 +2695,11 @@ TEST_F(ProjectStorage, AliasPropertyIsOverloaded)
Storage::Types types{createTypesWithAliases()};
types[0].propertyDeclarations.push_back(
Storage::PropertyDeclaration{"objects",
- Storage::NativeType{"QQuickItem"},
+ Storage::ImportedType{"QQuickItem"},
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly});
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3062,23 +2713,22 @@ TEST_F(ProjectStorage, AliasPropertyIsOverloaded)
ASSERT_THAT(
storage.fetchTypes(),
Contains(
- AllOf(IsStorageType(qtQuickModuleId,
+ AllOf(IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
@@ -3087,11 +2737,10 @@ TEST_F(ProjectStorage, UpdateAliasPropertyIfOverloadedPropertyIsRemoved)
Storage::Types types{createTypesWithAliases()};
types[0].propertyDeclarations.push_back(
Storage::PropertyDeclaration{"objects",
- Storage::NativeType{"QQuickItem"},
+ Storage::ImportedType{"QQuickItem"},
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly});
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3103,37 +2752,35 @@ TEST_F(ProjectStorage, UpdateAliasPropertyIfOverloadedPropertyIsRemoved)
{});
types[0].propertyDeclarations.pop_back();
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
Contains(AllOf(
- IsStorageType(qtQuickModuleId,
+ IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
TEST_F(ProjectStorage, RelinkAliasProperty)
{
Storage::Types types{createTypesWithAliases()};
- types[1].propertyDeclarations[0].typeName = Storage::NativeType{"QObject2"};
- imports.emplace_back("/path/to", Storage::Version{}, sourceId2);
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId2);
- storage.synchronize(modules,
- imports,
+ types[1].propertyDeclarations[0].typeName = Storage::ImportedType{"Object2"};
+ imports.emplace_back(pathToModuleId, Storage::Version{}, sourceId2);
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId2);
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3143,28 +2790,27 @@ TEST_F(ProjectStorage, RelinkAliasProperty)
qtQuickModuleSourceId,
pathToModuleSourceId},
{});
- types[3].moduleId = qtQuickModuleId;
+ types[3].exportedTypes[0].moduleId = qtQuickModuleId;
- storage.synchronize({}, importsSourceId4, {types[3]}, {sourceId4}, {});
+ storage.synchronize(importsSourceId4, {types[3]}, {sourceId4}, {});
ASSERT_THAT(storage.fetchTypes(),
Contains(AllOf(
- IsStorageType(qtQuickModuleId,
+ IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QObject2"},
+ fetchTypeId(sourceId4, "QObject2"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
@@ -3172,10 +2818,9 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForQualifiedImportedTypeName)
{
Storage::Types types{createTypesWithAliases()};
types[1].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{
- "Object2", Storage::Import{"/path/to", Storage::Version{}, sourceId2}};
- imports.emplace_back("/path/to", Storage::Version{}, sourceId2);
- storage.synchronize(modules,
- imports,
+ "Object2", Storage::Import{pathToModuleId, Storage::Version{}, sourceId2}};
+ imports.emplace_back(pathToModuleId, Storage::Version{}, sourceId2);
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3185,10 +2830,10 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForQualifiedImportedTypeName)
qtQuickModuleSourceId,
pathToModuleSourceId},
{});
- types[3].moduleId = qtQuickModuleId;
- importsSourceId4.emplace_back("QtQuick", Storage::Version{}, sourceId4);
+ types[3].exportedTypes[0].moduleId = qtQuickModuleId;
+ importsSourceId4.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId4);
- ASSERT_THROW(storage.synchronize({}, importsSourceId4, {types[3]}, {sourceId4}, {}),
+ ASSERT_THROW(storage.synchronize(importsSourceId4, {types[3]}, {sourceId4}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
@@ -3197,17 +2842,16 @@ TEST_F(ProjectStorage,
{
Storage::Types types{createTypesWithAliases()};
types[1].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{
- "Object2", Storage::Import{"/path/to", Storage::Version{}, sourceId2}};
- imports.emplace_back("/path/to", Storage::Version{}, sourceId2);
- types.push_back(Storage::Type{qtQuickModuleId,
- "QObject2",
- Storage::NativeType{},
+ "Object2", Storage::Import{pathToModuleId, Storage::Version{}, sourceId2}};
+ imports.emplace_back(pathToModuleId, Storage::Version{}, sourceId2);
+ types.push_back(Storage::Type{"QObject2",
+ Storage::ImportedType{},
TypeAccessSemantics::Reference,
sourceId5,
- {Storage::ExportedType{"Object2"}, Storage::ExportedType{"Obj2"}}});
+ {Storage::ExportedType{qtQuickModuleId, "Object2"},
+ Storage::ExportedType{qtQuickModuleId, "Obj2"}}});
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3221,22 +2865,21 @@ TEST_F(ProjectStorage,
ASSERT_THAT(storage.fetchTypes(),
Contains(AllOf(
- IsStorageType(qtQuickModuleId,
+ IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QObject2"},
+ fetchTypeId(sourceId4, "QObject2"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
@@ -3245,8 +2888,7 @@ TEST_F(ProjectStorage, RelinkAliasPropertyReactToTypeNameChange)
Storage::Types types{createTypesWithAliases2()};
types[2].propertyDeclarations.push_back(
Storage::PropertyDeclaration{"items", Storage::ImportedType{"Item"}, "children"});
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3258,38 +2900,35 @@ TEST_F(ProjectStorage, RelinkAliasPropertyReactToTypeNameChange)
{});
types[0].typeName = "QQuickItem2";
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
Contains(AllOf(
- IsStorageType(qtQuickModuleId,
+ IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
UnorderedElementsAre(
IsPropertyDeclaration("items",
- Storage::NativeType{"QQuickItem2"},
+ fetchTypeId(sourceId1, "QQuickItem2"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly),
IsPropertyDeclaration("objects",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList),
IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForDeletedType)
{
Storage::Types types{createTypesWithAliases()};
- types[1].propertyDeclarations[0].typeName = Storage::NativeType{"QObject2"};
- imports.emplace_back("/path/to", Storage::Version{}, sourceId2);
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId2);
-
- storage.synchronize(modules,
- imports,
+ types[1].propertyDeclarations[0].typeName = Storage::ImportedType{"Object2"};
+ imports.emplace_back(pathToModuleId, Storage::Version{}, sourceId2);
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId2);
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3299,25 +2938,24 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForDeletedType)
qtQuickModuleSourceId,
pathToModuleSourceId},
{});
- types[3].moduleId = qtQuickModuleId;
+ types[3].exportedTypes[0].moduleId = qtQuickModuleId;
- storage.synchronize({}, importsSourceId4, {types[3]}, {sourceId3, sourceId4}, {});
+ storage.synchronize(importsSourceId4, {types[3]}, {sourceId3, sourceId4}, {});
ASSERT_THAT(storage.fetchTypes(),
- Not(Contains(AllOf(IsStorageType(qtQuickModuleId,
- "QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3)))));
+ Not(Contains(IsStorageType(sourceId3,
+ "QAliasItem",
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference))));
}
TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForDeletedTypeAndPropertyType)
{
Storage::Types types{createTypesWithAliases()};
- types[1].propertyDeclarations[0].typeName = Storage::NativeType{"QObject2"};
- imports.emplace_back("/path/to", Storage::Version{}, sourceId2);
- storage.synchronize(modules,
- imports,
+ types[1].propertyDeclarations[0].typeName = Storage::ImportedType{"Object2"};
+ imports.emplace_back(pathToModuleId, Storage::Version{}, sourceId2);
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId2);
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3327,14 +2965,13 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForDeletedTypeAndPropertyType)
qtQuickModuleSourceId,
pathToModuleSourceId},
{});
- types[0].prototype = Storage::NativeType{};
- importsSourceId1.emplace_back("/path/to", Storage::Version{}, sourceId1);
- importsSourceId4.emplace_back("QtQuick", Storage::Version{}, sourceId4);
+ types[0].prototype = Storage::ImportedType{};
+ importsSourceId1.emplace_back(pathToModuleId, Storage::Version{}, sourceId1);
+ importsSourceId4.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId4);
types[0].propertyDeclarations[0].typeName = Storage::ImportedType{"Object2"};
types[3].propertyDeclarations[0].typeName = Storage::ImportedType{"Item"};
- storage.synchronize({},
- importsSourceId1 + importsSourceId4,
+ storage.synchronize(importsSourceId1 + importsSourceId4,
{types[0], types[3]},
{sourceId1, sourceId2, sourceId3, sourceId4},
{});
@@ -3345,10 +2982,9 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForDeletedTypeAndPropertyType)
TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForDeletedTypeAndPropertyTypeNameChange)
{
Storage::Types types{createTypesWithAliases()};
- types[1].propertyDeclarations[0].typeName = Storage::NativeType{"QObject2"};
- imports.emplace_back("/path/to", Storage::Version{}, sourceId2);
- storage.synchronize(modules,
- imports,
+ types[1].propertyDeclarations[0].typeName = Storage::ImportedType{"Object2"};
+ imports.emplace_back(pathToModuleId, Storage::Version{}, sourceId2);
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3358,32 +2994,29 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForDeletedTypeAndPropertyTypeName
qtQuickModuleSourceId,
pathToModuleSourceId},
{});
- types[3].moduleId = qtQuickModuleId;
- types[1].propertyDeclarations[0].typeName = Storage::NativeType{"QObject"};
- importsSourceId4.emplace_back("QtQuick", Storage::Version{}, sourceId4);
+ types[3].exportedTypes[0].moduleId = qtQuickModuleId;
+ types[1].propertyDeclarations[0].typeName = Storage::ImportedType{"QObject"};
+ importsSourceId4.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId4);
- storage.synchronize({},
- importsSourceId2 + importsSourceId4,
+ storage.synchronize(importsSourceId2 + importsSourceId4,
{types[1], types[3]},
{sourceId2, sourceId3, sourceId4},
{});
ASSERT_THAT(storage.fetchTypes(),
- Not(Contains(IsStorageType(qtQuickModuleId,
+ Not(Contains(IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3))));
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference))));
}
TEST_F(ProjectStorage, DoNotRelinkPropertyTypeDoesNotExists)
{
Storage::Types types{createTypesWithAliases()};
- types[1].propertyDeclarations[0].typeName = Storage::NativeType{"QObject2"};
- imports.emplace_back("/path/to", Storage::Version{}, sourceId2);
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId2);
- storage.synchronize(modules,
- imports,
+ types[1].propertyDeclarations[0].typeName = Storage::ImportedType{"Object2"};
+ imports.emplace_back(pathToModuleId, Storage::Version{}, sourceId2);
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId2);
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3393,18 +3026,16 @@ TEST_F(ProjectStorage, DoNotRelinkPropertyTypeDoesNotExists)
qtQuickModuleSourceId,
pathToModuleSourceId},
{});
- types.pop_back();
- ASSERT_THROW(storage.synchronize({}, {}, {}, {sourceId4}, {}), QmlDesigner::TypeNameDoesNotExists);
+ ASSERT_THROW(storage.synchronize({}, {}, {sourceId4}, {}), QmlDesigner::TypeNameDoesNotExists);
}
TEST_F(ProjectStorage, DoNotRelinkAliasPropertyTypeDoesNotExists)
{
Storage::Types types{createTypesWithAliases2()};
- types[1].propertyDeclarations[0].typeName = Storage::NativeType{"QObject2"};
- imports.emplace_back("/path/to", Storage::Version{}, sourceId2);
- storage.synchronize(modules,
- imports,
+ types[1].propertyDeclarations[0].typeName = Storage::ImportedType{"Object2"};
+ imports.emplace_back(pathToModuleId, Storage::Version{}, sourceId2);
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3415,67 +3046,62 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyTypeDoesNotExists)
pathToModuleSourceId},
{});
- ASSERT_THROW(storage.synchronize({}, {}, {}, {sourceId1}, {}), QmlDesigner::TypeNameDoesNotExists);
+ ASSERT_THROW(storage.synchronize({}, {}, {sourceId1}, {}), QmlDesigner::TypeNameDoesNotExists);
}
TEST_F(ProjectStorage, ChangePrototypeTypeName)
{
Storage::Types types{createTypesWithExportedTypeNamesOnly()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[1].typeName = "QObject3";
- storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {});
+ storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject3"},
- TypeAccessSemantics::Reference,
- sourceId1)));
+ fetchTypeId(sourceId2, "QObject3"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, ChangePrototypeTypeModuleId)
{
Storage::Types types{createTypes()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- types[1].moduleId = qtQuickModuleId;
+ types[1].exportedTypes[2].moduleId = qtQuickModuleId;
- storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {});
+ storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1)));
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference)));
}
-TEST_F(ProjectStorage, ChangeQualifiedPrototypeTypeModuleIdThows)
+TEST_F(ProjectStorage, ChangeQualifiedPrototypeTypeModuleIdThrows)
{
Storage::Types types{createTypes()};
types[0].prototype = Storage::QualifiedImportedType{"Object",
- Storage::Import{"Qml",
+ Storage::Import{qmlModuleId,
Storage::Version{},
sourceId1}};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- types[1].moduleId = qtQuickModuleId;
+ types[1].exportedTypes[0].moduleId = qtQuickModuleId;
- ASSERT_THROW(storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
@@ -3483,55 +3109,53 @@ TEST_F(ProjectStorage, ChangeQualifiedPrototypeTypeModuleId)
{
Storage::Types types{createTypes()};
types[0].prototype = Storage::QualifiedImportedType{"Object",
- Storage::Import{"Qml",
+ Storage::Import{qmlModuleId,
Storage::Version{},
sourceId1}};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- types[1].moduleId = qtQuickModuleId;
+ types[1].exportedTypes[0].moduleId = qtQuickModuleId;
types[0].prototype = Storage::QualifiedImportedType{"Object",
- Storage::Import{"QtQuick",
+ Storage::Import{qtQuickModuleId,
Storage::Version{},
sourceId1}};
- storage.synchronize({},
- importsSourceId1 + importsSourceId2,
+ storage.synchronize(importsSourceId1 + importsSourceId2,
{types[0], types[1]},
{sourceId1, sourceId2},
{});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1)));
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, ChangePrototypeTypeNameAndModuleId)
{
Storage::Types types{createTypesWithExportedTypeNamesOnly()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- types[1].moduleId = qtQuickModuleId;
+ types[1].exportedTypes[0].moduleId = qtQuickModuleId;
+ types[1].exportedTypes[1].moduleId = qtQuickModuleId;
+ types[1].exportedTypes[2].moduleId = qtQuickModuleId;
+ types[1].exportedTypes[2].name = "QObject3";
types[1].typeName = "QObject3";
- storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {});
+ storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject3"},
- TypeAccessSemantics::Reference,
- sourceId1)));
+ fetchTypeId(sourceId2, "QObject3"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, ChangePrototypeTypeNameThrowsForWrongNativePrototupeTypeName)
@@ -3539,14 +3163,14 @@ TEST_F(ProjectStorage, ChangePrototypeTypeNameThrowsForWrongNativePrototupeTypeN
Storage::Types types{createTypes()};
types[0].propertyDeclarations[0].typeName = Storage::ImportedType{"Object"};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
+ types[1].exportedTypes[2].name = "QObject3";
types[1].typeName = "QObject3";
- ASSERT_THROW(storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
@@ -3554,18 +3178,17 @@ TEST_F(ProjectStorage, ThrowForPrototypeChainCycles)
{
Storage::Types types{createTypes()};
types[1].prototype = Storage::ImportedType{"Object2"};
- types.push_back(Storage::Type{pathToModuleId,
- "QObject2",
+ types.push_back(Storage::Type{"QObject2",
Storage::ImportedType{"Item"},
TypeAccessSemantics::Reference,
sourceId3,
- {Storage::ExportedType{"Object2"}, Storage::ExportedType{"Obj2"}}});
- imports.emplace_back("/path/to", Storage::Version{}, sourceId2);
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId3);
- imports.emplace_back("/path/to", Storage::Version{}, sourceId3);
+ {Storage::ExportedType{pathToModuleId, "Object2"},
+ Storage::ExportedType{pathToModuleId, "Obj2"}}});
+ imports.emplace_back(pathToModuleId, Storage::Version{}, sourceId2);
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId3);
+ imports.emplace_back(pathToModuleId, Storage::Version{}, sourceId3);
- ASSERT_THROW(storage.synchronize(modules,
- imports,
+ ASSERT_THROW(storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3582,8 +3205,7 @@ TEST_F(ProjectStorage, ThrowForTypeIdAndPrototypeIdAreTheSame)
Storage::Types types{createTypes()};
types[1].prototype = Storage::ImportedType{"Object"};
- ASSERT_THROW(storage.synchronize(modules,
- imports,
+ ASSERT_THROW(storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3598,16 +3220,15 @@ TEST_F(ProjectStorage, ThrowForTypeIdAndPrototypeIdAreTheSameForRelinking)
{
Storage::Types types{createTypesWithExportedTypeNamesOnly()};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[1].prototype = Storage::ImportedType{"Item"};
types[1].typeName = "QObject2";
- importsSourceId2.emplace_back("QtQuick", Storage::Version{}, sourceId2);
+ importsSourceId2.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId2);
- ASSERT_THROW(storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {}),
QmlDesigner::PrototypeChainCycle);
}
@@ -3615,8 +3236,7 @@ TEST_F(ProjectStorage, RecursiveAliases)
{
Storage::Types types{createTypesWithRecursiveAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3629,23 +3249,21 @@ TEST_F(ProjectStorage, RecursiveAliases)
{});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId5,
"QAliasItem2",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId5),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
ElementsAre(IsPropertyDeclaration(
"objects",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
TEST_F(ProjectStorage, RecursiveAliasesChangePropertyType)
{
Storage::Types types{createTypesWithRecursiveAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3657,28 +3275,26 @@ TEST_F(ProjectStorage, RecursiveAliasesChangePropertyType)
pathToModuleSourceId},
{});
types[1].propertyDeclarations[0].typeName = Storage::ImportedType{"Object2"};
- importsSourceId2.emplace_back("/path/to", Storage::Version{}, sourceId2);
+ importsSourceId2.emplace_back(pathToModuleId, Storage::Version{}, sourceId2);
- storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {});
+ storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId5,
"QAliasItem2",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId5),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
ElementsAre(IsPropertyDeclaration(
"objects",
- Storage::NativeType{"QObject2"},
+ fetchTypeId(sourceId4, "QObject2"),
Storage::PropertyDeclarationTraits::IsList))))));
}
TEST_F(ProjectStorage, UpdateAliasesAfterInjectingProperty)
{
Storage::Types types{createTypesWithRecursiveAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3695,18 +3311,17 @@ TEST_F(ProjectStorage, UpdateAliasesAfterInjectingProperty)
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly});
- storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {});
+ storage.synchronize(importsSourceId1, {types[0]}, {sourceId1}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId5,
"QAliasItem2",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId5),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
ElementsAre(IsPropertyDeclaration(
"objects",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly))))));
}
@@ -3714,8 +3329,7 @@ TEST_F(ProjectStorage, UpdateAliasesAfterInjectingProperty)
TEST_F(ProjectStorage, UpdateAliasesAfterChangeAliasToProperty)
{
Storage::Types types{createTypesWithRecursiveAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3733,30 +3347,28 @@ TEST_F(ProjectStorage, UpdateAliasesAfterChangeAliasToProperty)
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly});
- storage.synchronize({}, importsSourceId3, {types[2]}, {sourceId3}, {});
+ storage.synchronize(importsSourceId3, {types[2]}, {sourceId3}, {});
ASSERT_THAT(storage.fetchTypes(),
- AllOf(Contains(AllOf(IsStorageType(qtQuickModuleId,
+ AllOf(Contains(AllOf(IsStorageType(sourceId5,
"QAliasItem2",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId5),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
ElementsAre(IsPropertyDeclaration(
"objects",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly,
"objects"))))),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId3,
"QAliasItem",
- Storage::NativeType{"QQuickItem"},
- TypeAccessSemantics::Reference,
- sourceId3),
+ fetchTypeId(sourceId1, "QQuickItem"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
ElementsAre(IsPropertyDeclaration(
"objects",
- Storage::NativeType{"QQuickItem"},
+ fetchTypeId(sourceId1, "QQuickItem"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly,
"")))))));
@@ -3767,8 +3379,7 @@ TEST_F(ProjectStorage, UpdateAliasesAfterChangePropertyToAlias)
Storage::Types types{createTypesWithRecursiveAliases()};
types[3].propertyDeclarations[0].traits = Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly;
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3782,20 +3393,19 @@ TEST_F(ProjectStorage, UpdateAliasesAfterChangePropertyToAlias)
types[1].propertyDeclarations.clear();
types[1].propertyDeclarations.push_back(
Storage::PropertyDeclaration{"objects", Storage::ImportedType{"Object2"}, "objects"});
- importsSourceId2.emplace_back("/path/to", Storage::Version{}, sourceId2);
+ importsSourceId2.emplace_back(pathToModuleId, Storage::Version{}, sourceId2);
- storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {});
+ storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId5,
"QAliasItem2",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId5),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
ElementsAre(IsPropertyDeclaration(
"objects",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList
| Storage::PropertyDeclarationTraits::IsReadOnly,
"objects"))))));
@@ -3807,10 +3417,9 @@ TEST_F(ProjectStorage, CheckForProtoTypeCycleThrows)
types[1].propertyDeclarations.clear();
types[1].propertyDeclarations.push_back(
Storage::PropertyDeclaration{"objects", Storage::ImportedType{"AliasItem2"}, "objects"});
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId2);
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId2);
- ASSERT_THROW(storage.synchronize(modules,
- imports,
+ ASSERT_THROW(storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3827,8 +3436,7 @@ TEST_F(ProjectStorage, CheckForProtoTypeCycleThrows)
TEST_F(ProjectStorage, CheckForProtoTypeCycleAfterUpdateThrows)
{
Storage::Types types{createTypesWithRecursiveAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3842,9 +3450,9 @@ TEST_F(ProjectStorage, CheckForProtoTypeCycleAfterUpdateThrows)
types[1].propertyDeclarations.clear();
types[1].propertyDeclarations.push_back(
Storage::PropertyDeclaration{"objects", Storage::ImportedType{"AliasItem2"}, "objects"});
- importsSourceId2.emplace_back("QtQuick", Storage::Version{}, sourceId2);
+ importsSourceId2.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId2);
- ASSERT_THROW(storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {}),
QmlDesigner::AliasChainCycle);
}
@@ -3852,42 +3460,38 @@ TEST_F(ProjectStorage, QualifiedPrototype)
{
Storage::Types types{createTypes()};
types[0].prototype = Storage::QualifiedImportedType{"Object",
- Storage::Import{"Qml",
+ Storage::Import{qmlModuleId,
Storage::Version{},
sourceId1}};
- types.push_back(Storage::Type{qtQuickModuleId,
- "QQuickObject",
- Storage::NativeType{},
+ types.push_back(Storage::Type{"QQuickObject",
+ Storage::ImportedType{},
TypeAccessSemantics::Reference,
sourceId3,
- {Storage::ExportedType{"Object"}}});
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId3);
+ {Storage::ExportedType{qtQuickModuleId, "Object"}}});
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId3);
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1)));
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, QualifiedPrototypeUpperDownTheModuleChainThrows)
{
Storage::Types types{createTypes()};
types[0].prototype = Storage::QualifiedImportedType{"Object",
- Storage::Import{"QtQuick",
+ Storage::Import{qtQuickModuleId,
Storage::Version{},
sourceId1}};
- ASSERT_THROW(storage.synchronize(modules,
- imports,
+ ASSERT_THROW(storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3902,49 +3506,44 @@ TEST_F(ProjectStorage, QualifiedPrototypeUpperInTheModuleChain)
{
Storage::Types types{createTypes()};
types[0].prototype = Storage::QualifiedImportedType{"Object",
- Storage::Import{"QtQuick",
+ Storage::Import{qtQuickModuleId,
Storage::Version{},
sourceId1}};
- types.push_back(Storage::Type{qtQuickModuleId,
- "QQuickObject",
- Storage::NativeType{},
+ types.push_back(Storage::Type{"QQuickObject",
+ Storage::ImportedType{},
TypeAccessSemantics::Reference,
sourceId3,
- {Storage::ExportedType{"Object"}}});
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId3);
+ {Storage::ExportedType{qtQuickModuleId, "Object"}}});
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId3);
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QQuickObject"},
- TypeAccessSemantics::Reference,
- sourceId1)));
+ fetchTypeId(sourceId3, "QQuickObject"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, QualifiedPrototypeWithWrongVersionThrows)
{
Storage::Types types{createTypes()};
types[0].prototype = Storage::QualifiedImportedType{"Object",
- Storage::Import{"Qml",
+ Storage::Import{qmlModuleId,
Storage::Version{4},
sourceId1}};
- types.push_back(Storage::Type{qtQuickModuleId,
- "QQuickObject",
- Storage::NativeType{},
+ types.push_back(Storage::Type{"QQuickObject",
+ Storage::ImportedType{},
TypeAccessSemantics::Reference,
sourceId3,
- {Storage::ExportedType{"Object"}}});
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId3);
+ {Storage::ExportedType{qtQuickModuleId, "Object"}}});
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId3);
- ASSERT_THROW(storage.synchronize(modules,
- imports,
+ ASSERT_THROW(storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -3961,27 +3560,24 @@ TEST_F(ProjectStorage, QualifiedPrototypeWithVersion)
Storage::Types types{createTypes()};
imports[0].version = Storage::Version{2};
types[0].prototype = Storage::QualifiedImportedType{"Object", imports[0]};
- types.push_back(Storage::Type{qtQuickModuleId,
- "QQuickObject",
- Storage::NativeType{},
+ types.push_back(Storage::Type{"QQuickObject",
+ Storage::ImportedType{},
TypeAccessSemantics::Reference,
sourceId3,
- {Storage::ExportedType{"Object"}}});
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId3);
+ {Storage::ExportedType{qtQuickModuleId, "Object"}}});
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId3);
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1)));
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, QualifiedPrototypeWithVersionInTheProtoTypeChain)
@@ -3990,39 +3586,36 @@ TEST_F(ProjectStorage, QualifiedPrototypeWithVersionInTheProtoTypeChain)
imports[2].version = Storage::Version{2};
types[0].prototype = Storage::QualifiedImportedType{"Object", imports[2]};
types[0].exportedTypes[0].version = Storage::Version{2};
- types.push_back(Storage::Type{qtQuickModuleId,
- "QQuickObject",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId3,
- {Storage::ExportedType{"Object", Storage::Version{2}}}});
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId3);
+ types.push_back(
+ Storage::Type{"QQuickObject",
+ Storage::ImportedType{},
+ TypeAccessSemantics::Reference,
+ sourceId3,
+ {Storage::ExportedType{qtQuickModuleId, "Object", Storage::Version{2}}}});
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId3);
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QQuickObject"},
- TypeAccessSemantics::Reference,
- sourceId1)));
+ fetchTypeId(sourceId3, "QQuickObject"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, QualifiedPrototypeWithVersionDownTheProtoTypeChainThrows)
{
Storage::Types types{createTypes()};
types[0].prototype = Storage::QualifiedImportedType{"Object",
- Storage::Import{"QtQuick",
+ Storage::Import{qtQuickModuleId,
Storage::Version{2},
sourceId1}};
- ASSERT_THROW(storage.synchronize(modules,
- imports,
+ ASSERT_THROW(storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -4038,17 +3631,15 @@ TEST_F(ProjectStorage, QualifiedPropertyDeclarationTypeName)
{
Storage::Types types{createTypes()};
types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{
- "Object", Storage::Import{"Qml", Storage::Version{}, sourceId1}};
- types.push_back(Storage::Type{qtQuickModuleId,
- "QQuickObject",
- Storage::NativeType{},
+ "Object", Storage::Import{qmlModuleId, Storage::Version{}, sourceId1}};
+ types.push_back(Storage::Type{"QQuickObject",
+ Storage::ImportedType{},
TypeAccessSemantics::Reference,
sourceId3,
- {Storage::ExportedType{"Object"}}});
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId3);
+ {Storage::ExportedType{qtQuickModuleId, "Object"}}});
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId3);
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -4058,7 +3649,7 @@ TEST_F(ProjectStorage, QualifiedPropertyDeclarationTypeName)
Contains(
Field(&Storage::Type::propertyDeclarations,
Contains(IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList)))));
}
@@ -4066,10 +3657,9 @@ TEST_F(ProjectStorage, QualifiedPropertyDeclarationTypeNameDownTheModuleChainThr
{
Storage::Types types{createTypes()};
types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{
- "Object", Storage::Import{"QtQuick", Storage::Version{}, sourceId1}};
+ "Object", Storage::Import{qtQuickModuleId, Storage::Version{}, sourceId1}};
- ASSERT_THROW(storage.synchronize(modules,
- imports,
+ ASSERT_THROW(storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -4085,17 +3675,15 @@ TEST_F(ProjectStorage, QualifiedPropertyDeclarationTypeNameInTheModuleChain)
{
Storage::Types types{createTypes()};
types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{
- "Object", Storage::Import{"QtQuick", Storage::Version{}, sourceId1}};
- types.push_back(Storage::Type{qtQuickModuleId,
- "QQuickObject",
- Storage::NativeType{},
+ "Object", Storage::Import{qtQuickModuleId, Storage::Version{}, sourceId1}};
+ types.push_back(Storage::Type{"QQuickObject",
+ Storage::ImportedType{},
TypeAccessSemantics::Reference,
sourceId3,
- {Storage::ExportedType{"Object"}}});
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId3);
+ {Storage::ExportedType{qtQuickModuleId, "Object"}}});
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId3);
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -4105,7 +3693,7 @@ TEST_F(ProjectStorage, QualifiedPropertyDeclarationTypeNameInTheModuleChain)
Contains(
Field(&Storage::Type::propertyDeclarations,
Contains(IsPropertyDeclaration("data",
- Storage::NativeType{"QQuickObject"},
+ fetchTypeId(sourceId3, "QQuickObject"),
Storage::PropertyDeclarationTraits::IsList)))));
}
@@ -4113,11 +3701,10 @@ TEST_F(ProjectStorage, QualifiedPropertyDeclarationTypeNameWithVersion)
{
Storage::Types types{createTypes()};
types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{
- "Object", Storage::Import{"Qml", Storage::Version{2}, sourceId1}};
- imports.emplace_back("Qml", Storage::Version{2}, sourceId1);
+ "Object", Storage::Import{qmlModuleId, Storage::Version{2}, sourceId1}};
+ imports.emplace_back(qmlModuleId, Storage::Version{2}, sourceId1);
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
@@ -4127,7 +3714,7 @@ TEST_F(ProjectStorage, QualifiedPropertyDeclarationTypeNameWithVersion)
Contains(
Field(&Storage::Type::propertyDeclarations,
Contains(IsPropertyDeclaration("data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList)))));
}
@@ -4135,16 +3722,15 @@ TEST_F(ProjectStorage, ChangePropertyTypeModuleIdWithQualifiedTypeThrows)
{
Storage::Types types{createTypes()};
types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{
- "Object", Storage::Import{"Qml", Storage::Version{}, sourceId1}};
+ "Object", Storage::Import{qmlModuleId, Storage::Version{}, sourceId1}};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- types[1].moduleId = qtQuickModuleId;
+ types[1].exportedTypes[0].moduleId = qtQuickModuleId;
- ASSERT_THROW(storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize(importsSourceId2, {types[1]}, {sourceId2}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
@@ -4152,30 +3738,28 @@ TEST_F(ProjectStorage, ChangePropertyTypeModuleIdWithQualifiedType)
{
Storage::Types types{createTypes()};
types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{
- "Object", Storage::Import{"Qml", Storage::Version{}, sourceId1}};
+ "Object", Storage::Import{qmlModuleId, Storage::Version{}, sourceId1}};
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{
- "Object", Storage::Import{"QtQuick", Storage::Version{}, sourceId1}};
- types[1].moduleId = qtQuickModuleId;
- imports.emplace_back("QtQuick", Storage::Version{}, sourceId2);
+ "Object", Storage::Import{qtQuickModuleId, Storage::Version{}, sourceId1}};
+ types[1].exportedTypes[0].moduleId = qtQuickModuleId;
+ imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId2);
- storage.synchronize({}, imports, types, {sourceId1, sourceId2}, {});
+ storage.synchronize(imports, types, {sourceId1, sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(qtQuickModuleId,
+ Contains(AllOf(IsStorageType(sourceId1,
"QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::propertyDeclarations,
Contains(IsPropertyDeclaration(
"data",
- Storage::NativeType{"QObject"},
+ fetchTypeId(sourceId2, "QObject"),
Storage::PropertyDeclarationTraits::IsList))))));
}
@@ -4184,7 +3768,7 @@ TEST_F(ProjectStorage, AddFileStatuses)
FileStatus fileStatus1{sourceId1, 100, 100};
FileStatus fileStatus2{sourceId2, 101, 101};
- storage.synchronize({}, {}, {}, {sourceId1, sourceId2}, {fileStatus1, fileStatus2});
+ storage.synchronize({}, {}, {sourceId1, sourceId2}, {fileStatus1, fileStatus2});
ASSERT_THAT(convert(storage.fetchAllFileStatuses()),
UnorderedElementsAre(fileStatus1, fileStatus2));
@@ -4194,9 +3778,9 @@ TEST_F(ProjectStorage, RemoveFileStatus)
{
FileStatus fileStatus1{sourceId1, 100, 100};
FileStatus fileStatus2{sourceId2, 101, 101};
- storage.synchronize({}, {}, {}, {sourceId1, sourceId2}, {fileStatus1, fileStatus2});
+ storage.synchronize({}, {}, {sourceId1, sourceId2}, {fileStatus1, fileStatus2});
- storage.synchronize({}, {}, {}, {sourceId1, sourceId2}, {fileStatus1});
+ storage.synchronize({}, {}, {sourceId1, sourceId2}, {fileStatus1});
ASSERT_THAT(convert(storage.fetchAllFileStatuses()), UnorderedElementsAre(fileStatus1));
}
@@ -4206,9 +3790,9 @@ TEST_F(ProjectStorage, UpdateFileStatus)
FileStatus fileStatus1{sourceId1, 100, 100};
FileStatus fileStatus2{sourceId2, 101, 101};
FileStatus fileStatus2b{sourceId2, 102, 102};
- storage.synchronize({}, {}, {}, {sourceId1, sourceId2}, {fileStatus1, fileStatus2});
+ storage.synchronize({}, {}, {sourceId1, sourceId2}, {fileStatus1, fileStatus2});
- storage.synchronize({}, {}, {}, {sourceId1, sourceId2}, {fileStatus1, fileStatus2b});
+ storage.synchronize({}, {}, {sourceId1, sourceId2}, {fileStatus1, fileStatus2b});
ASSERT_THAT(convert(storage.fetchAllFileStatuses()),
UnorderedElementsAre(fileStatus1, fileStatus2b));
@@ -4218,7 +3802,7 @@ TEST_F(ProjectStorage, ThrowForInvalidSourceId)
{
FileStatus fileStatus1{SourceId{}, 100, 100};
- ASSERT_THROW(storage.synchronize({}, {}, {}, {sourceId1}, {fileStatus1}),
+ ASSERT_THROW(storage.synchronize({}, {}, {sourceId1}, {fileStatus1}),
Sqlite::ConstraintPreventsModification);
}
@@ -4226,7 +3810,7 @@ TEST_F(ProjectStorage, FetchAllFileStatuses)
{
FileStatus fileStatus1{sourceId1, 100, 100};
FileStatus fileStatus2{sourceId2, 101, 101};
- storage.synchronize({}, {}, {}, {sourceId1, sourceId2}, {fileStatus1, fileStatus2});
+ storage.synchronize({}, {}, {sourceId1, sourceId2}, {fileStatus1, fileStatus2});
auto fileStatuses = convert(storage.fetchAllFileStatuses());
@@ -4237,7 +3821,7 @@ TEST_F(ProjectStorage, FetchAllFileStatusesReverse)
{
FileStatus fileStatus1{sourceId1, 100, 100};
FileStatus fileStatus2{sourceId2, 101, 101};
- storage.synchronize({}, {}, {}, {sourceId1, sourceId2}, {fileStatus2, fileStatus1});
+ storage.synchronize({}, {}, {sourceId1, sourceId2}, {fileStatus2, fileStatus1});
auto fileStatuses = convert(storage.fetchAllFileStatuses());
@@ -4248,7 +3832,7 @@ TEST_F(ProjectStorage, FetchFileStatus)
{
FileStatus fileStatus1{sourceId1, 100, 100};
FileStatus fileStatus2{sourceId2, 101, 101};
- storage.synchronize({}, {}, {}, {sourceId1, sourceId2}, {fileStatus1, fileStatus2});
+ storage.synchronize({}, {}, {sourceId1, sourceId2}, {fileStatus1, fileStatus2});
auto fileStatus = storage.fetchFileStatus(sourceId1);
@@ -4258,8 +3842,7 @@ TEST_F(ProjectStorage, FetchFileStatus)
TEST_F(ProjectStorage, SynchronizeTypesWithoutTypeName)
{
Storage::Types types{createTypesWithAliases()};
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1,
sourceId2,
@@ -4270,17 +3853,15 @@ TEST_F(ProjectStorage, SynchronizeTypesWithoutTypeName)
pathToModuleSourceId},
{});
types[3].typeName.clear();
- types[3].moduleId = ModuleId{};
types[3].prototype = Storage::ImportedType{"Object"};
- storage.synchronize({}, importsSourceId4, {types[3]}, {sourceId4}, {});
+ storage.synchronize(importsSourceId4, {types[3]}, {sourceId4}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(AllOf(IsStorageType(pathToModuleId,
+ Contains(AllOf(IsStorageType(sourceId4,
"QObject2",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId4),
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
Field(&Storage::Type::exportedTypes,
UnorderedElementsAre(IsExportedType("Object2"),
IsExportedType("Obj2"))))));
@@ -4289,125 +3870,111 @@ TEST_F(ProjectStorage, SynchronizeTypesWithoutTypeName)
TEST_F(ProjectStorage, FetchByMajorVersionForImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Type type{"Item",
Storage::ImportedType{"Object"},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
- Storage::Import import{"Qml", Storage::Version{1}, sourceId2};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
+ Storage::Import import{qmlModuleId, Storage::Version{1}, sourceId2};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, FetchByMajorVersionForQualifiedImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Import import{"Qml", Storage::Version{1}, sourceId2};
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Import import{qmlModuleId, Storage::Version{1}, sourceId2};
+ Storage::Type type{"Item",
Storage::QualifiedImportedType{"Object", import},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, FetchByMajorVersionAndMinorVersionForImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Type type{"Item",
Storage::ImportedType{"Obj"},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
- Storage::Import import{"Qml", Storage::Version{1, 2}, sourceId2};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
+ Storage::Import import{qmlModuleId, Storage::Version{1, 2}, sourceId2};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, FetchByMajorVersionAndMinorVersionForQualifiedImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Import import{"Qml", Storage::Version{1, 2}, sourceId2};
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Import import{qmlModuleId, Storage::Version{1, 2}, sourceId2};
+ Storage::Type type{"Item",
Storage::QualifiedImportedType{"Obj", import},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage,
FetchByMajorVersionAndMinorVersionForImportedTypeIfMinorVersionIsNotExportedThrows)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Type type{"Item",
Storage::ImportedType{"Object"},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
- Storage::Import import{"Qml", Storage::Version{1, 1}, sourceId2};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
+ Storage::Import import{qmlModuleId, Storage::Version{1, 1}, sourceId2};
- ASSERT_THROW(storage.synchronize({}, {import}, {type}, {sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize({import}, {type}, {sourceId2}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
@@ -4415,436 +3982,439 @@ TEST_F(ProjectStorage,
FetchByMajorVersionAndMinorVersionForQualifiedImportedTypeIfMinorVersionIsNotExportedThrows)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Import import{"Qml", Storage::Version{1, 1}, sourceId2};
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Import import{qmlModuleId, Storage::Version{1, 1}, sourceId2};
+ Storage::Type type{"Item",
Storage::QualifiedImportedType{"Object", import},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
- ASSERT_THROW(storage.synchronize({}, {import}, {type}, {sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize({import}, {type}, {sourceId2}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
TEST_F(ProjectStorage, FetchLowMinorVersionForImportedTypeThrows)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Type type{"Item",
Storage::ImportedType{"Obj"},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
- Storage::Import import{"Qml", Storage::Version{1, 1}, sourceId2};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
+ Storage::Import import{qmlModuleId, Storage::Version{1, 1}, sourceId2};
- ASSERT_THROW(storage.synchronize({}, {import}, {type}, {sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize({import}, {type}, {sourceId2}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
TEST_F(ProjectStorage, FetchLowMinorVersionForQualifiedImportedTypeThrows)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Import import{"Qml", Storage::Version{1, 1}, sourceId2};
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Import import{qmlModuleId, Storage::Version{1, 1}, sourceId2};
+ Storage::Type type{"Item",
Storage::QualifiedImportedType{"Obj", import},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
- ASSERT_THROW(storage.synchronize({}, {import}, {type}, {sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize({import}, {type}, {sourceId2}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
TEST_F(ProjectStorage, FetchHigherMinorVersionForImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Type type{"Item",
Storage::ImportedType{"Obj"},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
- Storage::Import import{"Qml", Storage::Version{1, 3}, sourceId2};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
+ Storage::Import import{qmlModuleId, Storage::Version{1, 3}, sourceId2};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, FetchHigherMinorVersionForQualifiedImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Import import{"Qml", Storage::Version{1, 3}, sourceId2};
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Import import{qmlModuleId, Storage::Version{1, 3}, sourceId2};
+ Storage::Type type{"Item",
Storage::QualifiedImportedType{"Obj", import},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, FetchDifferentMajorVersionForImportedTypeThrows)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Type type{"Item",
Storage::ImportedType{"Obj"},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
- Storage::Import import{"Qml", Storage::Version{3, 1}, sourceId2};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
+ Storage::Import import{qmlModuleId, Storage::Version{3, 1}, sourceId2};
- ASSERT_THROW(storage.synchronize({}, {import}, {type}, {sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize({import}, {type}, {sourceId2}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
TEST_F(ProjectStorage, FetchDifferentMajorVersionForQualifiedImportedTypeThrows)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Import import{"Qml", Storage::Version{3, 1}, sourceId2};
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Import import{qmlModuleId, Storage::Version{3, 1}, sourceId2};
+ Storage::Type type{"Item",
Storage::QualifiedImportedType{"Obj", import},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
- ASSERT_THROW(storage.synchronize({}, {import}, {type}, {sourceId2}, {}),
+ ASSERT_THROW(storage.synchronize({import}, {type}, {sourceId2}, {}),
QmlDesigner::TypeNameDoesNotExists);
}
TEST_F(ProjectStorage, FetchOtherTypeByDifferentVersionForImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Type type{"Item",
Storage::ImportedType{"Obj"},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
- Storage::Import import{"Qml", Storage::Version{2, 3}, sourceId2};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
+ Storage::Import import{qmlModuleId, Storage::Version{2, 3}, sourceId2};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject2"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject2"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, FetchOtherTypeByDifferentVersionForQualifiedImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Import import{"Qml", Storage::Version{2, 3}, sourceId2};
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Import import{qmlModuleId, Storage::Version{2, 3}, sourceId2};
+ Storage::Type type{"Item",
Storage::QualifiedImportedType{"Obj", import},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject2"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject2"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, FetchHighestVersionForImportWithoutVersionForImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Type type{"Item",
Storage::ImportedType{"Obj"},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
- Storage::Import import{"Qml", Storage::Version{}, sourceId2};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
+ Storage::Import import{qmlModuleId, Storage::Version{}, sourceId2};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject4"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject4"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, FetchHighestVersionForImportWithoutVersionForQualifiedImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Import import{"Qml", Storage::Version{}, sourceId2};
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Import import{qmlModuleId, Storage::Version{}, sourceId2};
+ Storage::Type type{"Item",
Storage::QualifiedImportedType{"Obj", import},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject4"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject4"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, FetchHighestVersionForImportWithMajorVersionForImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Type type{"Item",
Storage::ImportedType{"Obj"},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
- Storage::Import import{"Qml", Storage::Version{2}, sourceId2};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
+ Storage::Import import{qmlModuleId, Storage::Version{2}, sourceId2};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject3"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject3"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, FetchHighestVersionForImportWithMajorVersionForQualifiedImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Import import{"Qml", Storage::Version{2}, sourceId2};
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Import import{qmlModuleId, Storage::Version{2}, sourceId2};
+ Storage::Type type{"Item",
Storage::QualifiedImportedType{"Obj", import},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject3"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject3"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, FetchExportedTypeWithoutVersionFirstForImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Type type{"Item",
Storage::ImportedType{"BuiltInObj"},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
- Storage::Import import{"Qml", Storage::Version{}, sourceId2};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
+ Storage::Import import{qmlModuleId, Storage::Version{}, sourceId2};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, FetchExportedTypeWithoutVersionFirstForQualifiedImportedType)
{
auto types = createVersionedTypes();
- storage.synchronize(modules,
- imports,
+ storage.synchronize(imports,
types,
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Import import{"Qml", Storage::Version{}, sourceId2};
- Storage::Type type{qtQuickModuleId,
- "Item",
+ Storage::Import import{qmlModuleId, Storage::Version{}, sourceId2};
+ Storage::Type type{"Item",
Storage::QualifiedImportedType{"BuiltInObj", import},
TypeAccessSemantics::Reference,
sourceId2,
- {Storage::ExportedType{"Item", Storage::Version{}}}};
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{}}}};
- storage.synchronize({}, {import}, {type}, {sourceId2}, {});
+ storage.synchronize({import}, {type}, {sourceId2}, {});
ASSERT_THAT(storage.fetchTypes(),
- Contains(IsStorageType(qtQuickModuleId,
+ Contains(IsStorageType(sourceId2,
"Item",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId2)));
+ fetchTypeId(sourceId1, "QObject"),
+ TypeAccessSemantics::Reference)));
}
TEST_F(ProjectStorage, EnsureThatPropertiesForRemovedTypesAreNotAnymoreRelinked)
{
- Storage::Type type{qmlModuleId,
- "QObject",
- Storage::NativeType{""},
+ Storage::Type type{"QObject",
+ Storage::ImportedType{""},
TypeAccessSemantics::Reference,
sourceId1,
- {Storage::ExportedType{"Object", Storage::Version{}}},
+ {Storage::ExportedType{qmlModuleId, "Object", Storage::Version{}}},
{Storage::PropertyDeclaration{"data",
- Storage::NativeType{"QObject"},
+ Storage::ImportedType{"Object"},
Storage::PropertyDeclarationTraits::IsList}}};
- Storage::Import import{"Qml", Storage::Version{}, sourceId1};
- storage.synchronize(modules,
- {import},
+ Storage::Import import{qmlModuleId, Storage::Version{}, sourceId1};
+ storage.synchronize({import},
{type},
{sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- ASSERT_NO_THROW(storage.synchronize({}, {}, {}, {sourceId1}, {}));
+ ASSERT_NO_THROW(storage.synchronize({}, {}, {sourceId1}, {}));
}
TEST_F(ProjectStorage, EnsureThatPrototypesForRemovedTypesAreNotAnymoreRelinked)
{
auto types = createTypes();
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- ASSERT_NO_THROW(storage.synchronize({}, {}, {}, {sourceId1, sourceId2}, {}));
+ ASSERT_NO_THROW(storage.synchronize({}, {}, {sourceId1, sourceId2}, {}));
}
TEST_F(ProjectStorage, MinimalUpdates)
{
auto types = createTypes();
storage.synchronize(
- modules,
imports,
types,
{sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId},
{});
- Storage::Type quickType{qtQuickModuleId,
- "QQuickItem",
+ Storage::Type quickType{"QQuickItem",
{},
TypeAccessSemantics::Reference,
sourceId1,
- {Storage::ExportedType{"Item", Storage::Version{2, 0}}},
+ {Storage::ExportedType{qtQuickModuleId, "Item", Storage::Version{2, 0}},
+ Storage::ExportedType{qtQuickNativeModuleId, "QQuickItem"}},
{},
{},
{},
{},
Storage::ChangeLevel::Minimal};
- storage.synchronize({modules[1]}, {}, {quickType}, {qtQuickModuleSourceId}, {});
+ storage.synchronize({}, {quickType}, {}, {});
- ASSERT_THAT(storage.fetchTypes(),
- UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId,
- "QObject",
- Storage::NativeType{},
- TypeAccessSemantics::Reference,
- sourceId2),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Object"),
- IsExportedType("Obj")))),
- AllOf(IsStorageType(qtQuickModuleId,
- "QQuickItem",
- Storage::NativeType{"QObject"},
- TypeAccessSemantics::Reference,
- sourceId1),
- Field(&Storage::Type::exportedTypes,
- UnorderedElementsAre(IsExportedType("Item", 2, 0))))));
+ ASSERT_THAT(
+ storage.fetchTypes(),
+ UnorderedElementsAre(
+ AllOf(IsStorageType(sourceId2, "QObject", TypeId{}, TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qmlModuleId, "Object"),
+ IsExportedType(qmlModuleId, "Obj"),
+ IsExportedType(qmlNativeModuleId, "QObject")))),
+ AllOf(IsStorageType(sourceId1,
+ "QQuickItem",
+ fetchTypeId(sourceId2, "QObject"),
+ TypeAccessSemantics::Reference),
+ Field(&Storage::Type::exportedTypes,
+ UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Item", 2, 0),
+ IsExportedType(qtQuickNativeModuleId, "QQuickItem"))),
+ Field(&Storage::Type::propertyDeclarations, Not(IsEmpty())),
+ Field(&Storage::Type::functionDeclarations, Not(IsEmpty())),
+ Field(&Storage::Type::signalDeclarations, Not(IsEmpty())),
+ Field(&Storage::Type::enumerationDeclarations, Not(IsEmpty())))));
+}
+
+TEST_F(ProjectStorage, GetModuleId)
+{
+ auto id = storage.moduleId("Qml");
+
+ ASSERT_TRUE(id);
+}
+
+TEST_F(ProjectStorage, GetSameModuleIdAgain)
+{
+ auto initialId = storage.moduleId("Qml");
+
+ auto id = storage.moduleId("Qml");
+
+ ASSERT_THAT(id, Eq(initialId));
+}
+
+TEST_F(ProjectStorage, ModuleNameThrowsIfIdIsInvalid)
+{
+ ASSERT_THROW(storage.moduleName(ModuleId{}), QmlDesigner::ModuleDoesNotExists);
+}
+
+TEST_F(ProjectStorage, ModuleNameThrowsIfIdDoesNotExists)
+{
+ ASSERT_THROW(storage.moduleName(ModuleId{222}), QmlDesigner::ModuleDoesNotExists);
+}
+
+TEST_F(ProjectStorage, GetModuleName)
+{
+ auto id = storage.moduleId("Qml");
+
+ auto name = storage.moduleName(id);
+
+ ASSERT_THAT(name, Eq("Qml"));
+}
+
+TEST_F(ProjectStorage, PopulateModuleCache)
+{
+ auto id = storage.moduleId("Qml");
+
+ QmlDesigner::ProjectStorage<Sqlite::Database> newStorage{database, database.isInitialized()};
+
+ ASSERT_THAT(newStorage.moduleName(id), Eq("Qml"));
}
} // namespace
diff --git a/tests/unit/unittest/projectstoragemock.h b/tests/unit/unittest/projectstoragemock.h
index 6fecc58ad4..0f4c40e56e 100644
--- a/tests/unit/unittest/projectstoragemock.h
+++ b/tests/unit/unittest/projectstoragemock.h
@@ -38,13 +38,14 @@ class ProjectStorageMock : public QmlDesigner::ProjectStorageInterface
public:
MOCK_METHOD(void,
synchronize,
- (QmlDesigner::Storage::Modules modules,
- QmlDesigner::Storage::Imports imports,
+ (QmlDesigner::Storage::Imports imports,
QmlDesigner::Storage::Types types,
QmlDesigner::SourceIds sourceIds,
QmlDesigner::FileStatuses fileStatuses),
(override));
+ MOCK_METHOD(QmlDesigner::ModuleId, moduleId, (Utils::SmallStringView), (override));
+
MOCK_METHOD(QmlDesigner::FileStatus,
fetchFileStatus,
(QmlDesigner::SourceId sourceId),
diff --git a/tests/unit/unittest/projectstorageupdater-test.cpp b/tests/unit/unittest/projectstorageupdater-test.cpp
index d6a26bb109..2b70d332c7 100644
--- a/tests/unit/unittest/projectstorageupdater-test.cpp
+++ b/tests/unit/unittest/projectstorageupdater-test.cpp
@@ -42,26 +42,25 @@ namespace {
namespace Storage = QmlDesigner::Storage;
using QmlDesigner::FileStatus;
+using QmlDesigner::ModuleId;
using QmlDesigner::SourceId;
using QmlDesigner::Storage::TypeAccessSemantics;
namespace Storage = QmlDesigner::Storage;
using QmlDesigner::IdPaths;
using QmlDesigner::Storage::Version;
-MATCHER_P5(IsStorageType,
- moduleId,
+MATCHER_P4(IsStorageType,
typeName,
prototype,
accessSemantics,
sourceId,
std::string(negation ? "isn't " : "is ")
- + PrintToString(Storage::Type{moduleId, typeName, prototype, accessSemantics, sourceId}))
+ + PrintToString(Storage::Type{typeName, prototype, accessSemantics, sourceId}))
{
const Storage::Type &type = arg;
- return type.moduleId == moduleId && type.typeName == typeName
- && type.accessSemantics == accessSemantics && type.sourceId == sourceId
- && Storage::ImportedTypeName{prototype} == type.prototype;
+ return type.typeName == typeName && type.accessSemantics == accessSemantics
+ && type.sourceId == sourceId && Storage::ImportedTypeName{prototype} == type.prototype;
}
MATCHER_P3(IsPropertyDeclaration,
@@ -78,27 +77,20 @@ MATCHER_P3(IsPropertyDeclaration,
&& propertyDeclaration.traits == traits;
}
-MATCHER_P3(IsExportedType,
+MATCHER_P4(IsExportedType,
+ moduleId,
name,
majorVersion,
minorVersion,
std::string(negation ? "isn't " : "is ")
- + PrintToString(Storage::ExportedType{name,
+ + PrintToString(Storage::ExportedType{moduleId,
+ name,
Storage::Version{majorVersion, minorVersion}}))
{
const Storage::ExportedType &type = arg;
- return type.name == name && type.version == Storage::Version{majorVersion, minorVersion};
-}
-
-MATCHER_P2(IsModule,
- name,
- sourceId,
- std::string(negation ? "isn't " : "is ") + PrintToString(Storage::Module{name, sourceId}))
-{
- const Storage::Module &module = arg;
-
- return module.name == name && module.sourceId == sourceId;
+ return type.moduleId == moduleId && type.name == name
+ && type.version == Storage::Version{majorVersion, minorVersion};
}
MATCHER_P3(IsFileStatus,
@@ -154,6 +146,8 @@ public:
.WillByDefault(Return(FileStatus{qmlDocumentSourceId3, 22, 14}));
ON_CALL(projectStorageMock, fetchFileStatus(Eq(qmlDocumentSourceId3)))
.WillByDefault(Return(FileStatus{qmlDocumentSourceId3, 22, 2}));
+ ON_CALL(projectStorageMock, moduleId(Eq("Example"))).WillByDefault(Return(exampleModuleId));
+ ON_CALL(projectStorageMock, moduleId(Eq("Qml"))).WillByDefault(Return(qmlModuleId));
firstType.prototype = Storage::ImportedType{"Object"};
secondType.prototype = Storage::ImportedType{"Object2"};
@@ -203,25 +197,26 @@ protected:
SourceId qmltypesPathSourceId = sourcePathCache.sourceId("/path/example.qmltypes");
SourceId qmltypes2PathSourceId = sourcePathCache.sourceId("/path/example2.qmltypes");
SourceId qmlDirPathSourceId = sourcePathCache.sourceId("/path/qmldir");
- QmlDesigner::ModuleId exampleModuleId{&qmlDirPathSourceId};
SourceId qmlDocumentSourceId1 = sourcePathCache.sourceId("/path/First.qml");
SourceId qmlDocumentSourceId2 = sourcePathCache.sourceId("/path/First.2.qml");
SourceId qmlDocumentSourceId3 = sourcePathCache.sourceId("/path/Second.qml");
- Storage::Type objectType{exampleModuleId,
- "QObject",
+ ModuleId qmlModuleId{storage.moduleId("Qml")};
+ ModuleId exampleModuleId{storage.moduleId("Example")};
+ Storage::Type objectType{"QObject",
Storage::NativeType{},
Storage::TypeAccessSemantics::Reference,
objectTypeSourceId,
- {Storage::ExportedType{"Object"}, Storage::ExportedType{"Obj"}}};
+ {Storage::ExportedType{exampleModuleId, "Object"},
+ Storage::ExportedType{exampleModuleId, "Obj"}}};
QString qmlDocument1{"First{}"};
QString qmlDocument2{"Second{}"};
QString qmlDocument3{"Third{}"};
Storage::Type firstType;
Storage::Type secondType;
Storage::Type thirdType;
- Storage::Import import1{"Qml", Storage::Version{2, 3}, qmlDocumentSourceId1};
- Storage::Import import2{"Qml", Storage::Version{}, qmlDocumentSourceId2};
- Storage::Import import3{"Qml", Storage::Version{2}, qmlDocumentSourceId3};
+ Storage::Import import1{qmlModuleId, Storage::Version{2, 3}, qmlDocumentSourceId1};
+ Storage::Import import2{qmlModuleId, Storage::Version{}, qmlDocumentSourceId2};
+ Storage::Import import3{qmlModuleId, Storage::Version{2}, qmlDocumentSourceId3};
};
TEST_F(ProjectStorageUpdater, GetContentForQmlDirPathsIfFileStatusIsDifferent)
@@ -320,8 +315,7 @@ TEST_F(ProjectStorageUpdater, SynchronizeIsEmptyForNoChange)
ON_CALL(projectStorageMock, fetchFileStatus(Eq(qmlDirPathSourceId)))
.WillByDefault(Return(FileStatus{qmlDirPathSourceId, 21, 421}));
- EXPECT_CALL(projectStorageMock,
- synchronize(IsEmpty(), IsEmpty(), IsEmpty(), IsEmpty(), IsEmpty()));
+ EXPECT_CALL(projectStorageMock, synchronize(IsEmpty(), IsEmpty(), IsEmpty(), IsEmpty()));
updater.update();
}
@@ -330,7 +324,7 @@ TEST_F(ProjectStorageUpdater, SynchronizeQmlTypes)
{
auto qmlDirPathSourceId = sourcePathCache.sourceId("/path/qmldir");
auto qmltypesPathSourceId = sourcePathCache.sourceId("/path/example.qmltypes");
- Storage::Import import{"Qml", Storage::Version{2, 3}, qmltypesPathSourceId};
+ Storage::Import import{qmlModuleId, Storage::Version{2, 3}, qmltypesPathSourceId};
QString qmltypes{"Module {\ndependencies: []}"};
ON_CALL(fileSystemMock, contentAsQString(Eq(QString("/path/example.qmltypes"))))
.WillByDefault(Return(qmltypes));
@@ -340,9 +334,9 @@ TEST_F(ProjectStorageUpdater, SynchronizeQmlTypes)
imports.push_back(import);
});
+ EXPECT_CALL(projectStorageMock, moduleId(Eq("Example")));
EXPECT_CALL(projectStorageMock,
- synchronize(ElementsAre(IsModule("Example", qmlDirPathSourceId)),
- ElementsAre(import),
+ synchronize(ElementsAre(import),
ElementsAre(Eq(objectType)),
UnorderedElementsAre(qmlDirPathSourceId, qmltypesPathSourceId),
UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 21, 421),
@@ -366,8 +360,7 @@ TEST_F(ProjectStorageUpdater, SynchronizeQmlTypesAreEmptyIfFileDoesNotChanged)
ON_CALL(fileSystemMock, fileStatus(Eq(qmlDirPathSourceId)))
.WillByDefault(Return(FileStatus{qmlDirPathSourceId, 2, 421}));
- EXPECT_CALL(projectStorageMock,
- synchronize(IsEmpty(), IsEmpty(), IsEmpty(), IsEmpty(), IsEmpty()));
+ EXPECT_CALL(projectStorageMock, synchronize(IsEmpty(), IsEmpty(), IsEmpty(), IsEmpty()));
updater.update();
}
@@ -414,39 +407,36 @@ TEST_F(ProjectStorageUpdater, SynchronizeQmlDocuments)
"First.2.qml\nSecondType 2.1 OldSecond.qml\nSecondType 2.2 Second.qml\n"};
ON_CALL(fileSystemMock, contentAsQString(Eq(QString("/path/qmldir")))).WillByDefault(Return(qmldir));
- EXPECT_CALL(projectStorageMock,
- synchronize(ElementsAre(IsModule("Example", qmlDirPathSourceId)),
- UnorderedElementsAre(import1, import2, import3),
- UnorderedElementsAre(
- AllOf(IsStorageType(exampleModuleId,
- "First.qml",
- Storage::ImportedType{"Object"},
- TypeAccessSemantics::Reference,
- qmlDocumentSourceId1),
- Field(&Storage::Type::exportedTypes,
- ElementsAre(IsExportedType("FirstType", 1, 0)))),
- AllOf(IsStorageType(exampleModuleId,
- "First.2.qml",
- Storage::ImportedType{"Object2"},
- TypeAccessSemantics::Reference,
- qmlDocumentSourceId2),
- Field(&Storage::Type::exportedTypes,
- ElementsAre(IsExportedType("FirstType", 2, 2)))),
- AllOf(IsStorageType(exampleModuleId,
- "Second.qml",
- Storage::ImportedType{"Object3"},
- TypeAccessSemantics::Reference,
- qmlDocumentSourceId3),
- Field(&Storage::Type::exportedTypes,
- ElementsAre(IsExportedType("SecondType", 2, 2))))),
- UnorderedElementsAre(qmlDirPathSourceId,
- qmlDocumentSourceId1,
- qmlDocumentSourceId2,
- qmlDocumentSourceId3),
- UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 21, 421),
- IsFileStatus(qmlDocumentSourceId1, 22, 12),
- IsFileStatus(qmlDocumentSourceId2, 22, 13),
- IsFileStatus(qmlDocumentSourceId3, 22, 14))));
+ EXPECT_CALL(
+ projectStorageMock,
+ synchronize(UnorderedElementsAre(import1, import2, import3),
+ UnorderedElementsAre(
+ AllOf(IsStorageType("First.qml",
+ Storage::ImportedType{"Object"},
+ TypeAccessSemantics::Reference,
+ qmlDocumentSourceId1),
+ Field(&Storage::Type::exportedTypes,
+ ElementsAre(IsExportedType(exampleModuleId, "FirstType", 1, 0)))),
+ AllOf(IsStorageType("First.2.qml",
+ Storage::ImportedType{"Object2"},
+ TypeAccessSemantics::Reference,
+ qmlDocumentSourceId2),
+ Field(&Storage::Type::exportedTypes,
+ ElementsAre(IsExportedType(exampleModuleId, "FirstType", 2, 2)))),
+ AllOf(IsStorageType("Second.qml",
+ Storage::ImportedType{"Object3"},
+ TypeAccessSemantics::Reference,
+ qmlDocumentSourceId3),
+ Field(&Storage::Type::exportedTypes,
+ ElementsAre(IsExportedType(exampleModuleId, "SecondType", 2, 2))))),
+ UnorderedElementsAre(qmlDirPathSourceId,
+ qmlDocumentSourceId1,
+ qmlDocumentSourceId2,
+ qmlDocumentSourceId3),
+ UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 21, 421),
+ IsFileStatus(qmlDocumentSourceId1, 22, 12),
+ IsFileStatus(qmlDocumentSourceId2, 22, 13),
+ IsFileStatus(qmlDocumentSourceId3, 22, 14))));
updater.update();
}
@@ -461,22 +451,20 @@ TEST_F(ProjectStorageUpdater, SynchronizeQmlDocumentsDontUpdateIfUpToDate)
EXPECT_CALL(
projectStorageMock,
- synchronize(ElementsAre(IsModule("Example", qmlDirPathSourceId)),
- UnorderedElementsAre(import1, import2),
- UnorderedElementsAre(AllOf(IsStorageType(exampleModuleId,
- "First.qml",
- Storage::ImportedType{"Object"},
- TypeAccessSemantics::Reference,
- qmlDocumentSourceId1),
- Field(&Storage::Type::exportedTypes,
- ElementsAre(IsExportedType("FirstType", 1, 0)))),
- AllOf(IsStorageType(exampleModuleId,
- "First.2.qml",
- Storage::ImportedType{"Object2"},
- TypeAccessSemantics::Reference,
- qmlDocumentSourceId2),
- Field(&Storage::Type::exportedTypes,
- ElementsAre(IsExportedType("FirstType", 2, 2))))),
+ synchronize(UnorderedElementsAre(import1, import2),
+ UnorderedElementsAre(
+ AllOf(IsStorageType("First.qml",
+ Storage::ImportedType{"Object"},
+ TypeAccessSemantics::Reference,
+ qmlDocumentSourceId1),
+ Field(&Storage::Type::exportedTypes,
+ ElementsAre(IsExportedType(exampleModuleId, "FirstType", 1, 0)))),
+ AllOf(IsStorageType("First.2.qml",
+ Storage::ImportedType{"Object2"},
+ TypeAccessSemantics::Reference,
+ qmlDocumentSourceId2),
+ Field(&Storage::Type::exportedTypes,
+ ElementsAre(IsExportedType(exampleModuleId, "FirstType", 2, 2))))),
UnorderedElementsAre(qmlDirPathSourceId, qmlDocumentSourceId1, qmlDocumentSourceId2),
UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 21, 421),
IsFileStatus(qmlDocumentSourceId1, 22, 12),
@@ -485,31 +473,6 @@ TEST_F(ProjectStorageUpdater, SynchronizeQmlDocumentsDontUpdateIfUpToDate)
updater.update();
}
-TEST_F(ProjectStorageUpdater, SynchronizeModules)
-{
- SourceId qmlDirPathSourceId2 = sourcePathCache.sourceId("/path2/qmldir");
- ON_CALL(fileSystemMock, fileStatus(Eq(qmlDirPathSourceId2)))
- .WillByDefault(Return(FileStatus{qmlDirPathSourceId2, 22, 423}));
- ON_CALL(projectStorageMock, fetchFileStatus(Eq(qmlDirPathSourceId2)))
- .WillByDefault(Return(FileStatus{qmlDirPathSourceId2, 2, 421}));
- QString qmldir2{"module Example2\n"};
- ON_CALL(projectManagerMock, qtQmlDirs())
- .WillByDefault(Return(QStringList{"/path/qmldir", "/path2/qmldir"}));
- ON_CALL(fileSystemMock, contentAsQString(Eq(QString("/path2/qmldir")))).WillByDefault(Return(qmldir2));
-
- EXPECT_CALL(projectStorageMock,
- synchronize(UnorderedElementsAre(IsModule("Example", qmlDirPathSourceId),
- IsModule("Example2", qmlDirPathSourceId2)),
- _,
- _,
- _,
- UnorderedElementsAre(IsFileStatus(qmlDirPathSourceId, 21, 421),
- IsFileStatus(qmltypesPathSourceId, 21, 421),
- IsFileStatus(qmlDirPathSourceId2, 22, 423))));
-
- updater.update();
-}
-
TEST_F(ProjectStorageUpdater, UpdateQmldirDocuments)
{
QString qmldir{"module Example\nFirstType 1.1 First.qml\nFirstType 2.2 "
diff --git a/tests/unit/unittest/qmldocumentparser-test.cpp b/tests/unit/unittest/qmldocumentparser-test.cpp
index 4cadf8253d..451003ba33 100644
--- a/tests/unit/unittest/qmldocumentparser-test.cpp
+++ b/tests/unit/unittest/qmldocumentparser-test.cpp
@@ -129,7 +129,7 @@ protected:
QmlDesigner::ProjectStorage<Sqlite::Database> storage{database, database.isInitialized()};
QmlDesigner::SourcePathCache<QmlDesigner::ProjectStorage<Sqlite::Database>> sourcePathCache{
storage};
- QmlDesigner::QmlDocumentParser parser{sourcePathCache};
+ QmlDesigner::QmlDocumentParser parser{sourcePathCache, storage};
Storage::Imports imports;
SourceId qmlFileSourceId{sourcePathCache.sourceId("path/to/qmlfile.qml")};
SourceContextId qmlFileSourceContextId{sourcePathCache.sourceContextId(qmlFileSourceId)};
@@ -146,6 +146,7 @@ TEST_F(QmlDocumentParser, Prototype)
TEST_F(QmlDocumentParser, DISABLED_QualifiedPrototype)
{
+ auto exampleModuleId = storage.moduleId("Example");
auto type = parser.parse("import Example as Example\n Example.Item{}",
imports,
qmlFileSourceId,
@@ -153,7 +154,7 @@ TEST_F(QmlDocumentParser, DISABLED_QualifiedPrototype)
ASSERT_THAT(type,
HasPrototype(Storage::QualifiedImportedType(
- "Item", Storage::Import{"Example", Storage::Version{}, qmlFileSourceId})));
+ "Item", Storage::Import{exampleModuleId, Storage::Version{}, qmlFileSourceId})));
}
TEST_F(QmlDocumentParser, Properties)
@@ -171,7 +172,10 @@ TEST_F(QmlDocumentParser, Properties)
TEST_F(QmlDocumentParser, DISABLED_Imports)
{
- ModuleId fooDirectoryModuleId{&sourcePathCache.sourceId("path/to/foo/.")};
+ ModuleId fooDirectoryModuleId = storage.moduleId("path/to/foo/.");
+ ModuleId qmlModuleId = storage.moduleId("QML");
+ ModuleId qtQmlModuleId = storage.moduleId("QtQml");
+ ModuleId qtQuickModuleId = storage.moduleId("QtQuick");
auto type = parser.parse("import QtQuick\n import \"../foo\"\nExample{}",
imports,
qmlFileSourceId,
@@ -179,11 +183,11 @@ TEST_F(QmlDocumentParser, DISABLED_Imports)
ASSERT_THAT(imports,
UnorderedElementsAre(
- Storage::Import{Storage::Version{}, directoryModuleId, qmlFileSourceId},
- Storage::Import{Storage::Version{}, fooDirectoryModuleId, qmlFileSourceId},
- Storage::Import{"QML", Storage::Version{1, 0}, qmlFileSourceId},
- Storage::Import{"QtQml", Storage::Version{6, 0}, qmlFileSourceId},
- Storage::Import{"QtQuick", Storage::Version{}, qmlFileSourceId}));
+ Storage::Import{directoryModuleId, Storage::Version{}, qmlFileSourceId},
+ Storage::Import{fooDirectoryModuleId, Storage::Version{}, qmlFileSourceId},
+ Storage::Import{qmlModuleId, Storage::Version{1, 0}, qmlFileSourceId},
+ Storage::Import{qtQmlModuleId, Storage::Version{6, 0}, qmlFileSourceId},
+ Storage::Import{qtQuickModuleId, Storage::Version{}, qmlFileSourceId}));
}
TEST_F(QmlDocumentParser, Functions)
diff --git a/tests/unit/unittest/qmltypesparser-test.cpp b/tests/unit/unittest/qmltypesparser-test.cpp
index fcd182b920..8fd4263d22 100644
--- a/tests/unit/unittest/qmltypesparser-test.cpp
+++ b/tests/unit/unittest/qmltypesparser-test.cpp
@@ -39,18 +39,16 @@ using QmlDesigner::ModuleId;
using QmlDesigner::SourceContextId;
using QmlDesigner::SourceId;
-MATCHER_P4(IsImport,
- name,
+MATCHER_P3(IsImport,
+ moduleId,
version,
sourceId,
- kind,
std::string(negation ? "isn't " : "is ")
- + PrintToString(Storage::Import{name, version, sourceId, kind}))
+ + PrintToString(Storage::Import{moduleId, version, sourceId}))
{
const Storage::Import &import = arg;
- return import.name == name && import.version == version && import.sourceId == sourceId
- && import.kind == kind;
+ return import.moduleId == moduleId && import.version == version && import.sourceId == sourceId;
}
MATCHER_P(HasPrototype, prototype, std::string(negation ? "isn't " : "is ") + PrintToString(prototype))
@@ -60,19 +58,17 @@ MATCHER_P(HasPrototype, prototype, std::string(negation ? "isn't " : "is ") + Pr
return Storage::ImportedTypeName{prototype} == type.prototype;
}
-MATCHER_P5(IsType,
- moduleId,
+MATCHER_P4(IsType,
typeName,
prototype,
accessSemantics,
sourceId,
std::string(negation ? "isn't " : "is ")
- + PrintToString(Storage::Type{moduleId, typeName, prototype, accessSemantics, sourceId}))
+ + PrintToString(Storage::Type{typeName, prototype, accessSemantics, sourceId}))
{
const Storage::Type &type = arg;
- return type.moduleId == moduleId && type.typeName == typeName
- && type.prototype == Storage::ImportedTypeName{prototype}
+ return type.typeName == typeName && type.prototype == Storage::ImportedTypeName{prototype}
&& type.accessSemantics == accessSemantics && type.sourceId == sourceId;
}
@@ -173,13 +169,12 @@ protected:
QmlDesigner::ProjectStorage<Sqlite::Database> storage{database, database.isInitialized()};
QmlDesigner::SourcePathCache<QmlDesigner::ProjectStorage<Sqlite::Database>> sourcePathCache{
storage};
- QmlDesigner::QmlTypesParser parser{sourcePathCache};
+ QmlDesigner::QmlTypesParser parser{sourcePathCache, storage};
Storage::Imports imports;
Storage::Types types;
SourceId qmltypesFileSourceId{sourcePathCache.sourceId("path/to/types.qmltypes")};
SourceContextId qmltypesFileSourceContextId{sourcePathCache.sourceContextId(qmltypesFileSourceId)};
- SourceId directorySourceId{sourcePathCache.sourceId("path/to/.")};
- ModuleId directoryModuleId{&directorySourceId};
+ ModuleId directoryModuleId{storage.moduleId("path/to/")};
};
TEST_F(QmlTypesParser, Imports)
@@ -191,27 +186,20 @@ TEST_F(QmlTypesParser, Imports)
parser.parse(source, imports, types, qmltypesFileSourceId, directoryModuleId);
- ASSERT_THAT(imports,
- UnorderedElementsAre(IsImport("QtQuick",
- Storage::Version{2, 15},
- qmltypesFileSourceId,
- Storage::ImportKind::QmlTypesDependency),
- IsImport("QtQuick.Window",
- Storage::Version{2, 1},
- qmltypesFileSourceId,
- Storage::ImportKind::QmlTypesDependency),
- IsImport("QML",
- Storage::Version{},
- qmltypesFileSourceId,
- Storage::ImportKind::QmlTypesDependency),
- IsImport("QtQml",
- Storage::Version{},
- qmltypesFileSourceId,
- Storage::ImportKind::QmlTypesDependency),
- IsImport("QtFoo",
- Storage::Version{6},
- qmltypesFileSourceId,
- Storage::ImportKind::QmlTypesDependency)));
+ ASSERT_THAT(
+ imports,
+ UnorderedElementsAre(
+ IsImport(storage.moduleId("QML"), Storage::Version{}, qmltypesFileSourceId),
+ IsImport(storage.moduleId("QtQml"), Storage::Version{}, qmltypesFileSourceId),
+ IsImport(storage.moduleId("QtQml-cppnative"), Storage::Version{}, qmltypesFileSourceId),
+ IsImport(storage.moduleId("QtQuick"), Storage::Version{2, 15}, qmltypesFileSourceId),
+ IsImport(storage.moduleId("QtQuick-cppnative"), Storage::Version{2, 15}, qmltypesFileSourceId),
+ IsImport(storage.moduleId("QtQuick.Window"), Storage::Version{2, 1}, qmltypesFileSourceId),
+ IsImport(storage.moduleId("QtQuick.Window-cppnative"),
+ Storage::Version{2, 1},
+ qmltypesFileSourceId),
+ IsImport(storage.moduleId("QtFoo"), Storage::Version{6}, qmltypesFileSourceId),
+ IsImport(storage.moduleId("QtFoo-cppnative"), Storage::Version{6}, qmltypesFileSourceId)));
}
TEST_F(QmlTypesParser, Types)
@@ -225,13 +213,11 @@ TEST_F(QmlTypesParser, Types)
parser.parse(source, imports, types, qmltypesFileSourceId, directoryModuleId);
ASSERT_THAT(types,
- UnorderedElementsAre(IsType(directoryModuleId,
- "QObject",
+ UnorderedElementsAre(IsType("QObject",
Storage::NativeType{},
Storage::TypeAccessSemantics::Reference,
qmltypesFileSourceId),
- IsType(directoryModuleId,
- "QQmlComponent",
+ IsType("QQmlComponent",
Storage::NativeType{"QObject"},
Storage::TypeAccessSemantics::Reference,
qmltypesFileSourceId)));