forked from qt-creator/qt-creator
RunConfigurationFactories: Fix crash opening non-qmake based projects
Make sure the Qnx RCs only get triggered for qmake-based projects and defend against broken set-ups using QTC_ASSERT. Task-number: QTCREATORBUG-19755 Change-Id: If64b73de49b0199308f767151d68909dc8b1bc53 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -241,7 +241,8 @@ CMakeRunConfigurationFactory::CMakeRunConfigurationFactory(QObject *parent) :
|
|||||||
QList<BuildTargetInfo>
|
QList<BuildTargetInfo>
|
||||||
CMakeRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode) const
|
CMakeRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode) const
|
||||||
{
|
{
|
||||||
CMakeProject *project = static_cast<CMakeProject *>(parent->project());
|
CMakeProject *project = qobject_cast<CMakeProject *>(parent->project());
|
||||||
|
QTC_ASSERT(project, return {});
|
||||||
const QStringList titles = project->buildTargetTitles(true);
|
const QStringList titles = project->buildTargetTitles(true);
|
||||||
return Utils::transform(titles, [project](const QString &title) {
|
return Utils::transform(titles, [project](const QString &title) {
|
||||||
BuildTargetInfo bti;
|
BuildTargetInfo bti;
|
||||||
|
@@ -62,7 +62,8 @@ bool IosRunConfigurationFactory::canCreateHelper(Target *parent, const QString &
|
|||||||
QList<BuildTargetInfo>
|
QList<BuildTargetInfo>
|
||||||
IosRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const
|
IosRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const
|
||||||
{
|
{
|
||||||
auto project = static_cast<QmakeProject *>(parent->project());
|
auto project = qobject_cast<QmakeProject *>(parent->project());
|
||||||
|
QTC_ASSERT(project, return {});
|
||||||
return project->buildTargets(mode, {ProjectType::ApplicationTemplate,
|
return project->buildTargets(mode, {ProjectType::ApplicationTemplate,
|
||||||
ProjectType::SharedLibraryTemplate,
|
ProjectType::SharedLibraryTemplate,
|
||||||
ProjectType::AuxTemplate});
|
ProjectType::AuxTemplate});
|
||||||
|
@@ -388,7 +388,7 @@ QList<BuildTargetInfo> QbsRunConfigurationFactory::availableBuildTargets(Target
|
|||||||
{
|
{
|
||||||
QList<qbs::ProductData> products;
|
QList<qbs::ProductData> products;
|
||||||
|
|
||||||
QbsProject *project = static_cast<QbsProject *>(parent->project());
|
QbsProject *project = qobject_cast<QbsProject *>(parent->project());
|
||||||
if (!project || !project->qbsProject().isValid())
|
if (!project || !project->qbsProject().isValid())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
|
@@ -59,7 +59,8 @@ QmakeAndroidRunConfigurationFactory::QmakeAndroidRunConfigurationFactory(QObject
|
|||||||
QList<BuildTargetInfo>
|
QList<BuildTargetInfo>
|
||||||
QmakeAndroidRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const
|
QmakeAndroidRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const
|
||||||
{
|
{
|
||||||
auto project = static_cast<QmakeProject *>(parent->project());
|
auto project = qobject_cast<QmakeProject *>(parent->project());
|
||||||
|
QTC_ASSERT(project, return {});
|
||||||
return project->buildTargets(mode, {ProjectType::ApplicationTemplate, ProjectType::SharedLibraryTemplate});
|
return project->buildTargets(mode, {ProjectType::ApplicationTemplate, ProjectType::SharedLibraryTemplate});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -439,14 +439,16 @@ DesktopQmakeRunConfigurationFactory::DesktopQmakeRunConfigurationFactory(QObject
|
|||||||
|
|
||||||
bool DesktopQmakeRunConfigurationFactory::canCreateHelper(Target *parent, const QString &buildTarget) const
|
bool DesktopQmakeRunConfigurationFactory::canCreateHelper(Target *parent, const QString &buildTarget) const
|
||||||
{
|
{
|
||||||
QmakeProject *project = static_cast<QmakeProject *>(parent->project());
|
QmakeProject *project = qobject_cast<QmakeProject *>(parent->project());
|
||||||
|
QTC_ASSERT(project, return {});
|
||||||
return project->hasApplicationProFile(Utils::FileName::fromString(buildTarget));
|
return project->hasApplicationProFile(Utils::FileName::fromString(buildTarget));
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<BuildTargetInfo>
|
QList<BuildTargetInfo>
|
||||||
DesktopQmakeRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const
|
DesktopQmakeRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const
|
||||||
{
|
{
|
||||||
QmakeProject *project = static_cast<QmakeProject *>(parent->project());
|
QmakeProject *project = qobject_cast<QmakeProject *>(parent->project());
|
||||||
|
QTC_ASSERT(project, return {});
|
||||||
return project->buildTargets(mode);
|
return project->buildTargets(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -32,6 +32,7 @@
|
|||||||
#include <projectexplorer/kitinformation.h>
|
#include <projectexplorer/kitinformation.h>
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <qmakeprojectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
|
#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
|
||||||
|
|
||||||
using namespace ProjectExplorer;
|
using namespace ProjectExplorer;
|
||||||
|
|
||||||
@@ -41,14 +42,17 @@ namespace Internal {
|
|||||||
QnxRunConfigurationFactory::QnxRunConfigurationFactory(QObject *parent) :
|
QnxRunConfigurationFactory::QnxRunConfigurationFactory(QObject *parent) :
|
||||||
ProjectExplorer::IRunConfigurationFactory(parent)
|
ProjectExplorer::IRunConfigurationFactory(parent)
|
||||||
{
|
{
|
||||||
registerRunConfiguration<QnxRunConfiguration>(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX);
|
registerRunConfiguration<QnxRunConfiguration>(Qnx::Constants::QNX_QNX_RUNCONFIGURATION_PREFIX);
|
||||||
setSupportedTargetDeviceTypes({Constants::QNX_QNX_OS_TYPE});
|
setSupportedTargetDeviceTypes({Qnx::Constants::QNX_QNX_OS_TYPE});
|
||||||
|
addSupportedProjectType(QmakeProjectManager::Constants::QMAKEPROJECT_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ProjectExplorer::BuildTargetInfo>
|
QList<ProjectExplorer::BuildTargetInfo>
|
||||||
QnxRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const
|
QnxRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const
|
||||||
{
|
{
|
||||||
auto project = qobject_cast<QmakeProjectManager::QmakeProject *>(parent->project());
|
auto project = qobject_cast<QmakeProjectManager::QmakeProject *>(parent->project());
|
||||||
|
QTC_ASSERT(project, return {});
|
||||||
|
|
||||||
const QList<BuildTargetInfo> buildTargets = project->buildTargets(mode);
|
const QList<BuildTargetInfo> buildTargets = project->buildTargets(mode);
|
||||||
return Utils::transform(buildTargets, [](BuildTargetInfo bti) {
|
return Utils::transform(buildTargets, [](BuildTargetInfo bti) {
|
||||||
bti.displayName = tr("%1 on QNX Device").arg(QFileInfo(bti.targetName).completeBaseName());
|
bti.displayName = tr("%1 on QNX Device").arg(QFileInfo(bti.targetName).completeBaseName());
|
||||||
@@ -60,6 +64,7 @@ bool QnxRunConfigurationFactory::canCreateHelper(ProjectExplorer::Target *parent
|
|||||||
const QString &buildTarget) const
|
const QString &buildTarget) const
|
||||||
{
|
{
|
||||||
auto project = qobject_cast<QmakeProjectManager::QmakeProject *>(parent->project());
|
auto project = qobject_cast<QmakeProjectManager::QmakeProject *>(parent->project());
|
||||||
|
QTC_ASSERT(project, return false);
|
||||||
return project->hasApplicationProFile(Utils::FileName::fromString(buildTarget));
|
return project->hasApplicationProFile(Utils::FileName::fromString(buildTarget));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -53,7 +53,8 @@ WinRtRunConfigurationFactory::WinRtRunConfigurationFactory()
|
|||||||
QList<BuildTargetInfo>
|
QList<BuildTargetInfo>
|
||||||
WinRtRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const
|
WinRtRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const
|
||||||
{
|
{
|
||||||
QmakeProject *project = static_cast<QmakeProject *>(parent->project());
|
QmakeProject *project = qobject_cast<QmakeProject *>(parent->project());
|
||||||
|
QTC_ASSERT(project, return {});
|
||||||
const QList<BuildTargetInfo> buildTargets = project->buildTargets(mode);
|
const QList<BuildTargetInfo> buildTargets = project->buildTargets(mode);
|
||||||
return Utils::transform(buildTargets, [](BuildTargetInfo bti) {
|
return Utils::transform(buildTargets, [](BuildTargetInfo bti) {
|
||||||
bti.displayName = tr("Run App Package");
|
bti.displayName = tr("Run App Package");
|
||||||
|
Reference in New Issue
Block a user