summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qmetaobject.cpp
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2022-07-15 13:36:22 -0700
committerThiago Macieira <thiago.macieira@intel.com>2022-07-28 11:50:17 -0700
commit0ed2c60fea9b923f70dad7a8e591df2da80e76db (patch)
tree5ad38ee291c2c5065ebb9babf946a936b0774dcc /src/corelib/kernel/qmetaobject.cpp
parentb73ab954dffffc462b6f6efe5a2dd97efeab0038 (diff)
QMetaObject: move the warning from invokeMethod() to a new function
Which we can mark Q_DECL_COLD_FUNCTION. Change-Id: I36b24183fbd041179f2ffffd17021b1362404f95 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/corelib/kernel/qmetaobject.cpp')
-rw-r--r--src/corelib/kernel/qmetaobject.cpp44
1 files changed, 24 insertions, 20 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index 07f3e88870..5c436b805a 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -1361,6 +1361,29 @@ static inline QByteArray findMethodCandidates(const QMetaObject *metaObject, con
return candidateMessage;
}
+Q_DECL_COLD_FUNCTION static inline bool
+printMethodNotFoundWarning(const QMetaObject *meta, QLatin1StringView name, qsizetype paramCount,
+ const char *const *names)
+{
+ QVarLengthArray<char, 512> sig;
+ sig.append(name.data(), name.size());
+ sig.append('(');
+ for (qsizetype i = 1; i < paramCount; ++i) {
+ sig.append(names[i], qstrlen(names[i]));
+ sig.append(',');
+ }
+ if (paramCount == 1)
+ sig.append(')'); // no parameters
+ else
+ sig[sig.size() - 1] = ')';
+ sig.append('\0');
+
+ qWarning("QMetaObject::invokeMethod: No such method %s::%s%s",
+ meta->className(), sig.constData(),
+ findMethodCandidates(meta, name.data()).constData());
+ return false;
+}
+
/*!
\threadsafe
@@ -1483,26 +1506,7 @@ bool QMetaObject::invokeMethod(QObject *obj,
}
// This method doesn't belong to us; print out a nice warning with candidates.
- QVarLengthArray<char, 512> sig;
- int len = int(qstrlen(member));
- if (len <= 0)
- return false;
- sig.append(member, len);
- sig.append('(');
- for (qsizetype i = 1; i < paramCount; ++i) {
- sig.append(typeNames[i], qstrlen(typeNames[i]));
- sig.append(',');
- }
- if (paramCount == 1)
- sig.append(')'); // no parameters
- else
- sig[sig.size() - 1] = ')';
- sig.append('\0');
-
- meta = obj->metaObject();
- qWarning("QMetaObject::invokeMethod: No such method %s::%s%s",
- meta->className(), sig.constData(), findMethodCandidates(meta, member).constData());
- return false;
+ return printMethodNotFoundWarning(obj->metaObject(), name, paramCount, typeNames);
}
bool QMetaObject::invokeMethodImpl(QObject *object, QtPrivate::QSlotObjectBase *slot, Qt::ConnectionType type, void *ret)