forked from qt-creator/qt-creator
QmlDesigner: Filter colliding imports to dependencies
Imports from qmldir are added as dependencies too. In the case as a import is the same as a dependency it has do be filtered out. Change-Id: Ibecc505ccf7c001d3267665ee4fe2e374bea8a7d Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -64,6 +64,18 @@ QList<QmlDirParser::Import> filterMultipleEntries(QList<QmlDirParser::Import> im
|
|||||||
return imports;
|
return imports;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<QmlDirParser::Import> joinImports(const QList<QmlDirParser::Import> &firstImports,
|
||||||
|
const QList<QmlDirParser::Import> &secondImports)
|
||||||
|
{
|
||||||
|
QList<QmlDirParser::Import> imports;
|
||||||
|
imports.reserve(firstImports.size() + secondImports.size());
|
||||||
|
imports.append(firstImports);
|
||||||
|
imports.append(secondImports);
|
||||||
|
imports = filterMultipleEntries(std::move(imports));
|
||||||
|
|
||||||
|
return imports;
|
||||||
|
}
|
||||||
|
|
||||||
ComponentReferences createComponentReferences(const QMultiHash<QString, QmlDirParser::Component> &components)
|
ComponentReferences createComponentReferences(const QMultiHash<QString, QmlDirParser::Component> &components)
|
||||||
{
|
{
|
||||||
ComponentReferences componentReferences;
|
ComponentReferences componentReferences;
|
||||||
@@ -291,8 +303,10 @@ void ProjectStorageUpdater::parseTypeInfos(const QStringList &typeInfos,
|
|||||||
{directory, "/", Utils::SmallString{typeInfo}});
|
{directory, "/", Utils::SmallString{typeInfo}});
|
||||||
SourceId sourceId = m_pathCache.sourceId(SourcePathView{qmltypesPath});
|
SourceId sourceId = m_pathCache.sourceId(SourcePathView{qmltypesPath});
|
||||||
|
|
||||||
addDependencies(package.moduleDependencies, sourceId, qmldirDependencies, m_projectStorage);
|
addDependencies(package.moduleDependencies,
|
||||||
addDependencies(package.moduleDependencies, sourceId, qmldirImports, m_projectStorage);
|
sourceId,
|
||||||
|
joinImports(qmldirDependencies, qmldirImports),
|
||||||
|
m_projectStorage);
|
||||||
package.updatedModuleDependencySourceIds.push_back(sourceId);
|
package.updatedModuleDependencySourceIds.push_back(sourceId);
|
||||||
|
|
||||||
auto projectData = package.projectDatas.emplace_back(qmldirSourceId,
|
auto projectData = package.projectDatas.emplace_back(qmldirSourceId,
|
||||||
|
@@ -1102,6 +1102,32 @@ TEST_F(ProjectStorageUpdater, SynchronizeQmldirDependenciesWithDoubleEntries)
|
|||||||
updater.update(qmlDirs, {});
|
updater.update(qmlDirs, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(ProjectStorageUpdater, SynchronizeQmldirDependenciesWithCollidingImports)
|
||||||
|
{
|
||||||
|
QString qmldir{R"(module Example
|
||||||
|
depends Qml
|
||||||
|
depends QML
|
||||||
|
import Qml
|
||||||
|
typeinfo example.qmltypes
|
||||||
|
typeinfo types/example2.qmltypes
|
||||||
|
)"};
|
||||||
|
ON_CALL(fileSystemMock, contentAsQString(Eq(QString("/path/qmldir")))).WillByDefault(Return(qmldir));
|
||||||
|
|
||||||
|
EXPECT_CALL(
|
||||||
|
projectStorageMock,
|
||||||
|
synchronize(AllOf(
|
||||||
|
Field(&SynchronizationPackage::moduleDependencies,
|
||||||
|
UnorderedElementsAre(
|
||||||
|
Import{qmlCppNativeModuleId, Storage::Version{}, qmltypesPathSourceId},
|
||||||
|
Import{builtinCppNativeModuleId, Storage::Version{}, qmltypesPathSourceId},
|
||||||
|
Import{qmlCppNativeModuleId, Storage::Version{}, qmltypes2PathSourceId},
|
||||||
|
Import{builtinCppNativeModuleId, Storage::Version{}, qmltypes2PathSourceId})),
|
||||||
|
Field(&SynchronizationPackage::updatedModuleDependencySourceIds,
|
||||||
|
UnorderedElementsAre(qmltypesPathSourceId, qmltypes2PathSourceId)))));
|
||||||
|
|
||||||
|
updater.update(qmlDirs, {});
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(ProjectStorageUpdater, SynchronizeQmldirWithNoDependencies)
|
TEST_F(ProjectStorageUpdater, SynchronizeQmldirWithNoDependencies)
|
||||||
{
|
{
|
||||||
QString qmldir{R"(module Example
|
QString qmldir{R"(module Example
|
||||||
|
Reference in New Issue
Block a user