diff options
22 files changed, 42 insertions, 175 deletions
diff --git a/src/plugins/ios/iosrunconfiguration.cpp b/src/plugins/ios/iosrunconfiguration.cpp index 703461266b..09a3feebde 100644 --- a/src/plugins/ios/iosrunconfiguration.cpp +++ b/src/plugins/ios/iosrunconfiguration.cpp @@ -157,6 +157,11 @@ void IosRunConfiguration::updateEnabledState() return RunConfiguration::updateEnabledState(); } +bool IosRunConfiguration::canRunForNode(const Node *node) const +{ + return node->filePath() == m_profilePath; +} + IosDeployStep *IosRunConfiguration::deployStep() const { DeployConfiguration *config = target()->activeDeployConfiguration(); diff --git a/src/plugins/ios/iosrunconfiguration.h b/src/plugins/ios/iosrunconfiguration.h index 6e40b66573..4bdf92f046 100644 --- a/src/plugins/ios/iosrunconfiguration.h +++ b/src/plugins/ios/iosrunconfiguration.h @@ -74,6 +74,7 @@ private: friend class IosRunConfigurationWidget; void updateDisplayNames(); void updateEnabledState() final; + bool canRunForNode(const ProjectExplorer::Node *node) const final; Utils::FileName m_profilePath; IosDeviceType m_deviceType; diff --git a/src/plugins/ios/iosrunfactories.cpp b/src/plugins/ios/iosrunfactories.cpp index e626e8ac96..2faa99afba 100644 --- a/src/plugins/ios/iosrunfactories.cpp +++ b/src/plugins/ios/iosrunfactories.cpp @@ -59,11 +59,5 @@ IosRunConfigurationFactory::availableCreators(Target *parent) const ProjectType::SharedLibraryTemplate}); } -bool IosRunConfigurationFactory::hasRunConfigForProFile(RunConfiguration *rc, const Utils::FileName &n) const -{ - auto iosRc = qobject_cast<IosRunConfiguration *>(rc); - return iosRc && iosRc->profilePath() == n; -} - } // namespace Internal } // namespace Ios diff --git a/src/plugins/ios/iosrunfactories.h b/src/plugins/ios/iosrunfactories.h index 08159b2456..0f2b53b02b 100644 --- a/src/plugins/ios/iosrunfactories.h +++ b/src/plugins/ios/iosrunfactories.h @@ -26,17 +26,11 @@ #pragma once #include <projectexplorer/runconfiguration.h> -#include <qmakeprojectmanager/qmakerunconfigurationfactory.h> - -namespace ProjectExplorer { -class Target; -class Node; -} // namespace ProjectExplorer namespace Ios { namespace Internal { -class IosRunConfigurationFactory : public QmakeProjectManager::QmakeRunConfigurationFactory +class IosRunConfigurationFactory : public ProjectExplorer::RunConfigurationFactory { Q_OBJECT @@ -45,8 +39,6 @@ public: QList<ProjectExplorer::RunConfigurationCreationInfo> availableCreators(ProjectExplorer::Target *parent) const override; - - bool hasRunConfigForProFile(ProjectExplorer::RunConfiguration *rc, const Utils::FileName &n) const override; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index b4fab761f5..4c632abf8b 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -2969,10 +2969,17 @@ void ProjectExplorerPluginPrivate::updateContextMenuActions() pn = const_cast<ProjectNode*>(currentNode->asProjectNode()); if (pn) { - if (ProjectTree::currentProject() && pn == ProjectTree::currentProject()->rootProjectNode()) { + Project *project = ProjectTree::currentProject(); + if (project && pn == project->rootProjectNode()) { m_runActionContextMenu->setVisible(true); } else { - QList<RunConfiguration *> runConfigs = pn->runConfigurations(); + QList<RunConfiguration *> runConfigs; + if (Target *t = project->activeTarget()) { + for (RunConfiguration *rc : t->runConfigurations()) { + if (rc->canRunForNode(pn)) + runConfigs.append(rc); + } + } if (runConfigs.count() == 1) { m_runActionContextMenu->setVisible(true); m_runActionContextMenu->setData(QVariant::fromValue(runConfigs.first())); diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index f5e03c3144..3a6a486288 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -846,16 +846,6 @@ bool ProjectNode::deploysFolder(const QString &folder) const return false; } -/*! - \function bool ProjectNode::runConfigurations() const - - Returns a list of \c RunConfiguration suitable for this node. - */ -QList<RunConfiguration *> ProjectNode::runConfigurations() const -{ - return QList<RunConfiguration *>(); -} - ProjectNode *ProjectNode::projectNode(const Utils::FileName &file) const { for (Node *node : m_nodes) { diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index 09792a2a36..76eedf6a53 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -41,7 +41,6 @@ namespace Core { class IVersionControl; } namespace ProjectExplorer { class Project; -class RunConfiguration; enum class NodeType : quint16 { File = 1, @@ -333,8 +332,6 @@ public: // by default returns false virtual bool deploysFolder(const QString &folder) const; - virtual QList<RunConfiguration *> runConfigurations() const; - ProjectNode *projectNode(const Utils::FileName &file) const; ProjectNode *asProjectNode() final { return this; } diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index 18f7d86645..cbbe52d729 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -48,6 +48,7 @@ namespace ProjectExplorer { class Abi; class BuildConfiguration; class IRunConfigurationAspect; +class Node; class RunConfigurationFactory; class RunConfiguration; class RunConfigurationCreationInfo; @@ -251,6 +252,7 @@ public: void addExtraAspect(IRunConfigurationAspect *aspect); static RunConfiguration *startupRunConfiguration(); + virtual bool canRunForNode(const ProjectExplorer::Node *) const { return false; } using AspectFactory = std::function<IRunConfigurationAspect *(RunConfiguration *)>; template <class T> static void registerAspect() diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index 37da6326ab..9bdb87d9eb 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -429,24 +429,6 @@ bool QbsProductNode::renameFile(const QString &filePath, const QString &newFileP return prjNode->project()->renameFileInProduct(filePath, newFilePath, m_qbsProductData, grp); } -QList<ProjectExplorer::RunConfiguration *> QbsProductNode::runConfigurations() const -{ - QList<ProjectExplorer::RunConfiguration *> result; - auto pn = dynamic_cast<const QbsProjectNode *>(managingProject()); - if (!isEnabled() || !pn || m_qbsProductData.targetExecutable().isEmpty()) - return result; - - foreach (ProjectExplorer::RunConfiguration *rc, pn->project()->activeTarget()->runConfigurations()) { - QbsRunConfiguration *qbsRc = qobject_cast<QbsRunConfiguration *>(rc); - if (!qbsRc) - continue; - if (qbsRc->uniqueProductName() == QbsProject::uniqueProductName(qbsProductData())) - result << qbsRc; - } - - return result; -} - // -------------------------------------------------------------------- // QbsProjectNode: // -------------------------------------------------------------------- diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h index f6d02f16b5..45a7bb4a3a 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.h +++ b/src/plugins/qbsprojectmanager/qbsnodes.h @@ -110,8 +110,6 @@ public: const qbs::ProductData qbsProductData() const { return m_qbsProductData; } - QList<ProjectExplorer::RunConfiguration *> runConfigurations() const override; - private: const qbs::ProductData m_qbsProductData; }; diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index a30c33e30f..c45a595dff 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -45,13 +45,11 @@ namespace Core { class IDocument; } namespace CppTools { class CppProjectUpdater; } -namespace ProjectExplorer { class BuildConfiguration; } namespace QbsProjectManager { namespace Internal { class QbsProjectParser; -class QbsBuildConfiguration; class QbsProject : public ProjectExplorer::Project { diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp index 790b9ef5ca..e8da9cded2 100644 --- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp @@ -25,7 +25,9 @@ #include "qbsrunconfiguration.h" +#include "qbsnodes.h" #include "qbsprojectmanagerconstants.h" +#include "qbsproject.h" #include <coreplugin/messagemanager.h> #include <coreplugin/variablechooser.h> @@ -304,6 +306,14 @@ void QbsRunConfiguration::handleBuildSystemDataUpdated() emit enabledChanged(); } +bool QbsRunConfiguration::canRunForNode(const Node *node) const +{ + if (auto pn = dynamic_cast<const QbsProductNode *>(node)) + return m_uniqueProductName == QbsProject::uniqueProductName(pn->qbsProductData()); + + return false; +} + // -------------------------------------------------------------------- // QbsRunConfigurationFactory: // -------------------------------------------------------------------- diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h index c6098f9f1d..0e76c9cb2b 100644 --- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h +++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h @@ -70,6 +70,7 @@ private: bool fromMap(const QVariantMap &map) final; QString extraId() const final; void doAdditionalSetup(const ProjectExplorer::RunConfigurationCreationInfo &rci) final; + bool canRunForNode(const ProjectExplorer::Node *node) const final; QString baseWorkingDirectory() const; QString defaultDisplayName(); diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp index d2c54dc65d..78305d31dd 100644 --- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp @@ -350,6 +350,11 @@ Utils::FileName DesktopQmakeRunConfiguration::proFilePath() const return m_proFilePath; } +bool DesktopQmakeRunConfiguration::canRunForNode(const Node *node) const +{ + return node->filePath() == m_proFilePath; +} + QmakeProject *DesktopQmakeRunConfiguration::qmakeProject() const { return static_cast<QmakeProject *>(target()->project()); @@ -450,11 +455,5 @@ DesktopQmakeRunConfigurationFactory::availableCreators(Target *parent) const return project->runConfigurationCreators(this); } -bool DesktopQmakeRunConfigurationFactory::hasRunConfigForProFile(RunConfiguration *rc, const Utils::FileName &n) const -{ - auto qmakeRc = qobject_cast<DesktopQmakeRunConfiguration *>(rc); - return qmakeRc && qmakeRc->proFilePath() == n; -} - } // namespace Internal } // namespace QmakeProjectManager diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h index c938031dea..9a86a166f4 100644 --- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h +++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h @@ -25,8 +25,7 @@ #pragma once -#include <qmakeprojectmanager/qmakerunconfigurationfactory.h> - +#include <projectexplorer/runconfiguration.h> #include <projectexplorer/runnables.h> #include <utils/fileutils.h> @@ -45,7 +44,6 @@ class QmakeProFile; class QmakeProject; namespace Internal { -class DesktopQmakeRunConfigurationFactory; class DesktopQmakeRunConfiguration : public ProjectExplorer::RunConfiguration { @@ -98,6 +96,7 @@ private: bool isConsoleApplication() const; QmakeProject *qmakeProject() const; QmakeProFile *proFile() const; + bool canRunForNode(const ProjectExplorer::Node *node) const final; void updateTarget(); Utils::FileName m_proFilePath; // Full path to the Application Pro File @@ -131,7 +130,7 @@ private: QLineEdit *m_qmlDebugPort = nullptr; }; -class DesktopQmakeRunConfigurationFactory : public QmakeRunConfigurationFactory +class DesktopQmakeRunConfigurationFactory : public ProjectExplorer::RunConfigurationFactory { Q_OBJECT @@ -142,8 +141,6 @@ public: QList<ProjectExplorer::RunConfigurationCreationInfo> availableCreators(ProjectExplorer::Target *parent) const override; - - bool hasRunConfigForProFile(ProjectExplorer::RunConfiguration *rc, const Utils::FileName &n) const override; }; } // namespace Internal diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 787dc4304d..5d71c39c64 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -25,7 +25,6 @@ #include "qmakenodes.h" #include "qmakeproject.h" -#include "qmakerunconfigurationfactory.h" #include <projectexplorer/buildconfiguration.h> #include <projectexplorer/target.h> @@ -38,26 +37,6 @@ using namespace Utils; namespace QmakeProjectManager { -static QList<RunConfiguration *> qmakeRunConfigurationsForNode(Target *t, const Node *node) -{ - QList<RunConfiguration *> result; - if (!t) - return result; // Project was not set up yet. - - const FileName file = node->filePath(); - for (auto factory : RunConfigurationFactory::allRunConfigurationFactories()) { - if (auto qmakeFactory = qobject_cast<QmakeRunConfigurationFactory *>(factory)) { - if (qmakeFactory->canHandle(t)) { - result.append(Utils::filtered(t->runConfigurations(), [qmakeFactory, file](RunConfiguration *rc) { - return qmakeFactory->hasRunConfigForProFile(rc, file); - })); - } - } - } - - return result; -} - /*! \class QmakePriFileNode Implements abstract ProjectNode class @@ -86,11 +65,6 @@ bool QmakePriFileNode::deploysFolder(const QString &folder) const return pri ? pri->deploysFolder(folder) : false; } -QList<RunConfiguration *> QmakePriFileNode::runConfigurations() const -{ - return qmakeRunConfigurationsForNode(m_project->activeTarget(), this); -} - QmakeProFileNode *QmakePriFileNode::proFileNode() const { return m_qmakeProFileNode; @@ -157,7 +131,11 @@ bool QmakePriFileNode::supportsAction(ProjectAction action, const Node *node) co } if (action == HasSubProjectRunConfigurations) { - return !qmakeRunConfigurationsForNode(m_project->activeTarget(), node).isEmpty(); + if (Target *t = m_project->activeTarget()) { + auto canRunForNode = [node](RunConfiguration *rc) { return rc->canRunForNode(node); }; + if (Utils::anyOf(t->runConfigurations(), canRunForNode)) + return true; + } } return false; diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.h b/src/plugins/qmakeprojectmanager/qmakenodes.h index 56a2b6be62..57f1b7bec8 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.h +++ b/src/plugins/qmakeprojectmanager/qmakenodes.h @@ -64,7 +64,6 @@ public: AddNewInformation addNewInformation(const QStringList &files, Node *context) const override; bool deploysFolder(const QString &folder) const override; - QList<ProjectExplorer::RunConfiguration *> runConfigurations() const override; QmakeProFileNode *proFileNode() const; diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index 4c47e34d2f..6a62d98fb9 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -28,7 +28,6 @@ #include "qmakeproject.h" #include "qmakeprojectmanagerconstants.h" #include "qmakebuildconfiguration.h" -#include "qmakerunconfigurationfactory.h" #include <coreplugin/dialogs/readonlyfilesdialog.h> #include <coreplugin/documentmanager.h> diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro index 765b12b515..d2da5d86b9 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro @@ -10,7 +10,6 @@ HEADERS += \ qmakekitconfigwidget.h \ qmakeparsernodes.h \ qmakeprojectimporter.h \ - qmakerunconfigurationfactory.h \ qmakeprojectmanagerplugin.h \ qmakeprojectmanager.h \ qmakeproject.h \ @@ -51,7 +50,6 @@ SOURCES += \ qmakekitinformation.cpp \ qmakeparsernodes.cpp \ qmakeprojectimporter.cpp \ - qmakerunconfigurationfactory.cpp \ qmakeprojectmanagerplugin.cpp \ qmakeprojectmanager.cpp \ qmakeproject.cpp \ diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs index 829d1eb493..ddeeb8c53a 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs @@ -42,7 +42,6 @@ Project { "qmakeparser.cpp", "qmakeparser.h", "qmakeparsernodes.cpp", "qmakeparsernodes.h", "qmakeprojectimporter.cpp", "qmakeprojectimporter.h", - "qmakerunconfigurationfactory.cpp", "qmakerunconfigurationfactory.h", "qmakestep.cpp", "qmakestep.h", "qmakestep.ui", "qmakebuildconfiguration.cpp", "qmakebuildconfiguration.h", "qmakenodes.cpp", "qmakenodes.h", diff --git a/src/plugins/qmakeprojectmanager/qmakerunconfigurationfactory.cpp b/src/plugins/qmakeprojectmanager/qmakerunconfigurationfactory.cpp deleted file mode 100644 index 2c100d122e..0000000000 --- a/src/plugins/qmakeprojectmanager/qmakerunconfigurationfactory.cpp +++ /dev/null @@ -1,33 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "qmakerunconfigurationfactory.h" - -namespace QmakeProjectManager { - -QmakeRunConfigurationFactory::QmakeRunConfigurationFactory() -{ } - -} // namespace QmakeProjectManager diff --git a/src/plugins/qmakeprojectmanager/qmakerunconfigurationfactory.h b/src/plugins/qmakeprojectmanager/qmakerunconfigurationfactory.h deleted file mode 100644 index 6a9ebe842f..0000000000 --- a/src/plugins/qmakeprojectmanager/qmakerunconfigurationfactory.h +++ /dev/null @@ -1,46 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#pragma once - -#include "qmakeprojectmanager_global.h" - -#include <projectexplorer/runconfiguration.h> - -namespace Utils { class FileName; } - -namespace QmakeProjectManager { - -class QMAKEPROJECTMANAGER_EXPORT QmakeRunConfigurationFactory : public ProjectExplorer::RunConfigurationFactory -{ - Q_OBJECT - -public: - QmakeRunConfigurationFactory(); - - virtual bool hasRunConfigForProFile(ProjectExplorer::RunConfiguration *rc, const Utils::FileName &n) const = 0; -}; - -} // namespace QmakeProjectManager |