diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index 0fddce99b09..d61a4275fa1 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -166,15 +166,25 @@ void ModelPrivate::detachAllViews() namespace { Storage::Imports createStorageImports(const Imports &imports, + Utils::SmallStringView localDirectoryPath, ProjectStorageType &projectStorage, SourceId fileId) { - return Utils::transform(imports, [&](const Import &import) { - using Storage::ModuleKind; + using Storage::ModuleKind; + Storage::Imports storageImports; + storageImports.reserve(Utils::usize(imports) + 1); + + for (const Import &import : imports) { auto moduleKind = import.isLibraryImport() ? ModuleKind::QmlLibrary : ModuleKind::PathLibrary; auto moduleId = projectStorage.moduleId(Utils::SmallString{import.url()}, moduleKind); - return Storage::Import{moduleId, import.majorVersion(), import.minorVersion(), fileId}; - }); + storageImports.emplace_back(moduleId, import.majorVersion(), import.minorVersion(), fileId); + } + + auto localDirectoryModuleId = projectStorage.moduleId(localDirectoryPath, ModuleKind::PathLibrary); + + storageImports.emplace_back(localDirectoryModuleId, Storage::Version{}, fileId); + + return storageImports; } } // namespace @@ -196,7 +206,7 @@ void ModelPrivate::changeImports(Imports toBeAddedImports, Imports toBeRemovedIm if (!removedImports.isEmpty() || !allNewAddedImports.isEmpty()) { if (useProjectStorage()) { - auto imports = createStorageImports(m_imports, *projectStorage, m_sourceId); + auto imports = createStorageImports(m_imports, m_localPath, *projectStorage, m_sourceId); projectStorage->synchronizeDocumentImports(std::move(imports), m_sourceId); } notifyImportsChanged(allNewAddedImports, removedImports); @@ -265,7 +275,10 @@ void ModelPrivate::setFileUrl(const QUrl &fileUrl) if (oldPath != fileUrl) { m_fileUrl = fileUrl; if constexpr (useProjectStorage()) { - m_sourceId = pathCache->sourceId(SourcePath{fileUrl.path()}); + auto path = fileUrl.path(); + m_sourceId = pathCache->sourceId(SourcePath{path}); + auto found = std::find(path.rbegin(), path.rend(), u'/').base(); + m_localPath = Utils::PathString{QStringView{path.begin(), std::prev(found)}}; } for (const QPointer &view : std::as_const(m_viewList)) diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h index e8aeadc590e..3302eda2cc3 100644 --- a/src/plugins/qmldesigner/designercore/model/model_p.h +++ b/src/plugins/qmldesigner/designercore/model/model_p.h @@ -355,6 +355,7 @@ private: InternalNodePointer m_currentTimelineNode; std::unique_ptr m_resourceManagement; QUrl m_fileUrl; + Utils::PathString m_localPath; SourceId m_sourceId; QPointer m_rewriterView; QPointer m_nodeInstanceView;