From a67b1e97decb40432832ca85d2a6795f3ce12a32 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 4 May 2018 11:13:43 +0200 Subject: [PATCH] Android: Merge run configuration into base class The base AndroidRunConfiguration as such is buildsystem agnostic now, it is, however not usable with other buildsystems as the apk build step relies on qmake specific information, so the run configuration factory stays on the buildsystem specific side for now. Change-Id: I00538846028cc060aceea15ffd2e63068450f1e8 Reviewed-by: Vikas Pachdha --- .../android/androidrunconfiguration.cpp | 30 +++++ src/plugins/android/androidrunconfiguration.h | 2 + .../androidextralibrarylistmodel.cpp | 10 +- .../createandroidmanifestwizard.cpp | 7 +- .../qmakeandroidbuildapkstep.cpp | 7 +- .../qmakeandroidrunconfiguration.cpp | 124 ------------------ .../qmakeandroidrunconfiguration.h | 60 --------- .../qmakeandroidsupport.cpp | 15 ++- .../qmakeandroidsupport.pro | 2 - .../qmakeandroidsupport.qbs | 2 - .../qmakeandroidsupportplugin.cpp | 22 +++- 11 files changed, 71 insertions(+), 210 deletions(-) delete mode 100644 src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp delete mode 100644 src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h diff --git a/src/plugins/android/androidrunconfiguration.cpp b/src/plugins/android/androidrunconfiguration.cpp index 48e6b5b0bee..385ede4a648 100644 --- a/src/plugins/android/androidrunconfiguration.cpp +++ b/src/plugins/android/androidrunconfiguration.cpp @@ -30,7 +30,9 @@ #include "androidrunconfigurationwidget.h" #include +#include #include + #include #include @@ -49,6 +51,9 @@ AndroidRunConfiguration::AndroidRunConfiguration(Target *target, Core::Id id) : RunConfiguration(target, id) { setOutputFormatter(); + connect(target->project(), &Project::parsingFinished, this, [this] { + updateTargetInformation(); + }); } void AndroidRunConfiguration::setPreStartShellCommands(const QStringList &cmdList) @@ -115,4 +120,29 @@ const QStringList &AndroidRunConfiguration::postFinishShellCommands() const return m_postFinishShellCommands; } +void AndroidRunConfiguration::updateTargetInformation() +{ + const BuildTargetInfo bti = buildTargetInfo(); + setDisplayName(bti.displayName); + setDefaultDisplayName(bti.displayName); +} + +QString AndroidRunConfiguration::disabledReason() const +{ + const BuildTargetInfo bti = buildTargetInfo(); + const QString projectFileName = bti.projectFilePath.toString(); + + if (project()->isParsing()) + return tr("The project file \"%1\" is currently being parsed.").arg(projectFileName); + + if (!project()->hasParsingData()) { + if (!bti.projectFilePath.exists()) + return tr("The project file \"%1\" does not exist.").arg(projectFileName); + + return tr("The project file \"%1\" could not be parsed.").arg(projectFileName); + } + + return QString(); +} + } // namespace Android diff --git a/src/plugins/android/androidrunconfiguration.h b/src/plugins/android/androidrunconfiguration.h index 2517785fdea..2146503ddf9 100644 --- a/src/plugins/android/androidrunconfiguration.h +++ b/src/plugins/android/androidrunconfiguration.h @@ -41,6 +41,7 @@ public: bool fromMap(const QVariantMap &map) override; QVariantMap toMap() const override; + QString disabledReason() const override; const QStringList &amStartExtraArgs() const; const QStringList &preStartShellCommands() const; @@ -51,6 +52,7 @@ private: void setPreStartShellCommands(const QStringList &cmdList); void setPostFinishShellCommands(const QStringList &cmdList); void setAmStartExtraArgs(const QStringList &args); + void updateTargetInformation(); QStringList m_amStartExtraArgs; QStringList m_preStartShellCommands; diff --git a/src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.cpp b/src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.cpp index 96b5df6e392..f2995d23715 100644 --- a/src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.cpp +++ b/src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.cpp @@ -25,12 +25,13 @@ ****************************************************************************/ #include "androidextralibrarylistmodel.h" -#include "qmakeandroidrunconfiguration.h" +#include #include #include #include + #include @@ -114,11 +115,10 @@ void AndroidExtraLibraryListModel::activeRunConfigurationChanged() QmakeProjectManager::QmakeProFile *AndroidExtraLibraryListModel::activeProFile() const { ProjectExplorer::RunConfiguration *rc = m_target->activeRunConfiguration(); - QmakeAndroidRunConfiguration *qarc = qobject_cast(rc); - if (!qarc) - return 0; + if (!rc) + return nullptr; auto project = static_cast(m_target->project()); - return project->rootProFile()->findProFile(qarc->proFilePath()); + return project->rootProFile()->findProFile(Utils::FileName::fromString(rc->buildKey())); } void AndroidExtraLibraryListModel::proFileUpdated(QmakeProjectManager::QmakeProFile *pro) diff --git a/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp b/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp index 4140f038bc3..c49dd76f6c1 100644 --- a/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp +++ b/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp @@ -24,7 +24,6 @@ ****************************************************************************/ #include "createandroidmanifestwizard.h" -#include "qmakeandroidrunconfiguration.h" #include #include @@ -32,6 +31,7 @@ #include +#include #include #include @@ -206,9 +206,8 @@ CreateAndroidManifestWizard::CreateAndroidManifestWizard(ProjectExplorer::Target m_copyGradle = version && version->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0); const QmakeProFile *currentRunNode = nullptr; - ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration(); - if (auto qrc = qobject_cast(rc)) - currentRunNode = project->rootProFile()->findProFile(qrc->proFilePath()); + if (ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration()) + currentRunNode = project->rootProFile()->findProFile(FileName::fromString(rc->buildKey())); if (files.isEmpty()) { // oh uhm can't create anything diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp index 951422fa58a..d861af7aee3 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp +++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp @@ -26,7 +26,6 @@ #include "qmakeandroidbuildapkstep.h" #include "qmakeandroidbuildapkwidget.h" -#include "qmakeandroidrunconfiguration.h" #include #include @@ -46,8 +45,6 @@ #include -#include - using namespace Android; using QmakeProjectManager::QmakeProject; using QmakeProjectManager::QmakeProFileNode; @@ -80,8 +77,8 @@ QmakeAndroidBuildApkStep::QmakeAndroidBuildApkStep(ProjectExplorer::BuildStepLis Utils::FileName QmakeAndroidBuildApkStep::proFilePathForInputFile() const { ProjectExplorer::RunConfiguration *rc = target()->activeRunConfiguration(); - if (auto *arc = qobject_cast(rc)) - return arc->proFilePath(); + if (rc) + return Utils::FileName::fromString(rc->buildKey()); return Utils::FileName(); } diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp deleted file mode 100644 index 362f63874c8..00000000000 --- a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 BogDan Vatra -** 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 "qmakeandroidrunconfiguration.h" - -#include - -#include -#include - -#include -#include - -#include -#include -#include - -#include -#include - -namespace { - QLatin1String PRO_FILE_KEY("QMakeProjectManager.QmakeAndroidRunConfiguration.ProFile"); -} - -using namespace ProjectExplorer; -using QmakeProjectManager::QmakeProject; - -namespace QmakeAndroidSupport { -namespace Internal { - -QmakeAndroidRunConfiguration::QmakeAndroidRunConfiguration(Target *target, Core::Id id) - : AndroidRunConfiguration(target, id) -{ - connect(target->project(), &Project::parsingFinished, this, [this]() { - updateDisplayName(); - }); -} - -void QmakeAndroidRunConfiguration::updateDisplayName() -{ - QmakeProject *project = qmakeProject(); - const QmakeProjectManager::QmakeProFileNode *root = project->rootProjectNode(); - if (root) { - const QmakeProjectManager::QmakeProFileNode *node = root->findProFileFor(proFilePath()); - if (node) { // should always be found - setDisplayName(node->displayName()); - setDefaultDisplayName(node->displayName()); - } - } -} - -QString QmakeAndroidRunConfiguration::disabledReason() const -{ - if (qmakeProject()->isParsing()) - return tr("The .pro file \"%1\" is currently being parsed.") - .arg(proFilePath().fileName()); - - if (!qmakeProject()->hasParsingData()) { - if (!proFilePath().exists()) - return tr("The .pro file \"%1\" does not exist.") - .arg(proFilePath().fileName()); - - QmakeProjectManager::QmakeProFileNode *rootProjectNode = qmakeProject()->rootProjectNode(); - if (!rootProjectNode) // Shutting down - return QString(); - - if (!rootProjectNode->findProFileFor(proFilePath())) - return tr("The .pro file \"%1\" is not part of the project.") - .arg(proFilePath().fileName()); - - return tr("The .pro file \"%1\" could not be parsed.") - .arg(proFilePath().fileName()); - } - - return QString(); -} - -QmakeProject *QmakeAndroidRunConfiguration::qmakeProject() const -{ - Target *t = target(); - QTC_ASSERT(t, return nullptr); - return static_cast(t->project()); -} - -Utils::FileName QmakeAndroidRunConfiguration::proFilePath() const -{ - return Utils::FileName::fromString(buildKey()); -} - - -// QmakeAndroidRunConfigurationFactory - -QmakeAndroidRunConfigurationFactory::QmakeAndroidRunConfigurationFactory() -{ - registerRunConfiguration - ("Qt4ProjectManager.AndroidRunConfiguration:"); - addSupportedProjectType(QmakeProjectManager::Constants::QMAKEPROJECT_ID); - addSupportedTargetDeviceType(Android::Constants::ANDROID_DEVICE_TYPE); -} - -} // namespace Internal -} // namespace Android diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h deleted file mode 100644 index d23afb1514e..00000000000 --- a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 BogDan Vatra -** 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 - -#include - -namespace QmakeProjectManager { class QmakeProject; } - -namespace QmakeAndroidSupport { -namespace Internal { - -class QmakeAndroidRunConfiguration : public Android::AndroidRunConfiguration -{ - Q_OBJECT - -public: - QmakeAndroidRunConfiguration(ProjectExplorer::Target *target, Core::Id id); - - Utils::FileName proFilePath() const; - -private: - QString disabledReason() const override; - void updateDisplayName(); - - QmakeProjectManager::QmakeProject *qmakeProject() const; -}; - -class QmakeAndroidRunConfigurationFactory : public ProjectExplorer::RunConfigurationFactory -{ -public: - QmakeAndroidRunConfigurationFactory(); -}; - -} // namespace Internal -} // namespace QmakeAndroidSupport diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp index 61df6401d2e..ed2e2e75716 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp +++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp @@ -26,11 +26,13 @@ #include "qmakeandroidbuildapkstep.h" #include "qmakeandroidsupport.h" #include "androidqmakebuildconfigurationfactory.h" -#include "qmakeandroidrunconfiguration.h" #include #include + +#include #include + #include #include @@ -85,11 +87,11 @@ QStringList QmakeAndroidSupport::soLibSearchPath(const ProjectExplorer::Target * QStringList QmakeAndroidSupport::androidExtraLibs(const ProjectExplorer::Target *target) const { ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration(); - QmakeAndroidRunConfiguration *qarc = qobject_cast(rc); - if (!qarc) + if (!rc) return QStringList(); auto project = static_cast(target->project()); - QmakeProFileNode *node = project->rootProjectNode()->findProFileFor(qarc->proFilePath()); + QmakeProFileNode *node = + project->rootProjectNode()->findProFileFor(Utils::FileName::fromString(rc->buildKey())); return node->variableValue(QmakeProjectManager::Variable::AndroidExtraLibs); } @@ -155,12 +157,11 @@ void QmakeAndroidSupport::manifestSaved(const ProjectExplorer::Target *target) Utils::FileName QmakeAndroidSupport::manifestSourcePath(const ProjectExplorer::Target *target) { - ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration(); - if (auto qrc = qobject_cast(rc)) { + if (ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration()) { const auto project = static_cast(target->project()); if (project->rootProjectNode()) { const QmakeProFileNode *node = - project->rootProjectNode()->findProFileFor(qrc->proFilePath()); + project->rootProjectNode()->findProFileFor(Utils::FileName::fromString(rc->buildKey())); if (node) { QString packageSource = node->singleVariableValue(Variable::AndroidPackageSourceDir); if (!packageSource.isEmpty()) { diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.pro b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.pro index feea75e9a52..36c2699c020 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.pro +++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.pro @@ -8,7 +8,6 @@ HEADERS += \ androidextralibrarylistmodel.h \ createandroidmanifestwizard.h \ qmakeandroidsupport.h \ - qmakeandroidrunconfiguration.h \ qmakeandroidbuildapkstep.h \ qmakeandroidbuildapkwidget.h \ androidqmakebuildconfigurationfactory.h \ @@ -18,7 +17,6 @@ SOURCES += \ androidextralibrarylistmodel.cpp \ createandroidmanifestwizard.cpp \ qmakeandroidsupport.cpp \ - qmakeandroidrunconfiguration.cpp \ qmakeandroidbuildapkstep.cpp \ qmakeandroidbuildapkwidget.cpp \ androidqmakebuildconfigurationfactory.cpp \ diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.qbs b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.qbs index 457aa436aaf..81f1fbd09d0 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.qbs +++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.qbs @@ -27,8 +27,6 @@ QtcPlugin { "qmakeandroidbuildapkwidget.ui", "androidqmakebuildconfigurationfactory.cpp", "androidqmakebuildconfigurationfactory.h", - "qmakeandroidrunconfiguration.cpp", - "qmakeandroidrunconfiguration.h", "qmakeandroidsupport.cpp", "qmakeandroidsupport.h", "qmakeandroidsupportplugin.h", diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupportplugin.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidsupportplugin.cpp index 0daf84b7cc8..f8a50df53cd 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidsupportplugin.cpp +++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupportplugin.cpp @@ -27,12 +27,32 @@ #include "androidqmakebuildconfigurationfactory.h" #include "qmakeandroidbuildapkstep.h" -#include "qmakeandroidrunconfiguration.h" #include "qmakeandroidsupport.h" +#include +#include + +#include + +#include + +using namespace ProjectExplorer; + namespace QmakeAndroidSupport { namespace Internal { +class QmakeAndroidRunConfigurationFactory : public RunConfigurationFactory +{ +public: + QmakeAndroidRunConfigurationFactory() + { + registerRunConfiguration + ("Qt4ProjectManager.AndroidRunConfiguration:"); + addSupportedProjectType(QmakeProjectManager::Constants::QMAKEPROJECT_ID); + addSupportedTargetDeviceType(Android::Constants::ANDROID_DEVICE_TYPE); + } +}; + class QmakeAndroidSupportPluginPrivate { public: