diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index 044d1ab3728..e8c3bd3700f 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -658,13 +658,13 @@ void CMakeBuildSystem::updateProjectData() QtSupport::CppKitInfo kitInfo(kit()); QTC_ASSERT(kitInfo.isValid(), return ); - { - QString errorMessage; - RawProjectParts rpps = m_reader.createRawProjectParts(errorMessage); - if (!errorMessage.isEmpty()) - cmakeBuildConfiguration()->setError(errorMessage); - qCDebug(cmakeBuildSystemLog) << "Raw project parts created." << errorMessage; + QString errorMessage; + RawProjectParts rpps = m_reader.createRawProjectParts(errorMessage); + if (!errorMessage.isEmpty()) + cmakeBuildConfiguration()->setError(errorMessage); + qCDebug(cmakeBuildSystemLog) << "Raw project parts created." << errorMessage; + { for (RawProjectPart &rpp : rpps) { rpp.setQtVersion( kitInfo.projectPartQtVersion); // TODO: Check if project actually uses Qt. @@ -682,7 +682,18 @@ void CMakeBuildSystem::updateProjectData() m_cppCodeModelUpdater->update({p, kitInfo, cmakeBuildConfiguration()->environment(), rpps}); } { - updateQmlJSCodeModel(); + const bool mergedHeaderPathsAndQmlImportPaths = kit()->value( + QtSupport::KitHasMergedHeaderPathsWithQmlImportPaths::id(), false).toBool(); + QStringList extraHeaderPaths; + for (const RawProjectPart &rpp : qAsConst(rpps)) { + if (mergedHeaderPathsAndQmlImportPaths) { + for (const auto &headerPath : rpp.headerPaths) { + if (headerPath.type == HeaderPathType::User) + extraHeaderPaths.append(headerPath.path); + } + } + } + updateQmlJSCodeModel(extraHeaderPaths); } emit cmakeBuildConfiguration()->buildTypeChanged(); @@ -1176,7 +1187,7 @@ QList CMakeBuildSystem::findExtraCompilers() return extraCompilers; } -void CMakeBuildSystem::updateQmlJSCodeModel() +void CMakeBuildSystem::updateQmlJSCodeModel(const QStringList &extraHeaderPaths) { QmlJS::ModelManagerInterface *modelManager = QmlJS::ModelManagerInterface::instance(); @@ -1199,6 +1210,10 @@ void CMakeBuildSystem::updateQmlJSCodeModel() addImports(cmakeImports); addImports(kit()->value(QtSupport::KitQmlImportPath::id()).toString()); + for (const QString &extraHeaderPath : extraHeaderPaths) + projectInfo.importPaths.maybeInsert(FilePath::fromString(extraHeaderPath), + QmlJS::Dialect::Qml); + project()->setProjectLanguage(ProjectExplorer::Constants::QMLJS_LANGUAGE_ID, !projectInfo.sourceFiles.isEmpty()); modelManager->updateProjectInfo(projectInfo, p); diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h index 00740feaa0a..069321e5cfa 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h @@ -140,7 +140,7 @@ private: void updateProjectData(); void updateFallbackProjectData(); QList findExtraCompilers(); - void updateQmlJSCodeModel(); + void updateQmlJSCodeModel(const QStringList &extraHeaderPaths); void handleParsingSucceeded(); void handleParsingFailed(const QString &msg); diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index cfb3dcc3643..698182f2ed2 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -680,10 +680,12 @@ static void setKitProperties(const QString &kitName, Kit *k, const McuTarget *mc k->setDeviceTypeForIcon(DEVICE_TYPE); k->setValue(QtSupport::SuppliesQtQuickImportPath::id(), true); k->setValue(QtSupport::KitQmlImportPath::id(), QVariant(sdkPath + "/include/qul")); + k->setValue(QtSupport::KitHasMergedHeaderPathsWithQmlImportPaths::id(), true); QSet irrelevant = { SysRootKitAspect::id(), QtSupport::SuppliesQtQuickImportPath::id(), - QtSupport::KitQmlImportPath::id() + QtSupport::KitQmlImportPath::id(), + QtSupport::KitHasMergedHeaderPathsWithQmlImportPaths::id(), }; if (!kitNeedsQtVersion()) irrelevant.insert(QtSupport::QtKitAspect::id()); @@ -1027,6 +1029,16 @@ void McuSupportOptions::fixExistingKits() } } } + + // Check if the MCU kit has the flag for merged header/qml-import paths set. + const auto mergedPaths = QtSupport::KitHasMergedHeaderPathsWithQmlImportPaths::id(); + if (!irrelevantAspects.contains(mergedPaths)) { + irrelevantAspects.insert(mergedPaths); + kit->setIrrelevantAspects(irrelevantAspects); + } + if (!kit->value(mergedPaths, false).toBool()) { + kit->setValue(mergedPaths, true); + } } // Fix kit dependencies for known targets diff --git a/src/plugins/qtsupport/qtkitinformation.cpp b/src/plugins/qtsupport/qtkitinformation.cpp index 255aa2d949e..4c4fb479f85 100644 --- a/src/plugins/qtsupport/qtkitinformation.cpp +++ b/src/plugins/qtsupport/qtkitinformation.cpp @@ -474,4 +474,9 @@ Id KitQmlImportPath::id() return QtSupport::Constants::KIT_QML_IMPORT_PATH; } +Id KitHasMergedHeaderPathsWithQmlImportPaths::id() +{ + return QtSupport::Constants::KIT_HAS_MERGED_HEADER_PATHS_WITH_QML_IMPORT_PATHS; +} + } // namespace QtSupport diff --git a/src/plugins/qtsupport/qtkitinformation.h b/src/plugins/qtsupport/qtkitinformation.h index bf6f9a58c2f..0080abb947e 100644 --- a/src/plugins/qtsupport/qtkitinformation.h +++ b/src/plugins/qtsupport/qtkitinformation.h @@ -95,4 +95,10 @@ public: static Utils::Id id(); }; +class QTSUPPORT_EXPORT KitHasMergedHeaderPathsWithQmlImportPaths +{ +public: + static Utils::Id id(); +}; + } // namespace QtSupport diff --git a/src/plugins/qtsupport/qtsupportconstants.h b/src/plugins/qtsupport/qtsupportconstants.h index 5837d1ade42..da0f01ba1ef 100644 --- a/src/plugins/qtsupport/qtsupportconstants.h +++ b/src/plugins/qtsupport/qtsupportconstants.h @@ -58,6 +58,8 @@ const char FEATURE_DESKTOP[] = "QtSupport.Wizards.FeatureDesktop"; // Kit flags const char FLAGS_SUPPLIES_QTQUICK_IMPORT_PATH[] = "QtSupport.SuppliesQtQuickImportPath"; const char KIT_QML_IMPORT_PATH[] = "QtSupport.KitQmlImportPath"; +const char KIT_HAS_MERGED_HEADER_PATHS_WITH_QML_IMPORT_PATHS[] = + "QtSupport.KitHasMergedHeaderPathsWithQmlImportPaths"; } // namepsace Constants } // namepsace QtSupport