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;
|
||||
}
|
||||
|
||||
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 componentReferences;
|
||||
@@ -291,8 +303,10 @@ void ProjectStorageUpdater::parseTypeInfos(const QStringList &typeInfos,
|
||||
{directory, "/", Utils::SmallString{typeInfo}});
|
||||
SourceId sourceId = m_pathCache.sourceId(SourcePathView{qmltypesPath});
|
||||
|
||||
addDependencies(package.moduleDependencies, sourceId, qmldirDependencies, m_projectStorage);
|
||||
addDependencies(package.moduleDependencies, sourceId, qmldirImports, m_projectStorage);
|
||||
addDependencies(package.moduleDependencies,
|
||||
sourceId,
|
||||
joinImports(qmldirDependencies, qmldirImports),
|
||||
m_projectStorage);
|
||||
package.updatedModuleDependencySourceIds.push_back(sourceId);
|
||||
|
||||
auto projectData = package.projectDatas.emplace_back(qmldirSourceId,
|
||||
|
@@ -1102,6 +1102,32 @@ TEST_F(ProjectStorageUpdater, SynchronizeQmldirDependenciesWithDoubleEntries)
|
||||
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)
|
||||
{
|
||||
QString qmldir{R"(module Example
|
||||
|
Reference in New Issue
Block a user