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())));