forked from qt-creator/qt-creator
Support merged QML import paths with header paths
QUL does not have separate QML import paths, but (re-)uses the include paths for this purpose. Support this behavior by adding all include paths to the QML import paths before handing the project information off to the QML code model. Change-Id: Ic2e39ab69ac27776f5070b7b8b7c66d53a83210b Reviewed-by: <christiaan.janssen@qt.io> Reviewed-by: Fawzi Mohamed <fawzi.mohamed@qt.io>
This commit is contained in:
committed by
Erik Verbruggen
parent
6a838d7c3c
commit
2361f26732
@@ -658,13 +658,13 @@ void CMakeBuildSystem::updateProjectData()
|
|||||||
QtSupport::CppKitInfo kitInfo(kit());
|
QtSupport::CppKitInfo kitInfo(kit());
|
||||||
QTC_ASSERT(kitInfo.isValid(), return );
|
QTC_ASSERT(kitInfo.isValid(), return );
|
||||||
|
|
||||||
{
|
|
||||||
QString errorMessage;
|
QString errorMessage;
|
||||||
RawProjectParts rpps = m_reader.createRawProjectParts(errorMessage);
|
RawProjectParts rpps = m_reader.createRawProjectParts(errorMessage);
|
||||||
if (!errorMessage.isEmpty())
|
if (!errorMessage.isEmpty())
|
||||||
cmakeBuildConfiguration()->setError(errorMessage);
|
cmakeBuildConfiguration()->setError(errorMessage);
|
||||||
qCDebug(cmakeBuildSystemLog) << "Raw project parts created." << errorMessage;
|
qCDebug(cmakeBuildSystemLog) << "Raw project parts created." << errorMessage;
|
||||||
|
|
||||||
|
{
|
||||||
for (RawProjectPart &rpp : rpps) {
|
for (RawProjectPart &rpp : rpps) {
|
||||||
rpp.setQtVersion(
|
rpp.setQtVersion(
|
||||||
kitInfo.projectPartQtVersion); // TODO: Check if project actually uses Qt.
|
kitInfo.projectPartQtVersion); // TODO: Check if project actually uses Qt.
|
||||||
@@ -682,7 +682,18 @@ void CMakeBuildSystem::updateProjectData()
|
|||||||
m_cppCodeModelUpdater->update({p, kitInfo, cmakeBuildConfiguration()->environment(), rpps});
|
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();
|
emit cmakeBuildConfiguration()->buildTypeChanged();
|
||||||
|
|
||||||
@@ -1176,7 +1187,7 @@ QList<ProjectExplorer::ExtraCompiler *> CMakeBuildSystem::findExtraCompilers()
|
|||||||
return extraCompilers;
|
return extraCompilers;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMakeBuildSystem::updateQmlJSCodeModel()
|
void CMakeBuildSystem::updateQmlJSCodeModel(const QStringList &extraHeaderPaths)
|
||||||
{
|
{
|
||||||
QmlJS::ModelManagerInterface *modelManager = QmlJS::ModelManagerInterface::instance();
|
QmlJS::ModelManagerInterface *modelManager = QmlJS::ModelManagerInterface::instance();
|
||||||
|
|
||||||
@@ -1199,6 +1210,10 @@ void CMakeBuildSystem::updateQmlJSCodeModel()
|
|||||||
addImports(cmakeImports);
|
addImports(cmakeImports);
|
||||||
addImports(kit()->value(QtSupport::KitQmlImportPath::id()).toString());
|
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,
|
project()->setProjectLanguage(ProjectExplorer::Constants::QMLJS_LANGUAGE_ID,
|
||||||
!projectInfo.sourceFiles.isEmpty());
|
!projectInfo.sourceFiles.isEmpty());
|
||||||
modelManager->updateProjectInfo(projectInfo, p);
|
modelManager->updateProjectInfo(projectInfo, p);
|
||||||
|
@@ -140,7 +140,7 @@ private:
|
|||||||
void updateProjectData();
|
void updateProjectData();
|
||||||
void updateFallbackProjectData();
|
void updateFallbackProjectData();
|
||||||
QList<ProjectExplorer::ExtraCompiler *> findExtraCompilers();
|
QList<ProjectExplorer::ExtraCompiler *> findExtraCompilers();
|
||||||
void updateQmlJSCodeModel();
|
void updateQmlJSCodeModel(const QStringList &extraHeaderPaths);
|
||||||
|
|
||||||
void handleParsingSucceeded();
|
void handleParsingSucceeded();
|
||||||
void handleParsingFailed(const QString &msg);
|
void handleParsingFailed(const QString &msg);
|
||||||
|
@@ -680,10 +680,12 @@ static void setKitProperties(const QString &kitName, Kit *k, const McuTarget *mc
|
|||||||
k->setDeviceTypeForIcon(DEVICE_TYPE);
|
k->setDeviceTypeForIcon(DEVICE_TYPE);
|
||||||
k->setValue(QtSupport::SuppliesQtQuickImportPath::id(), true);
|
k->setValue(QtSupport::SuppliesQtQuickImportPath::id(), true);
|
||||||
k->setValue(QtSupport::KitQmlImportPath::id(), QVariant(sdkPath + "/include/qul"));
|
k->setValue(QtSupport::KitQmlImportPath::id(), QVariant(sdkPath + "/include/qul"));
|
||||||
|
k->setValue(QtSupport::KitHasMergedHeaderPathsWithQmlImportPaths::id(), true);
|
||||||
QSet<Id> irrelevant = {
|
QSet<Id> irrelevant = {
|
||||||
SysRootKitAspect::id(),
|
SysRootKitAspect::id(),
|
||||||
QtSupport::SuppliesQtQuickImportPath::id(),
|
QtSupport::SuppliesQtQuickImportPath::id(),
|
||||||
QtSupport::KitQmlImportPath::id()
|
QtSupport::KitQmlImportPath::id(),
|
||||||
|
QtSupport::KitHasMergedHeaderPathsWithQmlImportPaths::id(),
|
||||||
};
|
};
|
||||||
if (!kitNeedsQtVersion())
|
if (!kitNeedsQtVersion())
|
||||||
irrelevant.insert(QtSupport::QtKitAspect::id());
|
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
|
// Fix kit dependencies for known targets
|
||||||
|
@@ -474,4 +474,9 @@ Id KitQmlImportPath::id()
|
|||||||
return QtSupport::Constants::KIT_QML_IMPORT_PATH;
|
return QtSupport::Constants::KIT_QML_IMPORT_PATH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Id KitHasMergedHeaderPathsWithQmlImportPaths::id()
|
||||||
|
{
|
||||||
|
return QtSupport::Constants::KIT_HAS_MERGED_HEADER_PATHS_WITH_QML_IMPORT_PATHS;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace QtSupport
|
} // namespace QtSupport
|
||||||
|
@@ -95,4 +95,10 @@ public:
|
|||||||
static Utils::Id id();
|
static Utils::Id id();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class QTSUPPORT_EXPORT KitHasMergedHeaderPathsWithQmlImportPaths
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static Utils::Id id();
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace QtSupport
|
} // namespace QtSupport
|
||||||
|
@@ -58,6 +58,8 @@ const char FEATURE_DESKTOP[] = "QtSupport.Wizards.FeatureDesktop";
|
|||||||
// Kit flags
|
// Kit flags
|
||||||
const char FLAGS_SUPPLIES_QTQUICK_IMPORT_PATH[] = "QtSupport.SuppliesQtQuickImportPath";
|
const char FLAGS_SUPPLIES_QTQUICK_IMPORT_PATH[] = "QtSupport.SuppliesQtQuickImportPath";
|
||||||
const char KIT_QML_IMPORT_PATH[] = "QtSupport.KitQmlImportPath";
|
const char KIT_QML_IMPORT_PATH[] = "QtSupport.KitQmlImportPath";
|
||||||
|
const char KIT_HAS_MERGED_HEADER_PATHS_WITH_QML_IMPORT_PATHS[] =
|
||||||
|
"QtSupport.KitHasMergedHeaderPathsWithQmlImportPaths";
|
||||||
|
|
||||||
} // namepsace Constants
|
} // namepsace Constants
|
||||||
} // namepsace QtSupport
|
} // namepsace QtSupport
|
||||||
|
Reference in New Issue
Block a user