48 if (idx >= mo->classInfoOffset()) {
49 interface = QLatin1StringView(mo->classInfo(idx).value());
51 interface = QLatin1StringView(mo->className());
52 interface.replace(
"::"_L1,
"."_L1);
54 if (interface.startsWith(
"QDBus"_L1)) {
55 interface.prepend(
"org.qtproject.QtDBus."_L1);
56 }
else if (interface.startsWith(u'Q') &&
57 interface.size() >= 2 && interface.at(1).isUpper()) {
59 interface.prepend(
"org.qtproject.Qt."_L1);
60 }
else if (!QCoreApplication::instance()||
61 QCoreApplication::instance()->applicationName().isEmpty()) {
62 interface.prepend(
"local."_L1);
64 QString domainName = QCoreApplication::instance()->applicationName();
65 const QString organizationDomain = QCoreApplication::instance()->organizationDomain();
66 if (organizationDomain.isEmpty())
67 domainName.append(
".local"_L1);
69 domainName.append(u'.').append(organizationDomain);
72 QString encodedDomainName = qt_ACE_do(domainName, ToAceOnly, ForbidLeadingDot);
73 if (encodedDomainName.isEmpty()) {
74 interface.prepend(
"local."_L1);
80 encodedDomainName.replace(u'-', u'_');
82 auto nameParts = QStringView{ encodedDomainName }.split(u'.', Qt::SkipEmptyParts);
84 QString composedDomain;
87 composedDomain.reserve(encodedDomainName.size() + nameParts.size() + 1);
88 for (
auto it = nameParts.rbegin(), end = nameParts.rend(); it != end; ++it) {
92 if (it->first().isDigit())
93 composedDomain += u'_';
94 composedDomain += *it + u'.';
97 interface.prepend(composedDomain);
127 QList<QByteArray> parameterTypes;
128 parameterTypes.reserve(mm.parameterCount());
132 for (
int i = 0; i < mm.parameterCount(); ++i) {
133 QByteArray typeName = mm.parameterMetaType(i).name();
134 if (typeName.isEmpty())
135 typeName = mm.parameterTypeName(i);
136 parameterTypes.append(typeName);
139 return qDBusParametersForMethod(parameterTypes, metaTypes, errorMsg);
150 metaTypes.append(QMetaType());
152 bool seenMessage =
false;
153 for (QByteArray type : parameterTypes) {
154 if (type.endsWith(
'*')) {
155 errorMsg =
"Pointers are not supported: "_L1 + QLatin1StringView(type);
159 if (type.endsWith(
'&')) {
160 QByteArray basictype = type;
161 basictype.truncate(type.size() - 1);
163 QMetaType id = QMetaType::fromName(basictype);
165 errorMsg =
"Unregistered output type in parameter list: "_L1 + QLatin1StringView(type);
167 }
else if (QDBusMetaType::typeToSignature(id) ==
nullptr)
170 metaTypes.append(id);
176 errorMsg =
"Invalid method, non-output parameters after message or after output parameters: "_L1 + QLatin1StringView(type);
180 if (type.startsWith(
"QVector<"))
181 type =
"QList<" + type.mid(
sizeof(
"QVector<") - 1);
183 QMetaType id = QMetaType::fromName(type);
184#ifdef QT_BOOTSTRAPPED
186 if (type ==
"QDBusMessage") {
187 id = QDBusMetaTypeId::message();
192 errorMsg =
"Unregistered input type in parameter list: "_L1 + QLatin1StringView(type);
196 if (id == QDBusMetaTypeId::message())
198 else if (QDBusMetaType::typeToSignature(id) ==
nullptr) {
199 errorMsg =
"Type not registered with QtDBus in parameter list: "_L1 + QLatin1StringView(type);
203 metaTypes.append(id);