diff options
author | Liang Qi <liang.qi@qt.io> | 2016-09-29 12:58:32 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-09-29 12:58:41 +0200 |
commit | e66d181e659a08d19ab7d144c3ba0619d537de83 (patch) | |
tree | 7367e93797cb9a2a331f0741baed5a1cad2c96b6 /src/tools | |
parent | 4758555f3e44af3425f0b691dc38fb40f3c9413d (diff) | |
parent | 75aea3ff5eec4a5c8f4184e14a90f4a5e3a577b0 (diff) |
Merge remote-tracking branch 'origin/5.8' into dev
Change-Id: I3b51bb706e401edfda09a433c67aa58e44f33e83
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/moc/moc.cpp | 38 | ||||
-rw-r--r-- | src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp | 4 |
2 files changed, 36 insertions, 6 deletions
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index e4b9b19758..3bd87e1f01 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -538,7 +538,6 @@ bool Moc::parseMaybeFunction(const ClassDef *cdef, FunctionDef *def) return true; } - void Moc::parse() { QVector<NamespaceDef> namespaceList; @@ -560,9 +559,27 @@ void Moc::parse() until(RBRACE); def.end = index; index = def.begin + 1; + const bool parseNamespace = currentFilenames.size() <= 1; + if (parseNamespace) { + for (int i = namespaceList.size() - 1; i >= 0; --i) { + if (inNamespace(&namespaceList.at(i))) { + def.qualified.prepend(namespaceList.at(i).classname + "::"); + } + } + } while (parseNamespace && inNamespace(&def) && hasNext()) { switch (next()) { + case NAMESPACE: + if (test(IDENTIFIER)) { + if (test(EQ)) { + // namespace Foo = Bar::Baz; + until(SEMIC); + } else if (!test(SEMIC)) { + until(RBRACE); + } + } + break; case Q_NAMESPACE_TOKEN: def.hasQNamespace = true; break; @@ -857,13 +874,22 @@ void Moc::parse() continue; ClassDef def; static_cast<BaseDef &>(def) = static_cast<BaseDef>(n); - if (!def.qualified.isEmpty()) - def.qualified += "::"; def.qualified += def.classname; def.hasQGadget = true; - classList += def; - knownGadgets.insert(def.classname, def.qualified); - knownGadgets.insert(def.qualified, def.qualified); + auto it = std::find_if(classList.begin(), classList.end(), [&def](const ClassDef &val) { + return def.classname == val.classname && def.qualified == val.qualified; + }); + + if (it != classList.end()) { + it->classInfoList += def.classInfoList; + it->enumDeclarations.unite(def.enumDeclarations); + it->enumList += def.enumList; + it->flagAliases.unite(def.flagAliases); + } else { + knownGadgets.insert(def.classname, def.qualified); + knownGadgets.insert(def.qualified, def.qualified); + classList += def; + } } } diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp index e58f194b72..8dbb1bf350 100644 --- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp +++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp @@ -32,6 +32,7 @@ #include <qdebug.h> #include <qfile.h> #include <qfileinfo.h> +#include <qloggingcategory.h> #include <qstring.h> #include <qstringlist.h> #include <qtextstream.h> @@ -1092,6 +1093,9 @@ int main(int argc, char **argv) } } + if (verbose) + QLoggingCategory::setFilterRules(QStringLiteral("dbus.parser.debug=true")); + QDBusIntrospection::Interfaces interfaces = readInput(); cleanInterfaces(interfaces); |