From 1697f97aff341dbd6b314702fd25ee16a54d6965 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 20 Nov 2017 11:56:19 +0100 Subject: [PATCH] ProjectExplorer: Register createes' base id in RunConfigurationFactory This shifts the resposibility of creation/splitting of RunConfiguration ids into what are essentially "type ids" and "build targets" to the base implementation, possibly opening the path of abandoning the mangled ids in favor of explicitly storing their constituent parts. Take advantage of base id split in RunConfigurations for availableIds /displayNameForId and for canCreate/canRestore/canClone. Change-Id: I19fefb32757407ab5053a2ae0e5a79438659f6ec Reviewed-by: Christian Kandeler Reviewed-by: Tobias Hunger Reviewed-by: Filippo Cucchetto --- .../baremetalrunconfigurationfactory.cpp | 78 ++++------------ .../baremetalrunconfigurationfactory.h | 16 ++-- .../cmakerunconfiguration.cpp | 49 ++-------- .../cmakerunconfiguration.h | 11 +-- src/plugins/ios/iosrunfactories.cpp | 36 ++------ src/plugins/ios/iosrunfactories.h | 13 +-- .../project/nimrunconfigurationfactory.cpp | 35 ++------ .../nim/project/nimrunconfigurationfactory.h | 9 +- .../customexecutablerunconfiguration.cpp | 37 ++------ .../customexecutablerunconfiguration.h | 8 +- .../projectexplorer/runconfiguration.cpp | 56 ++++++++++++ .../projectexplorer/runconfiguration.h | 21 +++-- .../pythoneditor/pythoneditorplugin.cpp | 41 ++------- .../qbsprojectmanager/qbsrunconfiguration.cpp | 47 +++------- .../qbsprojectmanager/qbsrunconfiguration.h | 8 +- .../qmakeandroidrunconfiguration.cpp | 7 +- .../qmakeandroidrunconfiguration.h | 2 - .../qmakeandroidrunfactories.cpp | 32 ++----- .../qmakeandroidrunfactories.h | 8 +- .../desktopqmakerunconfiguration.cpp | 38 ++------ .../desktopqmakerunconfiguration.h | 8 +- .../qmakeprojectmanager/qmakeproject.cpp | 9 +- .../qmakeprojectmanager/qmakeproject.h | 9 +- .../qmlprojectmanagerconstants.h | 2 + .../qmlprojectrunconfigurationfactory.cpp | 57 ++++-------- .../qmlprojectrunconfigurationfactory.h | 8 +- .../qnx/qnxrunconfigurationfactory.cpp | 55 +++--------- src/plugins/qnx/qnxrunconfigurationfactory.h | 8 +- .../remotelinuxrunconfigurationfactory.cpp | 90 ++++--------------- .../remotelinuxrunconfigurationfactory.h | 16 ++-- src/plugins/winrt/winrtrunfactories.cpp | 32 ++----- src/plugins/winrt/winrtrunfactories.h | 9 +- 32 files changed, 243 insertions(+), 612 deletions(-) diff --git a/src/plugins/baremetal/baremetalrunconfigurationfactory.cpp b/src/plugins/baremetal/baremetalrunconfigurationfactory.cpp index 5ef7836a002..90a2508fd17 100644 --- a/src/plugins/baremetal/baremetalrunconfigurationfactory.cpp +++ b/src/plugins/baremetal/baremetalrunconfigurationfactory.cpp @@ -45,48 +45,26 @@ BareMetalRunConfigurationFactory::BareMetalRunConfigurationFactory(QObject *pare IRunConfigurationFactory(parent) { setObjectName("BareMetalRunConfigurationFactory"); - registerRunConfiguration(); + registerRunConfiguration(BareMetalRunConfiguration::IdPrefix); setSupportedTargetDeviceTypes({BareMetal::Constants::BareMetalOsType}); } -bool BareMetalRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const +bool BareMetalRunConfigurationFactory::canCreateHelper(Target *parent, const QString &buildTarget) const { - if (!canHandle(parent)) - return false; - const QString targetName = BareMetalRunConfiguration::targetNameFromId(id); - return !parent->applicationTargets().targetFilePath(targetName).isEmpty(); + const QString targetName = QFileInfo(buildTarget).fileName(); + return parent->applicationTargets().hasTarget(targetName); } -bool BareMetalRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const +QList BareMetalRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode) const { - if (!canHandle(parent)) - return false; - return idFromMap(map).name().startsWith(BareMetalRunConfiguration::IdPrefix); + return Utils::transform(parent->applicationTargets().list, [](const BuildTargetInfo &bti) { + return QString(bti.projectFilePath.toString() + '/' + bti.targetName); + }); } -bool BareMetalRunConfigurationFactory::canClone(Target *parent, RunConfiguration *source) const +QString BareMetalRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const { - auto bmrc = qobject_cast(source); - return bmrc && canCreate(parent, source->id()); -} - -QList BareMetalRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const -{ - Q_UNUSED(mode) - QList result; - if (!canHandle(parent)) - return result; - - const Core::Id base = Core::Id(BareMetalRunConfiguration::IdPrefix); - foreach (const BuildTargetInfo &bti, parent->applicationTargets().list) - result << base.withSuffix(bti.projectFilePath.toString() + QLatin1Char('/') + bti.targetName); - return result; -} - -QString BareMetalRunConfigurationFactory::displayNameForId(Core::Id id) const -{ - return tr("%1 (on GDB server or hardware debugger)") - .arg(BareMetalRunConfiguration::targetNameFromId(id)); + return tr("%1 (on GDB server or hardware debugger)").arg(QFileInfo(buildTarget).fileName()); } @@ -96,43 +74,17 @@ BareMetalCustomRunConfigurationFactory::BareMetalCustomRunConfigurationFactory(Q IRunConfigurationFactory(parent) { setObjectName("BareMetalCustomRunConfigurationFactory"); - registerRunConfiguration(); + registerRunConfiguration + (BareMetalCustomRunConfiguration::runConfigId()); setSupportedTargetDeviceTypes({BareMetal::Constants::BareMetalOsType}); } -bool BareMetalCustomRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const +QList BareMetalCustomRunConfigurationFactory::availableBuildTargets(Target *, CreationMode) const { - if (!canHandle(parent)) - return false; - return id == BareMetalCustomRunConfiguration::runConfigId(); + return {QString()}; } -bool BareMetalCustomRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const -{ - if (!canHandle(parent)) - return false; - const Core::Id id = idFromMap(map); - return id == BareMetalCustomRunConfiguration::runConfigId(); -} - -bool BareMetalCustomRunConfigurationFactory::canClone(Target *parent, RunConfiguration *source) const -{ - auto bmrc = qobject_cast(source); - return bmrc && canCreate(parent, source->id()); -} - -QList BareMetalCustomRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const -{ - Q_UNUSED(mode) - QList result; - if (!canHandle(parent)) - return result; - - result << BareMetalCustomRunConfiguration::runConfigId(); - return result; -} - -QString BareMetalCustomRunConfigurationFactory::displayNameForId(Core::Id) const +QString BareMetalCustomRunConfigurationFactory::displayNameForBuildTarget(const QString &) const { return BareMetalCustomRunConfiguration::runConfigDefaultDisplayName(); } diff --git a/src/plugins/baremetal/baremetalrunconfigurationfactory.h b/src/plugins/baremetal/baremetalrunconfigurationfactory.h index 92e439f1e5e..039ff3bc408 100644 --- a/src/plugins/baremetal/baremetalrunconfigurationfactory.h +++ b/src/plugins/baremetal/baremetalrunconfigurationfactory.h @@ -37,12 +37,10 @@ class BareMetalRunConfigurationFactory : public ProjectExplorer::IRunConfigurati public: explicit BareMetalRunConfigurationFactory(QObject *parent = 0); - QString displayNameForId(Core::Id id) const override; - QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const override; + QList availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; + QString displayNameForBuildTarget(const QString &buildTarget) const override; - bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override; - bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override; - bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const override; + bool canCreateHelper(ProjectExplorer::Target *parent, const QString &suffix) const override; }; class BareMetalCustomRunConfigurationFactory : public ProjectExplorer::IRunConfigurationFactory @@ -52,12 +50,8 @@ class BareMetalCustomRunConfigurationFactory : public ProjectExplorer::IRunConfi public: explicit BareMetalCustomRunConfigurationFactory(QObject *parent = 0); - QString displayNameForId(Core::Id id) const override; - QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const override; - - bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override; - bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override; - bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const override; + QList availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; + QString displayNameForBuildTarget(const QString &buildTarget) const override; }; } // namespace Internal diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp index 0b63588972a..5272547da66 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp @@ -232,57 +232,18 @@ CMakeRunConfigurationFactory::CMakeRunConfigurationFactory(QObject *parent) : IRunConfigurationFactory(parent) { setObjectName("CMakeRunConfigurationFactory"); - registerRunConfiguration(); + registerRunConfiguration(CMAKE_RC_PREFIX); setSupportedProjectType(); } -// used to show the list of possible additons to a project, returns a list of ids -QList CMakeRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const +QList CMakeRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode) const { - Q_UNUSED(mode) - if (!canHandle(parent)) - return QList(); CMakeProject *project = static_cast(parent->project()); - QList allIds; - foreach (const QString &buildTarget, project->buildTargetTitles(true)) - allIds << idFromBuildTarget(buildTarget); - return allIds; + return project->buildTargetTitles(true); } -// used to translate the ids to names to display to the user -QString CMakeRunConfigurationFactory::displayNameForId(Core::Id id) const +bool CMakeRunConfigurationFactory::canCreateHelper(Target *parent, const QString &buildTarget) const { - return buildTargetFromId(id); -} - -bool CMakeRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const -{ - if (!canHandle(parent)) - return false; CMakeProject *project = static_cast(parent->project()); - return project->hasBuildTarget(buildTargetFromId(id)); -} - -bool CMakeRunConfigurationFactory::canClone(Target *parent, RunConfiguration *source) const -{ - if (!canHandle(parent)) - return false; - return source->id().name().startsWith(CMAKE_RC_PREFIX); -} - -bool CMakeRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const -{ - if (!qobject_cast(parent->project())) - return false; - return idFromMap(map).name().startsWith(CMAKE_RC_PREFIX); -} - -QString CMakeRunConfigurationFactory::buildTargetFromId(Core::Id id) -{ - return id.suffixAfter(CMAKE_RC_PREFIX); -} - -Core::Id CMakeRunConfigurationFactory::idFromBuildTarget(const QString &target) -{ - return Core::Id(CMAKE_RC_PREFIX).withSuffix(target); + return project->hasBuildTarget(buildTarget); } diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h index 62c672e2773..7551f34f27e 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h @@ -85,15 +85,8 @@ class CMakeRunConfigurationFactory : public ProjectExplorer::IRunConfigurationFa public: explicit CMakeRunConfigurationFactory(QObject *parent = 0); - bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override; - bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override; - bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *product) const override; - - QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const override; - QString displayNameForId(Core::Id id) const override; - - static Core::Id idFromBuildTarget(const QString &target); - static QString buildTargetFromId(Core::Id id); + QList availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; + bool canCreateHelper(ProjectExplorer::Target *parent, const QString &suffix) const override; }; } // namespace Internal diff --git a/src/plugins/ios/iosrunfactories.cpp b/src/plugins/ios/iosrunfactories.cpp index f37ffbecb18..8de2583e56f 100644 --- a/src/plugins/ios/iosrunfactories.cpp +++ b/src/plugins/ios/iosrunfactories.cpp @@ -47,44 +47,26 @@ IosRunConfigurationFactory::IosRunConfigurationFactory(QObject *parent) : QmakeRunConfigurationFactory(parent) { setObjectName("IosRunConfigurationFactory"); - registerRunConfiguration(); + registerRunConfiguration(Constants::IOS_RC_ID_PREFIX); setSupportedProjectType(); } -bool IosRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const +bool IosRunConfigurationFactory::canCreateHelper(Target *parent, const QString &buildTarget) const { - if (!canHandle(parent)) - return false; - return availableCreationIds(parent).contains(id); + return availableBuildTargets(parent, UserCreate).contains(buildTarget); } -bool IosRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const +QList IosRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const { - if (!canHandle(parent)) - return false; - QString id = ProjectExplorer::idFromMap(map).toString(); - return id.startsWith(Ios::Constants::IOS_RC_ID_PREFIX); -} - -bool IosRunConfigurationFactory::canClone(Target *parent, RunConfiguration *source) const -{ - return canCreate(parent, source->id()); -} - -QList IosRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const -{ - if (!IosManager::supportsIos(parent)) - return QList(); - auto project = static_cast(parent->project()); - return project->creationIds(Constants::IOS_RC_ID_PREFIX, mode, {ProjectType::ApplicationTemplate, - ProjectType::SharedLibraryTemplate, - ProjectType::AuxTemplate}); + return project->buildTargets(mode, {ProjectType::ApplicationTemplate, + ProjectType::SharedLibraryTemplate, + ProjectType::AuxTemplate}); } -QString IosRunConfigurationFactory::displayNameForId(Core::Id id) const +QString IosRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const { - return IosRunConfiguration::pathFromId(id).toFileInfo().completeBaseName(); + return QFileInfo(buildTarget).completeBaseName(); } bool IosRunConfigurationFactory::canHandle(Target *t) const diff --git a/src/plugins/ios/iosrunfactories.h b/src/plugins/ios/iosrunfactories.h index 27fdc249f62..0b64e3a7eec 100644 --- a/src/plugins/ios/iosrunfactories.h +++ b/src/plugins/ios/iosrunfactories.h @@ -43,17 +43,12 @@ class IosRunConfigurationFactory : public QmakeProjectManager::QmakeRunConfigura public: explicit IosRunConfigurationFactory(QObject *parent = 0); - QString displayNameForId(Core::Id id) const override; - QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode = UserCreate) const override; - - bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override; - - bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override; - - bool canClone(ProjectExplorer::Target *parent, - ProjectExplorer::RunConfiguration *source) const override; + QList availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; + QString displayNameForBuildTarget(const QString &buildTarget) const override; bool canHandle(ProjectExplorer::Target *t) const override; + bool canCreateHelper(ProjectExplorer::Target *parent, const QString &suffix) const override; + QList runConfigurationsForNode(ProjectExplorer::Target *t, const ProjectExplorer::Node *n ) override; diff --git a/src/plugins/nim/project/nimrunconfigurationfactory.cpp b/src/plugins/nim/project/nimrunconfigurationfactory.cpp index 92afa82fee6..223807361d4 100644 --- a/src/plugins/nim/project/nimrunconfigurationfactory.cpp +++ b/src/plugins/nim/project/nimrunconfigurationfactory.cpp @@ -38,43 +38,18 @@ namespace Nim { NimRunConfigurationFactory::NimRunConfigurationFactory() { - registerRunConfiguration(); + registerRunConfiguration(Constants::C_NIMRUNCONFIGURATION_ID); setSupportedProjectType(); } -QList NimRunConfigurationFactory::availableCreationIds(Target *parent, - IRunConfigurationFactory::CreationMode mode) const +QList NimRunConfigurationFactory::availableBuildTargets(Target *, CreationMode) const { - Q_UNUSED(mode); - QList result; - if (canHandle(parent)) - result.append(Constants::C_NIMRUNCONFIGURATION_ID); - return result; + return {QString()}; } -QString NimRunConfigurationFactory::displayNameForId(Core::Id id) const +QString NimRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const { - return id.toString() + QStringLiteral("-TempRunConf"); -} - -bool NimRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const -{ - Q_UNUSED(id); - return canHandle(parent); -} - -bool NimRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const -{ - Q_UNUSED(parent); - Q_UNUSED(map); - return canHandle(parent); -} - -bool NimRunConfigurationFactory::canClone(Target *parent, RunConfiguration *product) const -{ - QTC_ASSERT(parent, return false); - QTC_ASSERT(product, return false); - return canHandle(parent); + return buildTarget + "-TempRunConf"; } } diff --git a/src/plugins/nim/project/nimrunconfigurationfactory.h b/src/plugins/nim/project/nimrunconfigurationfactory.h index d0e22852080..c88c9fe21aa 100644 --- a/src/plugins/nim/project/nimrunconfigurationfactory.h +++ b/src/plugins/nim/project/nimrunconfigurationfactory.h @@ -34,13 +34,8 @@ class NimRunConfigurationFactory : public ProjectExplorer::IRunConfigurationFact public: NimRunConfigurationFactory(); - QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const override; - - QString displayNameForId(Core::Id id) const override; - - bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override; - bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override; - bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *product) const override; + QList availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; + QString displayNameForBuildTarget(const QString &) const override; }; } diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp index a13e7b4e137..7f357fc774e 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp @@ -316,44 +316,17 @@ CustomExecutableRunConfigurationFactory::CustomExecutableRunConfigurationFactory IRunConfigurationFactory(parent) { setObjectName("CustomExecutableRunConfigurationFactory"); - registerRunConfiguration(); + registerRunConfiguration(CUSTOM_EXECUTABLE_ID); } -bool CustomExecutableRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const +QList CustomExecutableRunConfigurationFactory::availableBuildTargets(Target *, CreationMode) const { - if (!canHandle(parent)) - return false; - return id == CUSTOM_EXECUTABLE_ID; + return {QString()}; } -bool CustomExecutableRunConfigurationFactory::canRestore(Target *parent, - const QVariantMap &map) const +QString CustomExecutableRunConfigurationFactory::displayNameForBuildTarget(const QString &) const { - if (!canHandle(parent)) - return false; - Core::Id id(idFromMap(map)); - return canCreate(parent, id); -} - -bool CustomExecutableRunConfigurationFactory::canClone(Target *parent, - RunConfiguration *source) const -{ - return canCreate(parent, source->id()); -} - -QList CustomExecutableRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const -{ - Q_UNUSED(mode) - if (!canHandle(parent)) - return QList(); - return QList() << Core::Id(CUSTOM_EXECUTABLE_ID); -} - -QString CustomExecutableRunConfigurationFactory::displayNameForId(Core::Id id) const -{ - if (id == CUSTOM_EXECUTABLE_ID) - return tr("Custom Executable"); - return QString(); + return tr("Custom Executable"); } } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.h b/src/plugins/projectexplorer/customexecutablerunconfiguration.h index cfab1307af4..483954e7afa 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.h +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.h @@ -95,12 +95,8 @@ class CustomExecutableRunConfigurationFactory : public IRunConfigurationFactory public: explicit CustomExecutableRunConfigurationFactory(QObject *parent = 0); - QList availableCreationIds(Target *parent, CreationMode mode) const override; - QString displayNameForId(Core::Id id) const override; - - bool canCreate(Target *parent, Core::Id id) const override; - bool canRestore(Target *parent, const QVariantMap &map) const override; - bool canClone(Target *parent, RunConfiguration *product) const override; + QList availableBuildTargets(Target *parent, CreationMode mode) const override; + QString displayNameForBuildTarget(const QString &) const override; }; } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 9613768eaaf..512ae87491e 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -450,6 +450,25 @@ IRunConfigurationFactory::IRunConfigurationFactory(QObject *parent) : { } +QList IRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const +{ + if (!canHandle(parent)) + return {}; + return Utils::transform(availableBuildTargets(parent, mode), [this](const QString &suffix) { + return m_runConfigBaseId.withSuffix(suffix); + }); +} + +QString IRunConfigurationFactory::displayNameForId(Core::Id id) const +{ + return displayNameForBuildTarget(id.suffixAfter(m_runConfigBaseId)); +} + +QString IRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const +{ + return buildTarget; +} + /*! Specifies a list of device types for which this RunConfigurationFactory can create RunConfiguration. @@ -477,6 +496,20 @@ bool IRunConfigurationFactory::canHandle(Target *target) const return true; } +bool IRunConfigurationFactory::canCreateHelper(Target *, const QString &) const +{ + return true; +} + +bool IRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const +{ + if (!canHandle(parent)) + return false; + if (!id.name().startsWith(m_runConfigBaseId.name())) + return false; + return canCreateHelper(parent, id.suffixAfter(m_runConfigBaseId)); +} + RunConfiguration *IRunConfigurationFactory::create(Target *parent, Core::Id id) { if (!canCreate(parent, id)) @@ -489,6 +522,21 @@ RunConfiguration *IRunConfigurationFactory::create(Target *parent, Core::Id id) return rc; } +bool IRunConfigurationFactory::canCloneHelper(Target *, RunConfiguration *) const +{ + return true; +} + +bool IRunConfigurationFactory::canClone(Target *parent, RunConfiguration *product) const +{ + if (!canHandle(parent)) + return false; + const Core::Id id = product->id(); + if (!id.name().startsWith(m_runConfigBaseId.name())) + return false; + return canCloneHelper(parent, product); +} + RunConfiguration *IRunConfigurationFactory::restore(Target *parent, const QVariantMap &map) { if (!canRestore(parent, map)) @@ -504,6 +552,14 @@ RunConfiguration *IRunConfigurationFactory::restore(Target *parent, const QVaria return rc; } +bool IRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const +{ + if (!canHandle(parent)) + return false; + const Core::Id id = idFromMap(map); + return id.name().startsWith(m_runConfigBaseId.name()); +} + RunConfiguration *IRunConfigurationFactory::clone(Target *parent, RunConfiguration *product) { QTC_ASSERT(m_creator, return nullptr); diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index 0bd1115bf53..f9166d83126 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -285,15 +285,16 @@ public: explicit IRunConfigurationFactory(QObject *parent = nullptr); enum CreationMode {UserCreate, AutoCreate}; - virtual QList availableCreationIds(Target *parent, CreationMode mode = UserCreate) const = 0; - virtual QString displayNameForId(Core::Id id) const = 0; + QList availableCreationIds(Target *parent, CreationMode mode = UserCreate) const; + QString displayNameForId(Core::Id id) const; virtual bool canHandle(Target *target) const; - virtual bool canCreate(Target *parent, Core::Id id) const = 0; + + bool canCreate(Target *parent, Core::Id id) const; RunConfiguration *create(Target *parent, Core::Id id); - virtual bool canRestore(Target *parent, const QVariantMap &map) const = 0; + bool canRestore(Target *parent, const QVariantMap &map) const; RunConfiguration *restore(Target *parent, const QVariantMap &map); - virtual bool canClone(Target *parent, RunConfiguration *product) const = 0; + bool canClone(Target *parent, RunConfiguration *product) const; RunConfiguration *clone(Target *parent, RunConfiguration *product); static IRunConfigurationFactory *find(Target *parent, const QVariantMap &map); @@ -304,12 +305,19 @@ signals: void availableCreationIdsChanged(); protected: + virtual QList availableBuildTargets(Target *parent, CreationMode mode = UserCreate) const = 0; + virtual QString displayNameForBuildTarget(const QString &buildTarget) const; + + virtual bool canCreateHelper(Target *parent, const QString &buildTarget) const; + virtual bool canCloneHelper(Target *parent, RunConfiguration *product) const; + using RunConfigurationCreator = std::function; template - void registerRunConfiguration() + void registerRunConfiguration(Core::Id runConfigBaseId) { m_creator = [](Target *t) -> RunConfiguration * { return new RunConfig(t); }; + m_runConfigBaseId = runConfigBaseId; } using ProjectTypeChecker = std::function; @@ -324,6 +332,7 @@ protected: private: RunConfigurationCreator m_creator; + Core::Id m_runConfigBaseId; ProjectTypeChecker m_projectTypeChecker; QList m_supportedTargetDeviceTypes; }; diff --git a/src/plugins/pythoneditor/pythoneditorplugin.cpp b/src/plugins/pythoneditor/pythoneditorplugin.cpp index ab99ca62637..27aacc35c9b 100644 --- a/src/plugins/pythoneditor/pythoneditorplugin.cpp +++ b/src/plugins/pythoneditor/pythoneditorplugin.cpp @@ -84,11 +84,6 @@ static QString scriptFromId(Core::Id id) return id.suffixAfter(PythonRunConfigurationPrefix); } -static Core::Id idFromScript(const QString &target) -{ - return Core::Id(PythonRunConfigurationPrefix).withSuffix(target); -} - class PythonProject : public Project { Q_OBJECT @@ -279,52 +274,26 @@ public: PythonRunConfigurationFactory() { setObjectName("PythonRunConfigurationFactory"); - registerRunConfiguration(); + registerRunConfiguration(PythonRunConfigurationPrefix); setSupportedProjectType(); } - QList availableCreationIds(Target *parent, CreationMode mode) const override + QList availableBuildTargets(Target *parent, CreationMode mode) const override { Q_UNUSED(mode); - if (!canHandle(parent)) - return {}; //return { Core::Id(PythonExecutableId) }; - PythonProject *project = static_cast(parent->project()); - QList allIds; - foreach (const QString &file, project->files(ProjectExplorer::Project::AllFiles)) - allIds.append(idFromScript(file)); - return allIds; + return project->files(ProjectExplorer::Project::AllFiles); } - QString displayNameForId(Core::Id id) const override + bool canCreateHelper(Target *parent, const QString &buildTarget) const override { - return scriptFromId(id); - } - - bool canCreate(Target *parent, Core::Id id) const override - { - if (!canHandle(parent)) - return false; PythonProject *project = static_cast(parent->project()); - const QString script = scriptFromId(id); + const QString script = buildTarget; if (script.endsWith(".pyqtc")) return false; return project->files(ProjectExplorer::Project::AllFiles).contains(script); } - - bool canRestore(Target *parent, const QVariantMap &map) const override - { - Q_UNUSED(parent); - return idFromMap(map).name().startsWith(PythonRunConfigurationPrefix); - } - - bool canClone(Target *parent, RunConfiguration *source) const override - { - if (!canHandle(parent)) - return false; - return source->id().name().startsWith(PythonRunConfigurationPrefix); - } }; PythonProject::PythonProject(const FileName &fileName) : diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp index 49cbbac9fb7..25f83cfd829 100644 --- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp @@ -72,14 +72,6 @@ const char QBS_RC_PREFIX[] = "Qbs.RunConfiguration:"; static QString rcNameSeparator() { return QLatin1String("---Qbs.RC.NameSeparator---"); } -static Core::Id idFromProduct(const QbsProject *project, const qbs::ProductData &product) -{ - QString id = QLatin1String(QBS_RC_PREFIX); - id.append(QbsProject::uniqueProductName(product)).append(rcNameSeparator()) - .append(QbsProject::productDisplayName(project->qbsProject(), product)); - return Core::Id::fromString(id); -} - static QString uniqueProductNameFromId(Core::Id id) { const QString suffix = id.suffixAfter(QBS_RC_PREFIX); @@ -353,42 +345,25 @@ QbsRunConfigurationFactory::QbsRunConfigurationFactory(QObject *parent) : IRunConfigurationFactory(parent) { setObjectName("QbsRunConfigurationFactory"); - registerRunConfiguration(); + registerRunConfiguration(QBS_RC_PREFIX); setSupportedProjectType(); setSupportedTargetDeviceTypes({Constants::DESKTOP_DEVICE_TYPE}); } -bool QbsRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const +bool QbsRunConfigurationFactory::canCreateHelper(Target *parent, const QString &buildTarget) const { - if (!canHandle(parent)) - return false; - QbsProject *project = static_cast(parent->project()); - return findProduct(project->qbsProjectData(), uniqueProductNameFromId(id)).isValid(); + QString product = buildTarget.left(buildTarget.indexOf(rcNameSeparator())); + return findProduct(project->qbsProjectData(), product).isValid(); } -bool QbsRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const -{ - if (!canHandle(parent)) - return false; - return idFromMap(map).toString().startsWith(QLatin1String(QBS_RC_PREFIX)); -} - -bool QbsRunConfigurationFactory::canClone(Target *parent, RunConfiguration *source) const -{ - return canCreate(parent, source->id()); -} - -QList QbsRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const +QList QbsRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const { QList products; - if (!canHandle(parent)) - return QList(); - QbsProject *project = static_cast(parent->project()); if (!project || !project->qbsProject().isValid()) - return QList(); + return {}; foreach (const qbs::ProductData &product, project->qbsProjectData().allProducts()) { if (product.isRunnable() && product.isEnabled()) @@ -405,13 +380,17 @@ QList QbsRunConfigurationFactory::availableCreationIds(Target *parent, } return Utils::transform(products, [project](const qbs::ProductData &product) { - return idFromProduct(project, product); + return QString(QbsProject::uniqueProductName(product) + rcNameSeparator() + + QbsProject::productDisplayName(project->qbsProject(), product)); }); } -QString QbsRunConfigurationFactory::displayNameForId(Core::Id id) const +QString QbsRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const { - return productDisplayNameFromId(id); + const int sepPos = buildTarget.indexOf(rcNameSeparator()); + if (sepPos == -1) + return buildTarget; + return buildTarget.mid(sepPos + rcNameSeparator().count()); } } // namespace Internal diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h index 6f190fdd182..2d5ac1d2636 100644 --- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h +++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h @@ -108,12 +108,10 @@ class QbsRunConfigurationFactory : public ProjectExplorer::IRunConfigurationFact public: explicit QbsRunConfigurationFactory(QObject *parent = 0); - bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override; - bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override; - bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const override; + bool canCreateHelper(ProjectExplorer::Target *parent, const QString &suffix) const override; - QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const override; - QString displayNameForId(Core::Id id) const override; + QList availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; + QString displayNameForBuildTarget(const QString &buildTarget) const override; }; } // namespace Internal diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp index 5d957b85978..aa6deea3851 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp +++ b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp @@ -97,7 +97,7 @@ QString QmakeAndroidRunConfiguration::defaultDisplayName() return node->displayName(); } - return displayNameForId(id()); + return QString(); } QString QmakeAndroidRunConfiguration::disabledReason() const @@ -116,11 +116,6 @@ QString QmakeAndroidRunConfiguration::buildSystemTarget() const return qmakeProject()->mapProFilePathToTarget(m_proFilePath); } -QString QmakeAndroidRunConfiguration::displayNameForId(Core::Id id) -{ - return pathFromId(id).toFileInfo().completeBaseName(); -} - QmakeProject *QmakeAndroidRunConfiguration::qmakeProject() const { Target *t = target(); diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h index 1c367287fef..7a85d5bbb4b 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h +++ b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h @@ -50,8 +50,6 @@ public: QString buildSystemTarget() const final; - static QString displayNameForId(Core::Id id); - private: friend class ProjectExplorer::IRunConfigurationFactory; void initialize(Core::Id id) override; diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp index 5271d599c81..ee5dff0a149 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp +++ b/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp @@ -49,42 +49,24 @@ static const char ANDROID_RC_ID_PREFIX[] = "Qt4ProjectManager.AndroidRunConfigur QmakeAndroidRunConfigurationFactory::QmakeAndroidRunConfigurationFactory(QObject *parent) : IRunConfigurationFactory(parent) { - registerRunConfiguration(); + registerRunConfiguration(ANDROID_RC_ID_PREFIX); setSupportedProjectType(); } -QString QmakeAndroidRunConfigurationFactory::displayNameForId(Core::Id id) const +QString QmakeAndroidRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const { - return QmakeAndroidRunConfiguration::displayNameForId(id); + return QFileInfo(buildTarget).completeBaseName(); } -bool QmakeAndroidRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const +bool QmakeAndroidRunConfigurationFactory::canCreateHelper(Target *parent, const QString &buildTarget) const { - if (!canHandle(parent)) - return false; - return availableCreationIds(parent).contains(id); + return availableBuildTargets(parent, UserCreate).contains(buildTarget); } -bool QmakeAndroidRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const +QList QmakeAndroidRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const { - if (!canHandle(parent)) - return false; - return ProjectExplorer::idFromMap(map).name().startsWith(ANDROID_RC_ID_PREFIX); -} - -bool QmakeAndroidRunConfigurationFactory::canClone(Target *parent, RunConfiguration *source) const -{ - return canCreate(parent, source->id()); -} - -QList QmakeAndroidRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const -{ - if (!canHandle(parent)) - return QList(); - auto project = static_cast(parent->project()); - return project->creationIds(ANDROID_RC_ID_PREFIX, mode, - {ProjectType::ApplicationTemplate, ProjectType::SharedLibraryTemplate}); + return project->buildTargets(mode, {ProjectType::ApplicationTemplate, ProjectType::SharedLibraryTemplate}); } bool QmakeAndroidRunConfigurationFactory::canHandle(Target *t) const diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.h b/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.h index a84ca16937d..0d9d3202044 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.h +++ b/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.h @@ -43,12 +43,10 @@ class QmakeAndroidRunConfigurationFactory : public ProjectExplorer::IRunConfigur public: explicit QmakeAndroidRunConfigurationFactory(QObject *parent = 0); - QString displayNameForId(Core::Id id) const override; - QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode = UserCreate) const override; + QList availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; + QString displayNameForBuildTarget(const QString &buildTarget) const override; - bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override; - bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override; - bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const override; + bool canCreateHelper(ProjectExplorer::Target *parent, const QString &suffix) const override; QList runConfigurationsForNode(ProjectExplorer::Target *t, ProjectExplorer::Node *n); diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp index 0b2c311faa6..0fc94abbeaa 100644 --- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp @@ -67,11 +67,6 @@ const char PRO_FILE_KEY[] = "Qt4ProjectManager.Qt4RunConfiguration.ProFile"; const char USE_DYLD_IMAGE_SUFFIX_KEY[] = "Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix"; const char USE_LIBRARY_SEARCH_PATH[] = "QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath"; -static Utils::FileName pathFromId(Core::Id id) -{ - return Utils::FileName::fromString(id.suffixAfter(QMAKE_RC_PREFIX)); -} - // // QmakeRunConfiguration // @@ -96,7 +91,7 @@ DesktopQmakeRunConfiguration::DesktopQmakeRunConfiguration(Target *target) void DesktopQmakeRunConfiguration::initialize(Core::Id id) { RunConfiguration::initialize(id); - m_proFilePath = pathFromId(id); + m_proFilePath = FileName::fromString(id.suffixAfter(QMAKE_RC_PREFIX)); updateTargetInformation(); } @@ -440,43 +435,26 @@ DesktopQmakeRunConfigurationFactory::DesktopQmakeRunConfigurationFactory(QObject QmakeRunConfigurationFactory(parent) { setObjectName("DesktopQmakeRunConfigurationFactory"); - registerRunConfiguration(); + registerRunConfiguration(QMAKE_RC_PREFIX); setSupportedProjectType(); setSupportedTargetDeviceTypes({Constants::DESKTOP_DEVICE_TYPE}); } -bool DesktopQmakeRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const +bool DesktopQmakeRunConfigurationFactory::canCreateHelper(Target *parent, const QString &buildTarget) const { - if (!canHandle(parent)) - return false; QmakeProject *project = static_cast(parent->project()); - return project->hasApplicationProFile(pathFromId(id)); + return project->hasApplicationProFile(Utils::FileName::fromString(buildTarget)); } -bool DesktopQmakeRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const +QList DesktopQmakeRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const { - if (!canHandle(parent)) - return false; - return idFromMap(map).toString().startsWith(QLatin1String(QMAKE_RC_PREFIX)); -} - -bool DesktopQmakeRunConfigurationFactory::canClone(Target *parent, RunConfiguration *source) const -{ - return canCreate(parent, source->id()); -} - -QList DesktopQmakeRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const -{ - if (!canHandle(parent)) - return QList(); - QmakeProject *project = static_cast(parent->project()); - return project->creationIds(QMAKE_RC_PREFIX, mode); + return project->buildTargets(mode); } -QString DesktopQmakeRunConfigurationFactory::displayNameForId(Core::Id id) const +QString DesktopQmakeRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const { - return pathFromId(id).toFileInfo().completeBaseName(); + return QFileInfo(buildTarget).completeBaseName(); } QList DesktopQmakeRunConfigurationFactory::runConfigurationsForNode(Target *t, const Node *n) diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h index 4eda56fcde0..b59fa370bd5 100644 --- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h +++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h @@ -140,12 +140,10 @@ class DesktopQmakeRunConfigurationFactory : public QmakeRunConfigurationFactory public: explicit DesktopQmakeRunConfigurationFactory(QObject *parent = 0); - bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override; - bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override; - bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const override; + bool canCreateHelper(ProjectExplorer::Target *parent, const QString &suffix) const override; - QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const override; - QString displayNameForId(Core::Id id) const override; + QList availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; + QString displayNameForBuildTarget(const QString &buildTarget) const override; QList runConfigurationsForNode(ProjectExplorer::Target *t, const ProjectExplorer::Node *n) override; diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index b8e9ffb77f9..bf0c16cba51 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -773,9 +773,8 @@ bool QmakeProject::hasApplicationProFile(const FileName &path) const return Utils::contains(list, Utils::equal(&QmakeProFile::filePath, path)); } -QList QmakeProject::creationIds(Core::Id base, - IRunConfigurationFactory::CreationMode mode, - const QList &projectTypes) +QList QmakeProject::buildTargets(IRunConfigurationFactory::CreationMode mode, + const QList &projectTypes) { QList realTypes = projectTypes; if (realTypes.isEmpty()) @@ -790,9 +789,7 @@ QList QmakeProject::creationIds(Core::Id base, temp = filtered.isEmpty() ? files : filtered; } - return Utils::transform(temp, [&base](QmakeProFile *f) { - return base.withSuffix(f->filePath().toString()); - }); + return Utils::transform(temp, [](QmakeProFile *f) { return f->filePath().toString(); }); } void QmakeProject::activeTargetWasChanged() diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.h b/src/plugins/qmakeprojectmanager/qmakeproject.h index 717c11951bf..8fa4ab5c97d 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.h +++ b/src/plugins/qmakeprojectmanager/qmakeproject.h @@ -48,12 +48,8 @@ namespace ProjectExplorer { class DeploymentData; } namespace QtSupport { class ProFileReader; } namespace QmakeProjectManager { -class QmakeBuildConfiguration; -namespace Internal { -class CentralizedFolderWatcher; -class QmakeProjectFiles; -} +namespace Internal { class CentralizedFolderWatcher; } class QMAKEPROJECTMANAGER_EXPORT QmakeProject : public ProjectExplorer::Project { @@ -77,8 +73,7 @@ public: QList applicationProFiles(Parsing parse = ExactParse) const; bool hasApplicationProFile(const Utils::FileName &path) const; - QList creationIds(Core::Id base, - ProjectExplorer::IRunConfigurationFactory::CreationMode mode, + QList buildTargets(ProjectExplorer::IRunConfigurationFactory::CreationMode mode, const QList &projectTypes = {}); static void notifyChanged(const Utils::FileName &name); diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanagerconstants.h b/src/plugins/qmlprojectmanager/qmlprojectmanagerconstants.h index 783a067b741..ff0b39b3b36 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectmanagerconstants.h +++ b/src/plugins/qmlprojectmanager/qmlprojectmanagerconstants.h @@ -30,6 +30,8 @@ namespace QmlProjectManager { namespace Constants { +const char QML_RC_ID[] = "QmlProjectManager.QmlRunConfiguration"; + const char QML_VIEWER_RC_ID[] = "QmlProjectManager.QmlRunConfiguration"; const char QML_SCENE_RC_ID[] = "QmlProjectManager.QmlRunConfiguration.QmlScene"; const char QML_VIEWER_ARGUMENTS_KEY[] = "QmlProjectManager.QmlRunConfiguration.QDeclarativeViewerArguments"; diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp index 053b2fc98df..77bcc466175 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp @@ -36,67 +36,58 @@ namespace QmlProjectManager { namespace Internal { +const char QML_VIEWER_SUFFIX[] = ""; +const char QML_SCENE_SUFFIX[] = ".QmlScene"; + QmlProjectRunConfigurationFactory::QmlProjectRunConfigurationFactory(QObject *parent) : ProjectExplorer::IRunConfigurationFactory(parent) { setObjectName("QmlProjectRunConfigurationFactory"); - registerRunConfiguration(); + registerRunConfiguration(Constants::QML_RC_ID); setSupportedProjectType(); setSupportedTargetDeviceTypes({ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE}); } -QList QmlProjectRunConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const +QList QmlProjectRunConfigurationFactory::availableBuildTargets(ProjectExplorer::Target *parent, CreationMode) const { - Q_UNUSED(mode) - if (!canHandle(parent)) - return QList(); - QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(parent->kit()); + const QString viewer = QML_VIEWER_SUFFIX; + const QString scene = QML_SCENE_SUFFIX; + // First id will be the default run configuration - QList list; if (version && version->qtVersion() >= QtSupport::QtVersionNumber(5, 0, 0)) { QmlProject *project = static_cast(parent->project()); switch (project->defaultImport()) { case QmlProject::QtQuick1Import: - list << Core::Id(Constants::QML_VIEWER_RC_ID); - break; + return {viewer}; case QmlProject::QtQuick2Import: - list << Core::Id(Constants::QML_SCENE_RC_ID); - break; + return {scene}; case QmlProject::UnknownImport: default: - list << Core::Id(Constants::QML_SCENE_RC_ID); - list << Core::Id(Constants::QML_VIEWER_RC_ID); - break; + return {scene, viewer}; } - } else { - list << Core::Id(Constants::QML_VIEWER_RC_ID); } - - return list; + return {viewer}; } -QString QmlProjectRunConfigurationFactory::displayNameForId(Core::Id id) const +QString QmlProjectRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const { - if (id == Constants::QML_VIEWER_RC_ID) + if (buildTarget == QML_VIEWER_SUFFIX) return tr("QML Viewer"); - if (id == Constants::QML_SCENE_RC_ID) + if (buildTarget == QML_SCENE_SUFFIX) return tr("QML Scene"); return QString(); } -bool QmlProjectRunConfigurationFactory::canCreate(ProjectExplorer::Target *parent, - const Core::Id id) const +bool QmlProjectRunConfigurationFactory::canCreateHelper(ProjectExplorer::Target *parent, + const QString &buildTarget) const { - if (!canHandle(parent)) - return false; - - if (id == Constants::QML_VIEWER_RC_ID) + if (buildTarget == QML_VIEWER_SUFFIX) return true; - if (id == Constants::QML_SCENE_RC_ID) { + if (buildTarget == QML_SCENE_SUFFIX) { // only support qmlscene if it's Qt5 QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(parent->kit()); @@ -105,16 +96,6 @@ bool QmlProjectRunConfigurationFactory::canCreate(ProjectExplorer::Target *paren return false; } -bool QmlProjectRunConfigurationFactory::canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const -{ - return parent && canCreate(parent, ProjectExplorer::idFromMap(map)); -} - -bool QmlProjectRunConfigurationFactory::canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const -{ - return canCreate(parent, source->id()); -} - } // namespace Internal } // namespace QmlProjectManager diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h index 8988e482e57..3dd422f00ad 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h @@ -37,12 +37,10 @@ class QmlProjectRunConfigurationFactory : public ProjectExplorer::IRunConfigurat public: explicit QmlProjectRunConfigurationFactory(QObject *parent = 0); - QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const override; - QString displayNameForId(Core::Id id) const override; + QList availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; + QString displayNameForBuildTarget(const QString &buildTarget) const override; - bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override; - bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override; - bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const override; + bool canCreateHelper(ProjectExplorer::Target *parent, const QString &suffix) const override; }; } // namespace Internal diff --git a/src/plugins/qnx/qnxrunconfigurationfactory.cpp b/src/plugins/qnx/qnxrunconfigurationfactory.cpp index 4ff952f79cb..e607615804a 100644 --- a/src/plugins/qnx/qnxrunconfigurationfactory.cpp +++ b/src/plugins/qnx/qnxrunconfigurationfactory.cpp @@ -36,64 +36,33 @@ namespace Qnx { namespace Internal { -static Utils::FileName pathFromId(Core::Id id) -{ - return Utils::FileName::fromString(id.suffixAfter(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX)); -} - QnxRunConfigurationFactory::QnxRunConfigurationFactory(QObject *parent) : ProjectExplorer::IRunConfigurationFactory(parent) { - registerRunConfiguration(); + registerRunConfiguration(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX); setSupportedTargetDeviceTypes({Constants::QNX_QNX_OS_TYPE}); } -QList QnxRunConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const +QList QnxRunConfigurationFactory::availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const { - using QmakeProjectManager::QmakeProject; - if (!canHandle(parent)) - return QList(); - - auto project = qobject_cast(parent->project()); + auto project = qobject_cast(parent->project()); if (!project) - return QList(); - - return project->creationIds(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX, mode); + return {}; + return project->buildTargets(mode); } -QString QnxRunConfigurationFactory::displayNameForId(Core::Id id) const +QString QnxRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const { - const Utils::FileName path = pathFromId(id); - if (path.isEmpty()) + if (buildTarget.isEmpty()) return QString(); - - if (id.name().startsWith(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX)) - return tr("%1 on QNX Device").arg(path.toFileInfo().completeBaseName()); - - return QString(); + return tr("%1 on QNX Device").arg(QFileInfo(buildTarget).completeBaseName()); } -bool QnxRunConfigurationFactory::canCreate(ProjectExplorer::Target *parent, Core::Id id) const +bool QnxRunConfigurationFactory::canCreateHelper(ProjectExplorer::Target *parent, + const QString &buildTarget) const { - if (!canHandle(parent) || !id.name().startsWith(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX)) - return false; - - QmakeProjectManager::QmakeProject *qt4Project = qobject_cast(parent->project()); - if (!qt4Project) - return false; - - return qt4Project->hasApplicationProFile(pathFromId(id)); -} - -bool QnxRunConfigurationFactory::canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const -{ - return canHandle(parent) - && ProjectExplorer::idFromMap(map).name().startsWith(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX); -} - -bool QnxRunConfigurationFactory::canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const -{ - return canCreate(parent, source->id()); + auto project = qobject_cast(parent->project()); + return project->hasApplicationProFile(Utils::FileName::fromString(buildTarget)); } } // namespace Internal diff --git a/src/plugins/qnx/qnxrunconfigurationfactory.h b/src/plugins/qnx/qnxrunconfigurationfactory.h index 3076e793f7a..896c13a44b3 100644 --- a/src/plugins/qnx/qnxrunconfigurationfactory.h +++ b/src/plugins/qnx/qnxrunconfigurationfactory.h @@ -38,12 +38,10 @@ class QnxRunConfigurationFactory : public ProjectExplorer::IRunConfigurationFact public: explicit QnxRunConfigurationFactory(QObject *parent = 0); - QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const override; - QString displayNameForId(Core::Id id) const override; + QList availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; + QString displayNameForBuildTarget(const QString &buildTarget) const override; - bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override; - bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override; - bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const override; + bool canCreateHelper(ProjectExplorer::Target *parent, const QString &suffix) const override; }; } // namespace Internal diff --git a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp index f6fcd0ed34f..b59ab965930 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp +++ b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp @@ -30,73 +30,40 @@ #include "remotelinuxrunconfiguration.h" #include -#include -#include #include #include -#include - using namespace ProjectExplorer; namespace RemoteLinux { namespace Internal { -static QString stringFromId(Core::Id id) -{ - QByteArray idStr = id.name(); - if (!idStr.startsWith(RemoteLinuxRunConfiguration::IdPrefix)) - return QString(); - return QString::fromUtf8(idStr.mid(int(strlen(RemoteLinuxRunConfiguration::IdPrefix)))); -} - // RemoteLinuxRunConfigurationFactory RemoteLinuxRunConfigurationFactory::RemoteLinuxRunConfigurationFactory(QObject *parent) : IRunConfigurationFactory(parent) { setObjectName("RemoteLinuxRunConfigurationFactory"); - registerRunConfiguration(); + registerRunConfiguration(RemoteLinuxRunConfiguration::IdPrefix); setSupportedTargetDeviceTypes({RemoteLinux::Constants::GenericLinuxOsType}); } -bool RemoteLinuxRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const +bool RemoteLinuxRunConfigurationFactory::canCreateHelper(Target *parent, const QString &buildTarget) const { - if (!canHandle(parent)) - return false; - return parent->applicationTargets().hasTarget(stringFromId(id)); + return parent->applicationTargets().hasTarget(buildTarget); } -bool RemoteLinuxRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const +QList + RemoteLinuxRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode) const { - if (!canHandle(parent)) - return false; - const Core::Id id = idFromMap(map); - return id.name().startsWith(RemoteLinuxRunConfiguration::IdPrefix); + return Utils::transform(parent->applicationTargets().list, [](const BuildTargetInfo &bti) { + return bti.targetName; + }); } -bool RemoteLinuxRunConfigurationFactory::canClone(Target *parent, RunConfiguration *source) const +QString RemoteLinuxRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const { - auto rlrc = qobject_cast(source); - return rlrc && canCreate(parent, source->id()); -} - -QList RemoteLinuxRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const -{ - Q_UNUSED(mode) - QList result; - if (!canHandle(parent)) - return result; - - const Core::Id base = Core::Id(RemoteLinuxRunConfiguration::IdPrefix); - foreach (const BuildTargetInfo &bti, parent->applicationTargets().list) - result << base.withSuffix(bti.targetName); - return result; -} - -QString RemoteLinuxRunConfigurationFactory::displayNameForId(Core::Id id) const -{ - return stringFromId(id) + QLatin1Char(' ') + tr("(on Remote Generic Linux Host)"); + return buildTarget + ' ' + tr("(on Remote Generic Linux Host)"); } // RemoteLinuxCustomRunConfigurationFactory @@ -105,42 +72,17 @@ RemoteLinuxCustomRunConfigurationFactory::RemoteLinuxCustomRunConfigurationFacto : IRunConfigurationFactory(parent) { setObjectName("RemoteLinuxCustomRunConfiguration"); - registerRunConfiguration(); + registerRunConfiguration + (RemoteLinuxCustomRunConfiguration::runConfigId()); } -bool RemoteLinuxCustomRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const +QList + RemoteLinuxCustomRunConfigurationFactory::availableBuildTargets(Target *, CreationMode) const { - if (!canHandle(parent)) - return false; - return id == RemoteLinuxCustomRunConfiguration::runConfigId(); + return {QString()}; } -bool RemoteLinuxCustomRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const -{ - if (!canHandle(parent)) - return false; - const Core::Id id = idFromMap(map); - return id == RemoteLinuxCustomRunConfiguration::runConfigId(); -} - -bool RemoteLinuxCustomRunConfigurationFactory::canClone(Target *parent, RunConfiguration *source) const -{ - auto rlrc = qobject_cast(source); - return rlrc && canCreate(parent, source->id()); -} - -QList RemoteLinuxCustomRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const -{ - Q_UNUSED(mode) - QList result; - if (!canHandle(parent)) - return result; - - result << RemoteLinuxCustomRunConfiguration::runConfigId(); - return result; -} - -QString RemoteLinuxCustomRunConfigurationFactory::displayNameForId(Core::Id) const +QString RemoteLinuxCustomRunConfigurationFactory::displayNameForBuildTarget(const QString &) const { return RemoteLinuxCustomRunConfiguration::runConfigDefaultDisplayName(); } diff --git a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h index 9011f9c8b7a..d09497cf7c5 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h +++ b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h @@ -37,12 +37,10 @@ class RemoteLinuxRunConfigurationFactory : public ProjectExplorer::IRunConfigura public: explicit RemoteLinuxRunConfigurationFactory(QObject *parent = 0); - QString displayNameForId(Core::Id id) const override; - QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const override; + QList availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; + QString displayNameForBuildTarget(const QString &buildTarget) const override; - bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override; - bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override; - bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const override; + bool canCreateHelper(ProjectExplorer::Target *parent, const QString &suffix) const override; }; class RemoteLinuxCustomRunConfigurationFactory : public ProjectExplorer::IRunConfigurationFactory @@ -52,12 +50,8 @@ class RemoteLinuxCustomRunConfigurationFactory : public ProjectExplorer::IRunCon public: explicit RemoteLinuxCustomRunConfigurationFactory(QObject *parent = 0); - QString displayNameForId(Core::Id id) const override; - QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const override; - - bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override; - bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override; - bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const override; + QList availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; + QString displayNameForBuildTarget(const QString &buildTarget) const override; }; } // namespace Internal diff --git a/src/plugins/winrt/winrtrunfactories.cpp b/src/plugins/winrt/winrtrunfactories.cpp index f1601360368..0cf68b7df9c 100644 --- a/src/plugins/winrt/winrtrunfactories.cpp +++ b/src/plugins/winrt/winrtrunfactories.cpp @@ -43,48 +43,28 @@ namespace Internal { WinRtRunConfigurationFactory::WinRtRunConfigurationFactory() { - registerRunConfiguration(); + registerRunConfiguration(Constants::WINRT_RC_PREFIX); setSupportedProjectType(); setSupportedTargetDeviceTypes({Constants::WINRT_DEVICE_TYPE_LOCAL, Constants::WINRT_DEVICE_TYPE_PHONE, Constants::WINRT_DEVICE_TYPE_EMULATOR}); } -QList WinRtRunConfigurationFactory::availableCreationIds(Target *parent, +QList WinRtRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const { - if (!canHandle(parent)) - return QList(); - QmakeProject *project = static_cast(parent->project()); - return project->creationIds(Constants::WINRT_RC_PREFIX, mode); + return project->buildTargets(mode); } -QString WinRtRunConfigurationFactory::displayNameForId(Core::Id id) const +QString WinRtRunConfigurationFactory::displayNameForBuildTarget(const QString &) const { - Q_UNUSED(id); return tr("Run App Package"); } -bool WinRtRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const +bool WinRtRunConfigurationFactory::canCloneHelper(Target *, RunConfiguration *) const { - Q_UNUSED(id); - return canHandle(parent); -} - -bool WinRtRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const -{ - if (!canHandle(parent)) - return false; - - return idFromMap(map).toString().startsWith(QLatin1String(Constants::WINRT_RC_PREFIX)); -} - -bool WinRtRunConfigurationFactory::canClone(Target *parent, RunConfiguration *product) const -{ - Q_UNUSED(parent); - Q_UNUSED(product); - return false; + return false; // FIXME: Are they really unclonable? } } // namespace Internal diff --git a/src/plugins/winrt/winrtrunfactories.h b/src/plugins/winrt/winrtrunfactories.h index 176f97fe605..999acba901c 100644 --- a/src/plugins/winrt/winrtrunfactories.h +++ b/src/plugins/winrt/winrtrunfactories.h @@ -38,11 +38,10 @@ class WinRtRunConfigurationFactory : public ProjectExplorer::IRunConfigurationF public: WinRtRunConfigurationFactory(); - QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const override; - QString displayNameForId(Core::Id id) const override; - bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override; - bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override; - bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *product) const override; + QList availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; + QString displayNameForBuildTarget(const QString &buildTarget) const override; + + bool canCloneHelper(ProjectExplorer::Target *, ProjectExplorer::RunConfiguration *) const override; }; } // namespace Internal