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>
|
||||
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);
|
||||
return Utils::transform(titles, [project](const QString &title) {
|
||||
BuildTargetInfo bti;
|
||||
|
@@ -62,7 +62,8 @@ bool IosRunConfigurationFactory::canCreateHelper(Target *parent, const QString &
|
||||
QList<BuildTargetInfo>
|
||||
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,
|
||||
ProjectType::SharedLibraryTemplate,
|
||||
ProjectType::AuxTemplate});
|
||||
|
@@ -388,7 +388,7 @@ QList<BuildTargetInfo> QbsRunConfigurationFactory::availableBuildTargets(Target
|
||||
{
|
||||
QList<qbs::ProductData> products;
|
||||
|
||||
QbsProject *project = static_cast<QbsProject *>(parent->project());
|
||||
QbsProject *project = qobject_cast<QbsProject *>(parent->project());
|
||||
if (!project || !project->qbsProject().isValid())
|
||||
return {};
|
||||
|
||||
|
@@ -59,7 +59,8 @@ QmakeAndroidRunConfigurationFactory::QmakeAndroidRunConfigurationFactory(QObject
|
||||
QList<BuildTargetInfo>
|
||||
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});
|
||||
}
|
||||
|
||||
|
@@ -439,14 +439,16 @@ DesktopQmakeRunConfigurationFactory::DesktopQmakeRunConfigurationFactory(QObject
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
QList<BuildTargetInfo>
|
||||
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);
|
||||
}
|
||||
|
||||
|
@@ -32,6 +32,7 @@
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
#include <projectexplorer/target.h>
|
||||
#include <qmakeprojectmanager/qmakeproject.h>
|
||||
#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
|
||||
|
||||
using namespace ProjectExplorer;
|
||||
|
||||
@@ -41,14 +42,17 @@ namespace Internal {
|
||||
QnxRunConfigurationFactory::QnxRunConfigurationFactory(QObject *parent) :
|
||||
ProjectExplorer::IRunConfigurationFactory(parent)
|
||||
{
|
||||
registerRunConfiguration<QnxRunConfiguration>(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX);
|
||||
setSupportedTargetDeviceTypes({Constants::QNX_QNX_OS_TYPE});
|
||||
registerRunConfiguration<QnxRunConfiguration>(Qnx::Constants::QNX_QNX_RUNCONFIGURATION_PREFIX);
|
||||
setSupportedTargetDeviceTypes({Qnx::Constants::QNX_QNX_OS_TYPE});
|
||||
addSupportedProjectType(QmakeProjectManager::Constants::QMAKEPROJECT_ID);
|
||||
}
|
||||
|
||||
QList<ProjectExplorer::BuildTargetInfo>
|
||||
QnxRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const
|
||||
{
|
||||
auto project = qobject_cast<QmakeProjectManager::QmakeProject *>(parent->project());
|
||||
QTC_ASSERT(project, return {});
|
||||
|
||||
const QList<BuildTargetInfo> buildTargets = project->buildTargets(mode);
|
||||
return Utils::transform(buildTargets, [](BuildTargetInfo bti) {
|
||||
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
|
||||
{
|
||||
auto project = qobject_cast<QmakeProjectManager::QmakeProject *>(parent->project());
|
||||
QTC_ASSERT(project, return false);
|
||||
return project->hasApplicationProFile(Utils::FileName::fromString(buildTarget));
|
||||
}
|
||||
|
||||
|
@@ -53,7 +53,8 @@ WinRtRunConfigurationFactory::WinRtRunConfigurationFactory()
|
||||
QList<BuildTargetInfo>
|
||||
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);
|
||||
return Utils::transform(buildTargets, [](BuildTargetInfo bti) {
|
||||
bti.displayName = tr("Run App Package");
|
||||
|
Reference in New Issue
Block a user