From 6e5415e95fa26ffbb94b061dbe5a25f145e9d7df Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 11 Apr 2022 11:09:46 +0200 Subject: [PATCH] Ios: Move runControl's runConfiguration calls further up The data is now pulled out of the runconfig directly instead of relying on the indirection using the runconfig pointer inside RunControl. This is only barely better, but gets rid of one direct user of RunControl::runConfiguration(). Change-Id: If93576ba25ea9f3ddbeae2535217f5c2f361eaf6 Reviewed-by: Christian Stenger --- src/plugins/ios/iosrunconfiguration.cpp | 45 ++++++++++-------------- src/plugins/ios/iosrunconfiguration.h | 46 ++++++++++++++++++++++++- src/plugins/ios/iosrunner.cpp | 19 +++++----- 3 files changed, 75 insertions(+), 35 deletions(-) diff --git a/src/plugins/ios/iosrunconfiguration.cpp b/src/plugins/ios/iosrunconfiguration.cpp index 1198644a3ac..51a2288c492 100644 --- a/src/plugins/ios/iosrunconfiguration.cpp +++ b/src/plugins/ios/iosrunconfiguration.cpp @@ -53,7 +53,6 @@ #include #include #include -#include #include #include @@ -78,31 +77,6 @@ static IosDeviceType toIosDeviceType(const SimulatorInfo &device) return iosDeviceType; } -class IosDeviceTypeAspect : public BaseAspect -{ -public: - IosDeviceTypeAspect(IosRunConfiguration *runConfiguration); - - void fromMap(const QVariantMap &map) override; - void toMap(QVariantMap &map) const override; - void addToLayout(LayoutBuilder &builder) override; - - IosDeviceType deviceType() const; - void setDeviceType(const IosDeviceType &deviceType); - - void updateValues(); - void setDeviceTypeIndex(int devIndex); - void deviceChanges(); - void updateDeviceType(); - -public: - IosDeviceType m_deviceType; - IosRunConfiguration *m_runConfiguration = nullptr; - QStandardItemModel m_deviceTypeModel; - QLabel *m_deviceTypeLabel = nullptr; - QComboBox *m_deviceTypeComboBox = nullptr; -}; - IosRunConfiguration::IosRunConfiguration(Target *target, Utils::Id id) : RunConfiguration(target, id) { @@ -361,6 +335,11 @@ void IosDeviceTypeAspect::setDeviceType(const IosDeviceType &deviceType) IosDeviceTypeAspect::IosDeviceTypeAspect(IosRunConfiguration *runConfiguration) : m_runConfiguration(runConfiguration) { + addDataExtractor(this, &IosDeviceTypeAspect::deviceType, &Data::deviceType); + addDataExtractor(this, &IosDeviceTypeAspect::bundleDirectory, &Data::bundleDirectory); + addDataExtractor(this, &IosDeviceTypeAspect::applicationName, &Data::applicationName); + addDataExtractor(this, &IosDeviceTypeAspect::localExecutable, &Data::localExecutable); + connect(DeviceManager::instance(), &DeviceManager::updated, this, &IosDeviceTypeAspect::deviceChanges); connect(KitManager::instance(), &KitManager::kitsChanged, @@ -427,6 +406,20 @@ void IosDeviceTypeAspect::updateValues() } } +FilePath IosDeviceTypeAspect::bundleDirectory() const +{ + return m_runConfiguration->bundleDirectory(); +} + +QString IosDeviceTypeAspect::applicationName() const +{ + return m_runConfiguration->applicationName(); +} + +FilePath IosDeviceTypeAspect::localExecutable() const +{ + return m_runConfiguration->localExecutable(); +} // IosRunConfigurationFactory diff --git a/src/plugins/ios/iosrunconfiguration.h b/src/plugins/ios/iosrunconfiguration.h index bb747263305..6269dda32ee 100644 --- a/src/plugins/ios/iosrunconfiguration.h +++ b/src/plugins/ios/iosrunconfiguration.h @@ -30,12 +30,56 @@ #include "iossimulator.h" #include + #include +#include +#include + namespace Ios { namespace Internal { -class IosDeviceTypeAspect; +class IosRunConfiguration; + +class IosDeviceTypeAspect : public Utils::BaseAspect +{ + Q_OBJECT + +public: + explicit IosDeviceTypeAspect(IosRunConfiguration *runConfiguration); + + void fromMap(const QVariantMap &map) override; + void toMap(QVariantMap &map) const override; + void addToLayout(Utils::LayoutBuilder &builder) override; + + IosDeviceType deviceType() const; + void setDeviceType(const IosDeviceType &deviceType); + + void updateValues(); + void setDeviceTypeIndex(int devIndex); + void deviceChanges(); + void updateDeviceType(); + + class Data : public Utils::BaseAspect::Data + { + public: + Utils::FilePath bundleDirectory; + IosDeviceType deviceType; + QString applicationName; + Utils::FilePath localExecutable; + }; + +private: + Utils::FilePath bundleDirectory() const; + QString applicationName() const; + Utils::FilePath localExecutable() const; + + IosDeviceType m_deviceType; + IosRunConfiguration *m_runConfiguration = nullptr; + QStandardItemModel m_deviceTypeModel; + QLabel *m_deviceTypeLabel = nullptr; + QComboBox *m_deviceTypeComboBox = nullptr; +}; class IosRunConfiguration : public ProjectExplorer::RunConfiguration { diff --git a/src/plugins/ios/iosrunner.cpp b/src/plugins/ios/iosrunner.cpp index 5a93615bf2f..d4881346ded 100644 --- a/src/plugins/ios/iosrunner.cpp +++ b/src/plugins/ios/iosrunner.cpp @@ -96,10 +96,11 @@ IosRunner::IosRunner(RunControl *runControl) { setId("IosRunner"); stopRunningRunControl(runControl); - auto runConfig = qobject_cast(runControl->runConfiguration()); - m_bundleDir = runConfig->bundleDirectory().toString(); + const IosDeviceTypeAspect::Data *data = runControl->aspect(); + QTC_ASSERT(data, return); + m_bundleDir = data->bundleDirectory.toString(); m_device = DeviceKitAspect::device(runControl->kit()); - m_deviceType = runConfig->deviceType(); + m_deviceType = data->deviceType; } IosRunner::~IosRunner() @@ -456,8 +457,10 @@ void IosDebugSupport::start() setIosPlatform("ios-simulator"); } - auto iosRunConfig = qobject_cast(runControl()->runConfiguration()); - setRunControlName(iosRunConfig->applicationName()); + const IosDeviceTypeAspect::Data *data = runControl()->aspect(); + QTC_ASSERT(data, reportFailure("Broken IosDeviceTypeAspect setup."); return); + + setRunControlName(data->applicationName); setContinueAfterAttach(true); Utils::Port gdbServerPort = m_runner->gdbServerPort(); @@ -467,14 +470,14 @@ void IosDebugSupport::start() const bool cppDebug = isCppDebugging(); const bool qmlDebug = isQmlDebugging(); if (cppDebug) { - setInferiorExecutable(iosRunConfig->localExecutable()); + setInferiorExecutable(data->localExecutable); setRemoteChannel("connect://localhost:" + gdbServerPort.toString()); - QString bundlePath = iosRunConfig->bundleDirectory().toString(); + QString bundlePath = data->bundleDirectory.toString(); bundlePath.chop(4); FilePath dsymPath = FilePath::fromString(bundlePath.append(".dSYM")); if (dsymPath.exists() - && dsymPath.lastModified() < iosRunConfig->localExecutable().lastModified()) { + && dsymPath.lastModified() < data->localExecutable.lastModified()) { TaskHub::addTask(DeploymentTask(Task::Warning, tr("The dSYM %1 seems to be outdated, it might confuse the debugger.") .arg(dsymPath.toUserOutput())));