diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp index 1387f9edc44..90eca216fa7 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp @@ -139,6 +139,7 @@ public: IDevice::MachineType machineType = IDevice::Hardware; OsType osType = OsTypeOther; DeviceFileAccess *fileAccess = nullptr; + std::function fileAccessFactory; int version = 0; // This is used by devices that have been added by the SDK. Utils::SynchronizedValue sshParameters; @@ -251,6 +252,9 @@ bool IDevice::isAnyUnixDevice() const DeviceFileAccess *IDevice::fileAccess() const { + if (d->fileAccessFactory) + return d->fileAccessFactory(); + return d->fileAccess; } @@ -341,6 +345,11 @@ void IDevice::setFileAccess(DeviceFileAccess *fileAccess) d->fileAccess = fileAccess; } +void IDevice::setFileAccess(std::function fileAccessFactory) +{ + d->fileAccessFactory = fileAccessFactory; +} + IDevice::DeviceInfo IDevice::deviceInformation() const { const QString key = Tr::tr("Device"); diff --git a/src/plugins/projectexplorer/devicesupport/idevice.h b/src/plugins/projectexplorer/devicesupport/idevice.h index b83c558e87b..490906bf901 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.h +++ b/src/plugins/projectexplorer/devicesupport/idevice.h @@ -241,6 +241,7 @@ protected: void setDisplayType(const QString &type); void setOsType(Utils::OsType osType); void setFileAccess(Utils::DeviceFileAccess *fileAccess); + void setFileAccess(std::function fileAccessFactory); private: IDevice(const IDevice &) = delete;