diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2018-04-18 13:39:05 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2018-04-19 13:21:45 +0000 |
commit | 460fdc02e058100baabdc5cdb658bbb9790a46ca (patch) | |
tree | 8a20a5e5be70ede06ccdf9753dd8ec9540175692 /src/plugins/qmlprojectmanager | |
parent | da18fc1f50e07d4bec6f32c0ccf5f08ea10fb634 (diff) | |
download | qt-creator-460fdc02e058100baabdc5cdb658bbb9790a46ca.tar.gz |
ProjectExplorer: Report project-specific kit errors/warnings
Report project-specific warnings about the kit used in Project Mode.
E.g. a python project should not complain about missing toolchains,
while a qmake project should.
Change-Id: I5ce6742683cdeffc7ff3f1a3e8f0b89aee9aa0b4
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'src/plugins/qmlprojectmanager')
-rw-r--r-- | src/plugins/qmlprojectmanager/qmlproject.cpp | 60 | ||||
-rw-r--r-- | src/plugins/qmlprojectmanager/qmlproject.h | 2 |
2 files changed, 27 insertions, 35 deletions
diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index 75efd242b0..47bc18e0fe 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -275,52 +275,42 @@ void QmlProject::refreshTargetDirectory() updateDeploymentData(target); } -bool QmlProject::supportsKit(const Kit *k, QString *errorMessage) const +QList<Task> QmlProject::projectIssues(const Kit *k) const { - if (!k->isValid()) { - if (errorMessage) - *errorMessage = tr("Kit is not valid."); - return false; - } + QList<Task> result = Project::projectIssues(k); + + const QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); + if (!version) + result.append(createProjectTask(Task::TaskType::Error, tr("No Qt version set in kit."))); IDevice::ConstPtr dev = DeviceKitInformation::device(k); - if (dev.isNull()) { - if (errorMessage) - *errorMessage = tr("Kit has no device."); - return false; - } + if (dev.isNull()) + result.append(createProjectTask(Task::TaskType::Error, tr("Kit has no device."))); - QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); - if (!version) { - if (errorMessage) - *errorMessage = tr("No Qt version set in kit."); - return false; - } - if (version->qtVersion() < QtSupport::QtVersionNumber(5, 0, 0)) { - if (errorMessage) - *errorMessage = tr("Qt version is too old."); - return false; - } + if (version && version->qtVersion() < QtSupport::QtVersionNumber(5, 0, 0)) + result.append(createProjectTask(Task::TaskType::Error, tr("Qt version is too old."))); + + if (dev.isNull() || !version) + return result; // No need to check deeper than this if (dev->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) { if (version->type() == QtSupport::Constants::DESKTOPQT) { - if (static_cast<QtSupport::DesktopQtVersion *>(version)->qmlsceneCommand().isEmpty()) { - if (errorMessage) - *errorMessage = tr("Qt version has no qmlscene command."); - return false; + if (static_cast<const QtSupport::DesktopQtVersion *>(version)->qmlsceneCommand().isEmpty()) { + result.append(createProjectTask(Task::TaskType::Error, + tr("Qt version has no qmlscene command."))); } } else { // Non-desktop Qt on a desktop device? We don't support that. - if (errorMessage) - *errorMessage = tr("Non-desktop Qt is used with a Desktop device."); - return false; + result.append(createProjectTask(Task::TaskType::Error, + tr("Non-desktop Qt is used with a Desktop device."))); } + } else { + // If not a desktop device, don't check the Qt version for qmlscene. + // The device is responsible for providing it and we assume qmlscene can be found + // in $PATH if it's not explicitly given. } - // If not a desktop device, don't check the Qt version for qmlscene. - // The device is responsible for providing it and we assume qmlscene can be found - // in $PATH if it's not explicitly given. - return true; + return result; } Project::RestoreResult QmlProject::fromMap(const QVariantMap &map, QString *errorMessage) @@ -334,7 +324,9 @@ Project::RestoreResult QmlProject::fromMap(const QVariantMap &map, QString *erro if (!activeTarget()) { // find a kit that matches prerequisites (prefer default one) - const QList<Kit*> kits = KitManager::kits([this](const Kit *k) { return supportsKit(k, nullptr); }); + const QList<Kit*> kits = KitManager::kits([this](const Kit *k) { + return !containsType(projectIssues(k), Task::TaskType::Error); + }); if (!kits.isEmpty()) { Kit *kit = kits.contains(KitManager::defaultKit()) ? KitManager::defaultKit() : kits.first(); diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h index cd4fc21b29..075bd77a44 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.h +++ b/src/plugins/qmlprojectmanager/qmlproject.h @@ -48,7 +48,7 @@ public: explicit QmlProject(const Utils::FileName &filename); ~QmlProject() override; - bool supportsKit(const ProjectExplorer::Kit *k, QString *errorMessage = nullptr) const final; + QList<ProjectExplorer::Task> projectIssues(const ProjectExplorer::Kit *k) const final; bool validProjectFile() const; |