From aee7afd50ba8bd91b1191db6f81b1bd3d8a068e1 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 6 Dec 2022 08:59:18 +0100 Subject: [PATCH] ProjectExplorer: Improve error reporting Previously anytime a FilePath operation tried to access a device that does not have a DeviceFileAccess an error message would be thrown. This patch makes it possible to differentiate between the device not being found, and the device just not having a DeviceFileAccess interface. Also the error message in DeviceFileAccess::exists() was removed as its not an error to ask if something exists even if it does not. Change-Id: Ib8c2e08132159d0d97bcd049b59436eb17bdbacd Reviewed-by: hjk --- src/libs/utils/devicefileaccess.cpp | 1 - src/libs/utils/filepath.cpp | 6 +++--- src/libs/utils/filepath.h | 2 +- .../projectexplorer/devicesupport/devicemanager.cpp | 7 +++++-- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/libs/utils/devicefileaccess.cpp b/src/libs/utils/devicefileaccess.cpp index e91f16b7119..ed02b444ae9 100644 --- a/src/libs/utils/devicefileaccess.cpp +++ b/src/libs/utils/devicefileaccess.cpp @@ -120,7 +120,6 @@ bool DeviceFileAccess::createDirectory(const FilePath &filePath) const bool DeviceFileAccess::exists(const FilePath &filePath) const { Q_UNUSED(filePath) - QTC_CHECK(false); return false; } diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp index 8fb7fcd47a7..7eb95343a6b 100644 --- a/src/libs/utils/filepath.cpp +++ b/src/libs/utils/filepath.cpp @@ -939,9 +939,9 @@ DeviceFileAccess *FilePath::fileAccess() const } static DeviceFileAccess dummy; - DeviceFileAccess *access = s_deviceHooks.fileAccess(*this); - QTC_ASSERT(access, qDebug() << toString(); return &dummy); - return access; + const expected_str access = s_deviceHooks.fileAccess(*this); + QTC_ASSERT_EXPECTED(access, return &dummy); + return *access ? *access : &dummy; } /*! diff --git a/src/libs/utils/filepath.h b/src/libs/utils/filepath.h index a3da61ce47a..05a851d4313 100644 --- a/src/libs/utils/filepath.h +++ b/src/libs/utils/filepath.h @@ -269,7 +269,7 @@ class QTCREATOR_UTILS_EXPORT DeviceFileHooks public: static DeviceFileHooks &instance(); - std::function fileAccess; + std::function(const FilePath &)> fileAccess; std::function deviceDisplayName; std::function ensureReachable; std::function environment; diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp index 0ff44bbf342..6448b085b8d 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp @@ -422,11 +422,14 @@ DeviceManager::DeviceManager(bool isInstance) : d(std::make_uniquelocalSource(file); }; - deviceHooks.fileAccess = [](const FilePath &filePath) -> DeviceFileAccess * { + deviceHooks.fileAccess = [](const FilePath &filePath) -> expected_str { if (!filePath.needsDevice()) return DesktopDeviceFileAccess::instance(); auto device = DeviceManager::deviceForPath(filePath); - QTC_ASSERT(device, qDebug() << filePath.toString(); return nullptr); + if (!device) { + return make_unexpected( + QString("No device found for path \"%1\"").arg(filePath.toUserOutput())); + } return device->fileAccess(); };