From 08a37f9cee2ae9ada6d9f739d9cfed943640aea3 Mon Sep 17 00:00:00 2001 From: Ievgenii Meshcheriakov Date: Tue, 2 May 2023 11:26:39 +0200 Subject: [PATCH] QtDBus: Use non-textual version of QMetaObject::invokeMethod Use type-checked version for better run-time performance and compile-time type checking. Change-Id: I92c97d162137770bc373e28fa8e4e115ac5533e6 Reviewed-by: Thiago Macieira --- src/dbus/doc/snippets/code/src_qdbus_qdbuscontext.cpp | 2 +- src/dbus/qdbusabstractadaptor.cpp | 2 +- src/dbus/qdbusconnection_p.h | 3 ++- src/dbus/qdbusintegrator.cpp | 4 ++-- src/dbus/qdbuspendingcall.cpp | 4 +++- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/dbus/doc/snippets/code/src_qdbus_qdbuscontext.cpp b/src/dbus/doc/snippets/code/src_qdbus_qdbuscontext.cpp index 9e4e26cb4e..75b4394595 100644 --- a/src/dbus/doc/snippets/code/src_qdbus_qdbuscontext.cpp +++ b/src/dbus/doc/snippets/code/src_qdbus_qdbuscontext.cpp @@ -37,7 +37,7 @@ QString MyObject::methodWithDelayedReply() conn = connection(); msg = message(); setDelayedReply(true); - QMetaObject::invokeMethod(this, "process", Qt::QueuedConnection); + QMetaObject::invokeMethod(this, &MyObject::process, Qt::QueuedConnection); return QString(); } //! [0] diff --git a/src/dbus/qdbusabstractadaptor.cpp b/src/dbus/qdbusabstractadaptor.cpp index a53ba41683..717707ae9c 100644 --- a/src/dbus/qdbusabstractadaptor.cpp +++ b/src/dbus/qdbusabstractadaptor.cpp @@ -113,7 +113,7 @@ QDBusAbstractAdaptor::QDBusAbstractAdaptor(QObject* obj) QDBusAdaptorConnector *connector = qDBusCreateAdaptorConnector(obj); connector->waitingForPolish = true; - QMetaObject::invokeMethod(connector, "polish", Qt::QueuedConnection); + QMetaObject::invokeMethod(connector, &QDBusAdaptorConnector::polish, Qt::QueuedConnection); } /*! diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h index 3431992eac..d4dde63e8a 100644 --- a/src/dbus/qdbusconnection_p.h +++ b/src/dbus/qdbusconnection_p.h @@ -370,7 +370,8 @@ public slots: { // This call cannot race with something disabling dispatch only because dispatch is // never re-disabled from Qt code on an in-use connection once it has been enabled. - QMetaObject::invokeMethod(con, "setDispatchEnabled", Qt::QueuedConnection, Q_ARG(bool, true)); + QMetaObject::invokeMethod( + con, [con = con]() { con->setDispatchEnabled(true); }, Qt::QueuedConnection); if (!con->ref.deref()) con->deleteLater(); deleteLater(); diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index 9b37cd7b8c..804277157b 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -1757,7 +1757,7 @@ void QDBusConnectionPrivate::setPeer(DBusConnection *c, const QDBusErrorInternal watchForDBusDisconnection(); - QMetaObject::invokeMethod(this, "doDispatch", Qt::QueuedConnection); + QMetaObject::invokeMethod(this, &QDBusConnectionPrivate::doDispatch, Qt::QueuedConnection); } static QDBusConnection::ConnectionCapabilities connectionCapabilies(DBusConnection *connection) @@ -1845,7 +1845,7 @@ void QDBusConnectionPrivate::setConnection(DBusConnection *dbc, const QDBusError qDBusDebug() << this << ": connected successfully"; // schedule a dispatch: - QMetaObject::invokeMethod(this, "doDispatch", Qt::QueuedConnection); + QMetaObject::invokeMethod(this, &QDBusConnectionPrivate::doDispatch, Qt::QueuedConnection); } extern "C"{ diff --git a/src/dbus/qdbuspendingcall.cpp b/src/dbus/qdbuspendingcall.cpp index ff5dfc8967..875891786a 100644 --- a/src/dbus/qdbuspendingcall.cpp +++ b/src/dbus/qdbuspendingcall.cpp @@ -474,7 +474,9 @@ QDBusPendingCallWatcher::QDBusPendingCallWatcher(const QDBusPendingCall &call, Q d->watcherHelper = new QDBusPendingCallWatcherHelper; if (d->replyMessage.type() != QDBusMessage::InvalidMessage) { // cause a signal emission anyways - QMetaObject::invokeMethod(d->watcherHelper, "finished", Qt::QueuedConnection); + QMetaObject::invokeMethod(d->watcherHelper, + &QDBusPendingCallWatcherHelper::finished, + Qt::QueuedConnection); } } d->watcherHelper->add(this);