17#include <private/qdbusintrospection_p.h>
22#define PROGRAMNAME "qdbusxml2cpp"
23#define PROGRAMVERSION "0.8"
24#define PROGRAMCOPYRIGHT QT_COPYRIGHT
26#define ANNOTATION_NO_WAIT "org.freedesktop.DBus.Method.NoReply"
40 bool hadErrors()
const {
return m_hadErrors; }
51 bool m_hadErrors =
false;
57 enum ClassType { Proxy, Adaptor };
84 bool skipNamespaces =
false;
85 bool includeMocs =
false;
91 DiagnosticsReporter reporter;
95 "#include <QtCore/QByteArray>\n"
96 "#include <QtCore/QList>\n"
97 "#include <QtCore/QMap>\n"
98 "#include <QtCore/QString>\n"
99 "#include <QtCore/QStringList>\n"
100 "#include <QtCore/QVariant>\n";
103 "#include <QtCore/qcontainerfwd.h>\n";
106 const char *msg, ...)
110 report(
location, msg, ap,
"warning");
115 const char *msg, ...)
125 const char *msg, ...)
135 const char *msg, va_list ap,
const char *
severity)
137 fprintf(stderr,
"%s:%lld:%lld: %s: ",
qPrintable(m_fileName),
139 vfprintf(stderr, msg, ap);
145 if (inputFile.
isEmpty() || inputFile ==
"-"_L1) {
146 reporter.setFileName(
"<standard input>"_L1);
148 fprintf(stderr,
PROGRAMNAME ": could not open standard input: %s\n",
153 reporter.setFileName(inputFile);
155 fprintf(stderr,
PROGRAMNAME ": could not open input file '%s': %s\n",
163 if (reporter.hadErrors())
171 if (!wantedInterfaces.isEmpty()) {
173 while (
it != interfaces.
end())
174 if (!wantedInterfaces.contains(
it.key()))
189 for (
auto candidate : candidates)
190 if (suffix == candidate)
200 QString retval = parts.front();
202 if (retval.isEmpty() || retval ==
"-"_L1)
207 retval.append(
".h"_L1);
218 if (retval.isEmpty() || retval ==
"-"_L1)
223 retval.append(
".cpp"_L1);
238 retval += fi.completeBaseName();
243 retval += fi.fileName();
250 if (sourceName.
isEmpty() || sourceName ==
"-"_L1) {
252 }
else if (headerName.isEmpty() || headerName ==
"-"_L1) {
257 retval +=
source.completeBaseName();
260 fprintf(stderr,
"warning: no header name is provided, assuming it to be \"%s\"\n",
267 retval +=
header.completeBaseName();
283 " * This is an auto-generated file.\n";
285 if (changesWillBeLost)
286 ts <<
" * Do not edit! All changes made to it will be lost.\n";
288 ts <<
" * This file may have been hand-edited. Look for HAND-EDIT comments\n"
289 " * before re-generating it.\n";
297 QDBusXmlToCpp::ClassType classType)
299 if (!globalClassName.
isEmpty())
300 return globalClassName;
305 if (classType == Proxy) {
306 for (
const auto &part : parts) {
308 retval += part.
mid(1);
314 if (classType == Proxy)
315 retval +=
"Interface"_L1;
317 retval +=
"Adaptor"_L1;
329 QString annotationName = u
"org.qtproject.QtDBus.QtTypeName"_s;
332 auto annotation = annotations.
value(annotationName);
333 QString qttype = annotation.value;
334 if (!qttype.isEmpty())
335 return std::move(qttype).
toLatin1();
337 QString oldAnnotationName = u
"com.trolltech.QtDBus.QtTypeName"_s;
340 annotation = annotations.
value(oldAnnotationName);
341 qttype = annotation.value;
343 if (qttype.isEmpty()) {
345 reporter.note(
location,
"you should add <annotation name=\"%s\" value=\"<type>\"/>\n",
351 reporter.warning(annotation.location,
"deprecated annotation '%s' found\n",
353 reporter.note(annotation.location,
"suggest updating to '%s'\n",
355 return std::move(qttype).toLatin1();
368 if (!
arg.endsWith(
'>'))
376 if (!
arg.startsWith(
'Q'))
388 const qsizetype numOutputArgs = outputArgs.size();
389 retval.reserve(numInputArgs + numOutputArgs);
394 name = u
"in%1"_s.arg(
i);
396 name.replace(u
'-', u
'_');
397 while (retval.contains(
name))
405 name = u
"out%1"_s.arg(
i);
407 name.replace(u
'-', u
'_');
408 while (retval.contains(
name))
429 ts <<
type << argNames.at(argPos++);
443 << argNames.at(argPos++);
460 ts <<
type << argNames.at(argPos++);
467 auto annotation =
property.annotations.value(
"org.qtproject.QtDBus.PropertyGetter"_L1);
468 if (!annotation.value.isEmpty())
469 return annotation.value;
471 annotation =
property.annotations.value(
"com.trolltech.QtDBus.propertyGetter"_L1);
472 if (!annotation.value.isEmpty()) {
473 reporter.warning(annotation.location,
474 "deprecated annotation 'com.trolltech.QtDBus.propertyGetter' found\n");
475 reporter.note(annotation.location,
476 "suggest updating to 'org.qtproject.QtDBus.PropertyGetter'\n");
477 return annotation.value;
487 auto annotation =
property.annotations.value(
"org.qtproject.QtDBus.PropertySetter"_L1);
488 if (!annotation.value.isEmpty())
489 return annotation.value;
491 annotation =
property.annotations.value(
"com.trolltech.QtDBus.propertySetter"_L1);
492 if (!annotation.value.isEmpty()) {
493 reporter.warning(annotation.location,
494 "deprecated annotation 'com.trolltech.QtDBus.propertySetter' found\n");
495 reporter.note(annotation.location,
496 "suggest updating to 'org.qtproject.QtDBus.PropertySetter'\n");
497 return annotation.value;
507 QString name =
method.annotations.value(u
"org.qtproject.QtDBus.MethodName"_s).value;
518 for (
i = 0;
i <
data.size(); ++
i) {
521 if (
data[
i] == u
'\"')
527 retval +=
"\\n\"\n"_L1;
546 fprintf(stderr,
"%s: Unable to open '%s': %s\n",
551void QDBusXmlToCpp::writeProxy(
const QString &filename,
564 writeHeader(hs,
true);
565 if (cppName != headerName)
566 writeHeader(cs,
false);
570 if (!headerName.isEmpty() && headerName !=
"-"_L1) {
583 hs <<
"#include <QtCore/QObject>\n"
585#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
586 hs <<
"#include <QtDBus/QtDBus>\n";
588 hs <<
"#include <QtDBus/QDBusAbstractInterface>\n"
589 "#include <QtDBus/QDBusPendingReply>\n";
592 for (
const QString &include :
std::as_const(includes)) {
593 hs <<
"#include \"" << include <<
"\"\n";
594 if (headerName.isEmpty())
595 cs <<
"#include \"" << include <<
"\"\n";
598 for (
const QString &include :
std::as_const(globalIncludes)) {
599 hs <<
"#include <" << include <<
">\n";
600 if (headerName.isEmpty())
601 cs <<
"#include <" << include <<
">\n";
606 if (cppName != headerName) {
607 if (!headerName.isEmpty() && headerName !=
"-"_L1)
608 cs <<
"#include \"" << headerName <<
"\"\n\n";
616 " * Proxy class for interface " <<
interface->name <<
"\n"
619 " * Implementation of interface class " <<
className <<
"\n"
623 hs <<
"class " <<
className <<
": public QDBusAbstractInterface\n"
629 " static inline const char *staticInterfaceName()\n"
630 " { return \"" <<
interface->name <<
"\"; }\n\n";
634 " " <<
className <<
"(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = nullptr);\n\n"
636 cs <<
className <<
"::" <<
className <<
"(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)\n"
637 " : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)\n"
650 hs <<
" Q_PROPERTY(" <<
type <<
" " <<
property.name;
660 hs <<
" WRITE " <<
setter;
666 hs <<
" inline " <<
type <<
" " <<
getter <<
"() const\n"
667 " { return qvariant_cast< " <<
type <<
" >(property(\""
668 <<
property.name <<
"\")); }\n";
674 " { setProperty(\"" <<
property.name
675 <<
"\", QVariant::fromValue(value)); }\n";
682 hs <<
"public Q_SLOTS: // METHODS\n";
684 bool isDeprecated =
method.annotations.value(
"org.freedesktop.DBus.Deprecated"_L1).value
687 if (isNoReply && !
method.outputArgs.isEmpty()) {
688 reporter.warning(
method.location,
689 "method %s in interface %s is marked 'no-reply' but has output "
696 hs <<
" Q_DECL_DEPRECATED ";
701 hs <<
"Q_NOREPLY inline void ";
703 hs <<
"inline QDBusPendingReply<";
705 hs << (
i > 0 ?
", " :
"")
715 writeArgList(hs, argNames,
method.annotations,
method.inputArgs);
719 " QList<QVariant> argumentList;\n";
721 if (!
method.inputArgs.isEmpty()) {
722 hs <<
" argumentList";
724 hs <<
" << QVariant::fromValue(" << argNames.at(argPos) <<
')';
729 hs <<
" callWithArgumentList(QDBus::NoBlock, "
730 "QStringLiteral(\"" <<
method.name <<
"\"), argumentList);\n";
732 hs <<
" return asyncCallWithArgumentList(QStringLiteral(\""
733 <<
method.name <<
"\"), argumentList);\n";
738 if (
method.outputArgs.size() > 1) {
740 hs << (isDeprecated ?
" Q_DECL_DEPRECATED " :
" ") <<
"inline QDBusReply<"
752 " QList<QVariant> argumentList;\n";
755 if (!
method.inputArgs.isEmpty()) {
756 hs <<
" argumentList";
757 for (argPos = 0; argPos <
method.inputArgs.size(); ++argPos)
758 hs <<
" << QVariant::fromValue(" << argNames.at(argPos) <<
')';
762 hs <<
" QDBusMessage reply = callWithArgumentList(QDBus::Block, "
763 "QStringLiteral(\"" <<
method.name <<
"\"), argumentList);\n";
766 hs <<
" if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().size() == "
767 <<
method.outputArgs.size() <<
") {\n";
771 hs <<
" " << argNames.at(argPos++) <<
" = qdbus_cast<"
775 <<
">(reply.arguments().at(" <<
i <<
"));\n";
784 hs <<
"Q_SIGNALS: // SIGNALS\n";
787 if (
signal.annotations.value(
"org.freedesktop.DBus.Deprecated"_L1).value ==
"true"_L1)
788 hs <<
"Q_DECL_DEPRECATED ";
790 hs <<
"void " <<
signal.name <<
"(";
793 writeSignalArgList(hs, argNames,
signal.annotations,
signal.outputArgs);
802 if (!skipNamespaces) {
810 current =
it->constData()->name.split(u
'.');
811 name = current.takeLast();
815 while (
i < current.size() &&
i < last.size() && current.at(
i) == last.at(
i))
821 hs <<
QString((last.size() -
j - 1 +
i) * 2, u
' ') <<
"}\n";
825 hs <<
QString(
j * 2, u
' ') <<
"namespace " << current.at(
j) <<
" {\n";
828 if (!
name.isEmpty()) {
829 hs <<
QString(current.size() * 2, u
' ')
830 <<
"using " <<
name <<
" = ::" << classNameForInterface(
it->constData()->name, Proxy)
845 if (includeMocs && !mocName.isEmpty())
847 "#include \"" << mocName <<
"\"\n";
857 if (headerName == cppName) {
863 cppFile.
write(cppData);
867void QDBusXmlToCpp::writeAdaptor(
const QString &filename,
880 writeHeader(hs,
false);
881 if (cppName != headerName)
882 writeHeader(cs,
true);
886 if (!headerName.isEmpty() && headerName !=
"-"_L1) {
899 hs <<
"#include <QtCore/QObject>\n";
900 if (cppName == headerName)
901 hs <<
"#include <QtCore/QMetaObject>\n"
902 "#include <QtCore/QVariant>\n";
903#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
904 hs <<
"#include <QtDBus/QtDBus>\n";
906 hs <<
"#include <QtDBus/QDBusAbstractAdaptor>\n"
907 "#include <QtDBus/QDBusObjectPath>\n";
910 for (
const QString &include :
std::as_const(includes)) {
911 hs <<
"#include \"" << include <<
"\"\n";
912 if (headerName.isEmpty())
913 cs <<
"#include \"" << include <<
"\"\n";
916 for (
const QString &include :
std::as_const(globalIncludes)) {
917 hs <<
"#include <" << include <<
">\n";
918 if (headerName.isEmpty())
919 cs <<
"#include <" << include <<
">\n";
922 if (cppName != headerName) {
923 if (!headerName.isEmpty() && headerName !=
"-"_L1)
924 cs <<
"#include \"" << headerName <<
"\"\n";
926 cs <<
"#include <QtCore/QMetaObject>\n"
936 QString parent = parentClassName;
938 parent = u
"QObject"_s;
945 " * Adaptor class for interface " <<
interface->name <<
"\n"
948 " * Implementation of adaptor class " <<
className <<
"\n"
952 hs <<
"class " <<
className <<
": public QDBusAbstractAdaptor\n"
955 " Q_CLASSINFO(\"D-Bus Interface\", \"" <<
interface->name <<
"\")\n"
956 " Q_CLASSINFO(\"D-Bus Introspection\", \"\"\n"
960 " " <<
className <<
"(" << parent <<
" *parent);\n"
963 if (!parentClassName.
isEmpty())
964 hs <<
" inline " << parent <<
" *parent() const\n"
965 " { return static_cast<" << parent <<
" *>(QObject::parent()); }\n\n";
969 " : QDBusAbstractAdaptor(parent)\n"
972 " setAutoRelaySignals(true);\n"
979 hs <<
"public: // PROPERTIES\n";
986 hs <<
" Q_PROPERTY(" <<
type <<
" " <<
property.name;
990 hs <<
" WRITE " <<
setter;
995 hs <<
" " <<
type <<
" " <<
getter <<
"() const;\n";
999 " // get the value of property " <<
property.name <<
"\n"
1000 " return qvariant_cast< " <<
type <<
" >(parent()->property(\"" <<
property.name <<
"\"));\n"
1006 hs <<
" void " <<
setter <<
"(" << constRefType <<
"value);\n";
1007 cs <<
"void " <<
className <<
"::" <<
setter <<
"(" << constRefType <<
"value)\n"
1009 " // set the value of property " <<
property.name <<
"\n"
1010 " parent()->setProperty(\"" <<
property.name <<
"\", QVariant::fromValue(value";
1011 if (constRefType.contains(
"QDBusVariant"_L1))
1020 hs <<
"public Q_SLOTS: // METHODS\n";
1023 if (isNoReply && !
method.outputArgs.isEmpty()) {
1024 reporter.warning(
method.location,
1025 "method %s in interface %s is marked 'no-reply' but has output "
1034 hs <<
"Q_NOREPLY void ";
1036 }
else if (
method.outputArgs.isEmpty()) {
1041 qtTypeName(
method.outputArgs.first().location,
1042 method.outputArgs.first().type,
method.annotations, 0,
"Out");
1043 hs << returnType <<
" ";
1044 cs << returnType <<
" ";
1061 bool usingInvokeMethod =
false;
1062 if (parentClassName.
isEmpty() &&
method.inputArgs.size() <= 10
1063 &&
method.outputArgs.size() <= 1)
1064 usingInvokeMethod =
true;
1066 if (usingInvokeMethod) {
1069 cs <<
" " << returnType <<
" " << argNames.
at(
method.inputArgs.size())
1072 static const char invoke[] =
" QMetaObject::invokeMethod(parent(), \"";
1073 cs << invoke <<
name <<
"\"";
1075 if (!
method.outputArgs.isEmpty())
1076 cs <<
", Q_RETURN_ARG("
1077 << qtTypeName(
method.outputArgs.at(0).location,
method.outputArgs.at(0).type,
1078 method.annotations, 0,
"Out")
1079 <<
", " << argNames.
at(
method.inputArgs.size()) <<
")";
1083 << qtTypeName(
method.inputArgs.at(
i).location,
method.inputArgs.at(
i).type,
1085 <<
", " << argNames.
at(
i) <<
")";
1090 cs <<
" return " << argNames.at(
method.inputArgs.size()) <<
";\n";
1092 if (parentClassName.
isEmpty())
1097 if (!
method.outputArgs.isEmpty())
1100 if (parentClassName.
isEmpty())
1101 cs <<
"static_cast<YourObjectType *>(parent())->";
1109 cs << (
first ?
"" :
", ") << argNames.at(argPos++);
1114 cs << (
first ?
"" :
", ") << argNames.at(argPos++);
1123 hs <<
"Q_SIGNALS: // SIGNALS\n";
1125 hs <<
" void " <<
signal.name <<
"(";
1128 writeSignalArgList(hs, argNames,
signal.annotations,
signal.outputArgs);
1141 if (includeMocs && !mocName.isEmpty())
1143 "#include \"" << mocName <<
"\"\n";
1153 if (headerName == cppName) {
1159 cppFile.
write(cppData);
1167 "Produces the C++ code to implement the interfaces defined in the input file.\n\n"
1168 "If the file name given to the options -a and -p does not end in .cpp or .h, the\n"
1169 "program will automatically append the suffixes and produce both files.\n"
1170 "You can also use a colon (:) to separate the header name from the source file\n"
1171 "name, as in '-a filename_p.h:filename.cpp'.\n\n"
1172 "If you pass a dash (-) as the argument to either -p or -a, the output is written\n"
1173 "to the standard output."_L1);
1179 u
"[interfaces ...]"_s);
1182 u
"Write the adaptor code to <filename>"_s, u
"filename"_s);
1186 u
"Use <classname> as the class name for the generated classes. "
1187 u
"This option can only be used when processing a single interface."_s,
1192 u
"Add #include \"filename\" to the output"_s, u
"filename"_s);
1196 u
"Add #include <filename> to the output"_s, u
"filename"_s);
1197 parser.
addOption(addGlobalIncludeOption);
1200 u
"When generating an adaptor, use <classname> as the parent class"_s, u
"classname"_s);
1204 u
"Generate #include \"filename.moc\" statements in the .cpp files"_s);
1208 u
"Don't use namespaces"_s);
1212 u
"Write the proxy code to <filename>"_s, u
"filename"_s);
1222 globalClassName = parser.
value(classNameOption);
1223 includes = parser.
values(addIncludeOption);
1224 globalIncludes = parser.
values(addGlobalIncludeOption);
1225 parentClassName = parser.
value(adapterParentOption);
1226 includeMocs = parser.
isSet(mocIncludeOption);
1227 skipNamespaces = parser.
isSet(noNamespaceOption);
1229 bool verbose = parser.
isSet(verboseOption);
1232 if (!wantedInterfaces.isEmpty()) {
1233 inputFile = wantedInterfaces.takeFirst();
1236 if (!inputInfo.exists() || !inputInfo.isFile() || !inputInfo.isReadable()) {
1237 qCritical(
"Error: Input %s is not a file or cannot be accessed\n",
qPrintable(inputFile));
1246 cleanInterfaces(interfaces);
1248 if (!globalClassName.
isEmpty() && interfaces.
count() != 1) {
1249 qCritical(
"Option -c/--classname can only be used with a single interface.\n");
1257 if (!proxyFile.isEmpty() || adaptorFile.isEmpty())
1258 writeProxy(proxyFile, interfaces);
1260 if (!adaptorFile.isEmpty())
1261 writeAdaptor(adaptorFile, interfaces);
static JNINativeMethod methods[]
char at(qsizetype i) const
Returns the byte at index position i in the byte array.
bool isEmpty() const noexcept
Returns true if the byte array has size 0; otherwise returns false.
The QCommandLineOption class defines a possible command-line option. \inmodule QtCore.
The QCommandLineParser class provides a means for handling the command line options.
QString value(const QString &name) const
Returns the option value found for the given option name optionName, or an empty string if not found.
void addPositionalArgument(const QString &name, const QString &description, const QString &syntax=QString())
Defines an additional argument to the application, for the benefit of the help text.
QStringList positionalArguments() const
Returns a list of positional arguments.
QStringList values(const QString &name) const
Returns a list of option values found for the given option name optionName, or an empty list if not f...
void setApplicationDescription(const QString &description)
Sets the application description shown by helpText().
bool addOption(const QCommandLineOption &commandLineOption)
Adds the option option to look for while parsing.
bool isSet(const QString &name) const
Checks whether the option name was passed to the application.
void process(const QStringList &arguments)
Processes the command line arguments.
QCommandLineOption addVersionOption()
Adds the {-v} / {–version} option, which displays the version string of the application.
QCommandLineOption addHelpOption()
Adds help options to the command-line parser.
static void setApplicationName(const QString &application)
static void setApplicationVersion(const QString &version)
static QStringList arguments()
static Interfaces parseInterfaces(const QString &xml, DiagnosticsReporter *reporter=nullptr)
Parses the XML document fragment (given by xml) containing several interfaces.
int run(const QCoreApplication &app)
QFILE_MAYBE_NODISCARD bool open(OpenMode flags) override
Opens the file using OpenMode mode, returning true if successful; otherwise false.
void setFileName(const QString &name)
Sets the name of the file.
qint64 write(const char *data, qint64 len)
Writes at most maxSize bytes of data from data to the device.
QString errorString() const
Returns a human-readable description of the last device error that occurred.
QString arg(Args &&...args) const
qsizetype size() const noexcept
void removeFirst() noexcept
const_reference at(qsizetype i) const noexcept
static void setFilterRules(const QString &rules)
Configures which categories and message types should be enabled through a set of rules.
T value(const Key &key, const T &defaultValue=T()) const
iterator erase(const_iterator it)
size_type count(const Key &key) const
const_iterator ConstIterator
const_iterator constBegin() const
const_iterator constEnd() const
\macro QT_RESTRICTED_CAST_FROM_ASCII
QByteArray toLatin1() const &
qsizetype lastIndexOf(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
QString & replace(qsizetype i, qsizetype len, QChar after)
QString mid(qsizetype position, qsizetype n=-1) const &
bool isEmpty() const noexcept
Returns true if the string has no characters; otherwise returns false.
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QString arg(qlonglong a, int fieldwidth=0, int base=10, QChar fillChar=u' ') const
QString last(qsizetype n) const &
QString toUpper() const &
QSet< QString >::iterator it
QString includeGuard(const QString &filename)
void getter(const QUntypedPropertyData *d, void *value)
void setter(QUntypedPropertyData *d, const void *value)
#define Q_ATTRIBUTE_FORMAT_PRINTF(A, B)
static const QCssKnownValue properties[NumProperties - 1]
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char * interface
DBusConnection const char DBusError * error
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char * method
static const char includeList[]
static bool isSupportedSuffix(QStringView suffix)
static QString stringify(const QString &data)
static QString moc(const QString &name)
#define ANNOTATION_NO_WAIT
static QString templateArg(const QByteArray &arg)
static const char forwardDeclarations[]
static QString methodName(const QDBusIntrospection::Method &method)
static QString header(const QString &name)
static QStringList makeArgNames(const QDBusIntrospection::Arguments &inputArgs, const QDBusIntrospection::Arguments &outputArgs=QDBusIntrospection::Arguments())
static QString constRefArg(const QByteArray &arg)
static bool openFile(const QString &fileName, QFile &file)
static QString nonConstRefArg(const QByteArray &arg)
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLsizei GLsizei GLchar * source
GLenum GLenum GLenum input
#define qPrintable(string)
#define QStringLiteral(str)
const char className[16]
[1]
ASSERT failure in file div cpp
QApplication app(argc, argv)
[0]