diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-12-23 15:16:08 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-12-24 08:10:16 +0100 |
commit | 2b287c7c210ac708c0f8872e51517e0d46380ad3 (patch) | |
tree | 42a127faabe1318db2ef18cfdd7dc1ffc6ab58e5 /src/tools/moc/moc.cpp | |
parent | d776937df91e46536f404c6868d64016b6038d7b (diff) |
Fix regression in property handling with enums from gadgets
When declaring a Q_PROPERTY(SomeType::SomeEnum foo ...) and SomeType is not a
QObject but a gadget, then we must still include SomeType's meta object in the
list of related meta objects.
Task-number: QTBUG-35657
Change-Id: I46195140cb5d180c4f03bb1fe06a876e3fe11267
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'src/tools/moc/moc.cpp')
-rw-r--r-- | src/tools/moc/moc.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index 15b65d2045..2c3f795346 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -608,21 +608,27 @@ void Moc::parse() continue; while (inClass(&def) && hasNext()) { - if (next() == Q_OBJECT_TOKEN) { + switch (next()) { + case Q_OBJECT_TOKEN: def.hasQObject = true; break; + case Q_GADGET_TOKEN: + def.hasQGadget = true; + break; + default: break; } } - if (!def.hasQObject) + if (!def.hasQObject && !def.hasQGadget) continue; for (int i = namespaceList.size() - 1; i >= 0; --i) if (inNamespace(&namespaceList.at(i))) def.qualified.prepend(namespaceList.at(i).name + "::"); - knownQObjectClasses.insert(def.classname, def.qualified); - knownQObjectClasses.insert(def.qualified, def.qualified); + QHash<QByteArray, QByteArray> &classHash = def.hasQObject ? knownQObjectClasses : knownGadgets; + classHash.insert(def.classname, def.qualified); + classHash.insert(def.qualified, def.qualified); continue; } default: break; @@ -795,8 +801,9 @@ void Moc::parse() checkProperties(&def); classList += def; - knownQObjectClasses.insert(def.classname, def.qualified); - knownQObjectClasses.insert(def.qualified, def.qualified); + QHash<QByteArray, QByteArray> &classHash = def.hasQObject ? knownQObjectClasses : knownGadgets; + classHash.insert(def.classname, def.qualified); + classHash.insert(def.qualified, def.qualified); } } } @@ -896,7 +903,7 @@ void Moc::generate(FILE *out) fprintf(out, "QT_BEGIN_MOC_NAMESPACE\n"); for (i = 0; i < classList.size(); ++i) { - Generator generator(&classList[i], metaTypes, knownQObjectClasses, out); + Generator generator(&classList[i], metaTypes, knownQObjectClasses, knownGadgets, out); generator.generateCode(); } |