diff options
Diffstat (limited to 'src/tools/moc')
-rw-r--r-- | src/tools/moc/generator.cpp | 10 | ||||
-rw-r--r-- | src/tools/moc/generator.h | 3 | ||||
-rw-r--r-- | src/tools/moc/moc.cpp | 21 | ||||
-rw-r--r-- | src/tools/moc/moc.h | 1 |
4 files changed, 24 insertions, 11 deletions
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp index 0740a860ba..8c1a2f0354 100644 --- a/src/tools/moc/generator.cpp +++ b/src/tools/moc/generator.cpp @@ -87,8 +87,9 @@ QT_FOR_EACH_STATIC_TYPE(RETURN_METATYPENAME_STRING) return 0; } -Generator::Generator(ClassDef *classDef, const QList<QByteArray> &metaTypes, const QHash<QByteArray, QByteArray> &knownQObjectClasses, FILE *outfile) +Generator::Generator(ClassDef *classDef, const QList<QByteArray> &metaTypes, const QHash<QByteArray, QByteArray> &knownQObjectClasses, const QHash<QByteArray, QByteArray> &knownGadgets, FILE *outfile) : out(outfile), cdef(classDef), metaTypes(metaTypes), knownQObjectClasses(knownQObjectClasses) + , knownGadgets(knownGadgets) { if (cdef->superclassList.size()) purestSuperClass = cdef->superclassList.first().first; @@ -452,8 +453,11 @@ void Generator::generateCode() // The scope may be a namespace for example, so it's only safe to include scopes that are known QObjects (QTBUG-2151) QHash<QByteArray, QByteArray>::ConstIterator scopeIt = knownQObjectClasses.find(unqualifiedScope); - if (scopeIt == knownQObjectClasses.constEnd()) - continue; + if (scopeIt == knownQObjectClasses.constEnd()) { + scopeIt = knownGadgets.find(unqualifiedScope); + if (scopeIt == knownGadgets.constEnd()) + continue; + } const QByteArray &scope = *scopeIt; if (scope == "Qt") diff --git a/src/tools/moc/generator.h b/src/tools/moc/generator.h index 725c4ffb12..a01ec5860b 100644 --- a/src/tools/moc/generator.h +++ b/src/tools/moc/generator.h @@ -52,7 +52,7 @@ class Generator ClassDef *cdef; QVector<uint> meta_data; public: - Generator(ClassDef *classDef, const QList<QByteArray> &metaTypes, const QHash<QByteArray, QByteArray> &knownQObjectClasses, FILE *outfile = 0); + Generator(ClassDef *classDef, const QList<QByteArray> &metaTypes, const QHash<QByteArray, QByteArray> &knownQObjectClasses, const QHash<QByteArray, QByteArray> &knownGadgets, FILE *outfile = 0); void generateCode(); private: bool registerableMetaType(const QByteArray &propertyType); @@ -80,6 +80,7 @@ private: QByteArray purestSuperClass; QList<QByteArray> metaTypes; QHash<QByteArray, QByteArray> knownQObjectClasses; + QHash<QByteArray, QByteArray> knownGadgets; }; QT_END_NAMESPACE 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(); } diff --git a/src/tools/moc/moc.h b/src/tools/moc/moc.h index 4bbdde47dc..e8da24b2bf 100644 --- a/src/tools/moc/moc.h +++ b/src/tools/moc/moc.h @@ -217,6 +217,7 @@ public: QList<QByteArray> metaTypes; // map from class name to fully qualified name QHash<QByteArray, QByteArray> knownQObjectClasses; + QHash<QByteArray, QByteArray> knownGadgets; QMap<QString, QJsonArray> metaArgs; void parse(); |