summaryrefslogtreecommitdiffstats
path: root/src/tools
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-09-29 12:58:32 +0200
committerLiang Qi <liang.qi@qt.io>2016-09-29 12:58:41 +0200
commite66d181e659a08d19ab7d144c3ba0619d537de83 (patch)
tree7367e93797cb9a2a331f0741baed5a1cad2c96b6 /src/tools
parent4758555f3e44af3425f0b691dc38fb40f3c9413d (diff)
parent75aea3ff5eec4a5c8f4184e14a90f4a5e3a577b0 (diff)
Merge remote-tracking branch 'origin/5.8' into dev
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/moc/moc.cpp38
-rw-r--r--src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp4
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);