diff options
author | Liang Qi <liang.qi@qt.io> | 2016-10-05 19:33:25 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-10-05 19:33:26 +0200 |
commit | 6feec9da93032d11a768802ac2187d9d4153b1ec (patch) | |
tree | dada90d2b99127de0be833ded5554b37169f3432 /src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp | |
parent | d5e3dca8c56f60e0da5d707dbbe0c424b75c947a (diff) | |
parent | c3605980d95f28d8ab6dc11eb349ad87ed3adaa9 (diff) | |
download | qtbase-6feec9da93032d11a768802ac2187d9d4153b1ec.tar.gz |
Merge remote-tracking branch 'origin/5.6' into 5.7
Change-Id: I34b5e290233d0869fbafac094a939aec2bf83fd5
Diffstat (limited to 'src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp')
-rw-r--r-- | src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp index e58f194b72..518b7984b0 100644 --- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp +++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp @@ -203,7 +203,10 @@ static QString classNameForInterface(const QString &interface, ClassType classTy return retval; } -static QByteArray qtTypeName(const QString &signature, const QDBusIntrospection::Annotations &annotations, int paramId = -1, const char *direction = "Out") +// ### Qt6 Remove the two isSignal ifs +// They are only here because before signal arguments where previously searched as "In" so to maintain compatibility +// we first search for "Out" and if not found we search for "In" +static QByteArray qtTypeName(const QString &signature, const QDBusIntrospection::Annotations &annotations, int paramId = -1, const char *direction = "Out", bool isSignal = false) { int type = QDBusMetaType::signatureToType(signature.toLatin1()); if (type == QVariant::Invalid) { @@ -220,9 +223,15 @@ static QByteArray qtTypeName(const QString &signature, const QDBusIntrospection: qttype = annotations.value(oldAnnotationName); if (qttype.isEmpty()) { - fprintf(stderr, "Got unknown type `%s'\n", qPrintable(signature)); - fprintf(stderr, "You should add <annotation name=\"%s\" value=\"<type>\"/> to the XML description\n", - qPrintable(annotationName)); + if (!isSignal || qstrcmp(direction, "Out") == 0) { + fprintf(stderr, "Got unknown type `%s'\n", qPrintable(signature)); + fprintf(stderr, "You should add <annotation name=\"%s\" value=\"<type>\"/> to the XML description\n", + qPrintable(annotationName)); + } + + if (isSignal) + return qtTypeName(signature, annotations, paramId, "In", isSignal); + exit(1); } @@ -322,6 +331,23 @@ static void writeArgList(QTextStream &ts, const QStringList &argNames, } } +static void writeSignalArgList(QTextStream &ts, const QStringList &argNames, + const QDBusIntrospection::Annotations &annotations, + const QDBusIntrospection::Arguments &outputArgs) +{ + bool first = true; + int argPos = 0; + for (int i = 0; i < outputArgs.count(); ++i) { + const QDBusIntrospection::Argument &arg = outputArgs.at(i); + QString type = constRefArg(qtTypeName(arg.type, annotations, i, "Out", true /* isSignal */)); + + if (!first) + ts << ", "; + ts << type << argNames.at(argPos++); + first = false; + } +} + static QString propertyGetter(const QDBusIntrospection::Property &property) { QString getter = property.annotations.value(QLatin1String("org.qtproject.QtDBus.PropertyGetter")); @@ -636,7 +662,7 @@ static void writeProxy(const QString &filename, const QDBusIntrospection::Interf hs << "void " << signal.name << "("; QStringList argNames = makeArgNames(signal.outputArgs); - writeArgList(hs, argNames, signal.annotations, signal.outputArgs); + writeSignalArgList(hs, argNames, signal.annotations, signal.outputArgs); hs << ");" << endl; // finished for header } @@ -980,7 +1006,7 @@ static void writeAdaptor(const QString &filename, const QDBusIntrospection::Inte hs << "void " << signal.name << "("; QStringList argNames = makeArgNames(signal.outputArgs); - writeArgList(hs, argNames, signal.annotations, signal.outputArgs); + writeSignalArgList(hs, argNames, signal.annotations, signal.outputArgs); hs << ");" << endl; // finished for header } |