summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2023-01-12 09:42:34 +0100
committerMarc Mutz <marc.mutz@qt.io>2023-01-13 14:38:17 +0100
commit66235481043d85e4f51a216cf2ad3bb895ea7842 (patch)
treeb7572eaa9910031c886b184dbb304976bbd73a55 /src
parentc3a5fe2fd7a1b8a6b6133c938ffe6b3f30181bf0 (diff)
QPermission: fight template bloat in data()
Extract the type-independent code into an out-of-line data_impl() private method, leaving data() containing only the QMetaType::fromType<T>() call as well as T copy- and default-constructor calls. As a drive-by, use categorized logging (consistency with the rest of the permissions code) and printf-style qWarning() (expands to less code). Pick-to: 6.5 Change-Id: Ie23b83cb3fc537c9cff15f853ceee2888bf63124 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qpermissions.cpp16
-rw-r--r--src/corelib/kernel/qpermissions.h11
2 files changed, 21 insertions, 6 deletions
diff --git a/src/corelib/kernel/qpermissions.cpp b/src/corelib/kernel/qpermissions.cpp
index 0f16845249..4d26846347 100644
--- a/src/corelib/kernel/qpermissions.cpp
+++ b/src/corelib/kernel/qpermissions.cpp
@@ -257,6 +257,22 @@ Q_LOGGING_CATEGORY(lcPermissions, "qt.permissions", QtWarningMsg);
Returns the type of the permission.
*/
+/*
+ \internal
+*/
+const void *QPermission::data(QMetaType requestedType) const
+{
+ const auto actualType = type();
+ if (requestedType != actualType) {
+ qCWarning(lcPermissions, "Cannot convert from %s to %s",
+ actualType.name(), requestedType.name());
+ return nullptr;
+ }
+ return m_data.data();
+}
+
+
+
#define QT_DEFINE_PERMISSION_SPECIAL_FUNCTIONS(ClassName) \
ClassName::ClassName() : d(new ClassName##Private) {} \
ClassName::ClassName(const ClassName &other) noexcept = default; \
diff --git a/src/corelib/kernel/qpermissions.h b/src/corelib/kernel/qpermissions.h
index 7c1cd3678e..2a23412a22 100644
--- a/src/corelib/kernel/qpermissions.h
+++ b/src/corelib/kernel/qpermissions.h
@@ -61,13 +61,10 @@ public:
template <typename T, std::enable_if_t<is_permission<T>::value, bool> = true>
T data() const
{
- auto requestedType = QMetaType::fromType<T>();
- if (type() != requestedType) {
- qWarning() << "Can not convert from" << type().name()
- << "to" << requestedType.name();
+ if (auto p = data(QMetaType::fromType<T>()))
+ return *static_cast<const T *>(p);
+ else
return T{};
- }
- return m_data.value<T>();
}
#endif
@@ -76,6 +73,8 @@ public:
#endif
private:
+ Q_CORE_EXPORT const void *data(QMetaType id) const;
+
Qt::PermissionStatus m_status = Qt::PermissionStatus::Undetermined;
QVariant m_data;