From ab642bc8206b291fb8b6f8a569ae4902a935187c Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Tue, 4 Jan 2011 17:04:44 +0100 Subject: [PATCH] QmlJS: Add refcounting to FakeMetaObjects. Previously they were leaked when a qmldump or the C++ exported QML type list updated. Just deleting the previous FakeMetaObjects is not an option, as they might still be used in a QmlObjectValue owned by an Engine. Reviewed-by: Erik Verbruggen --- src/libs/cplusplus/ModelManagerInterface.h | 2 +- src/libs/languageutils/fakemetaobject.cpp | 4 +- src/libs/languageutils/fakemetaobject.h | 10 ++- src/libs/qmljs/qmljsdocument.h | 8 +-- src/libs/qmljs/qmljsinterpreter.cpp | 71 ++++++++++---------- src/libs/qmljs/qmljsinterpreter.h | 26 +++---- src/plugins/cpptools/cppmodelmanager.cpp | 16 ++--- src/plugins/cpptools/cppmodelmanager.h | 2 +- src/plugins/qmljstools/qmljsmodelmanager.cpp | 5 +- src/plugins/qmljstools/qmljsplugindumper.cpp | 12 ++-- 10 files changed, 73 insertions(+), 83 deletions(-) diff --git a/src/libs/cplusplus/ModelManagerInterface.h b/src/libs/cplusplus/ModelManagerInterface.h index 0a1f3217c4c..943d32000be 100644 --- a/src/libs/cplusplus/ModelManagerInterface.h +++ b/src/libs/cplusplus/ModelManagerInterface.h @@ -147,7 +147,7 @@ public: virtual void findMacroUsages(const CPlusPlus::Macro ¯o) = 0; - virtual QList<LanguageUtils::FakeMetaObject *> exportedQmlObjects() const = 0; + virtual QList<LanguageUtils::FakeMetaObject::ConstPtr> exportedQmlObjects() const = 0; Q_SIGNALS: void documentUpdated(CPlusPlus::Document::Ptr doc); diff --git a/src/libs/languageutils/fakemetaobject.cpp b/src/libs/languageutils/fakemetaobject.cpp index 6be0d25cb3b..c026cca150a 100644 --- a/src/libs/languageutils/fakemetaobject.cpp +++ b/src/libs/languageutils/fakemetaobject.cpp @@ -128,9 +128,9 @@ void FakeMetaObject::setSuperclassName(const QString &superclass) QString FakeMetaObject::superclassName() const { return m_superName; } -void FakeMetaObject::setSuperclass(FakeMetaObject *superClass) +void FakeMetaObject::setSuperclass(ConstPtr superClass) { m_super = superClass; } -const FakeMetaObject *FakeMetaObject::superClass() const +FakeMetaObject::ConstPtr FakeMetaObject::superClass() const { return m_super; } void FakeMetaObject::addEnum(const FakeMetaEnum &fakeEnum) diff --git a/src/libs/languageutils/fakemetaobject.h b/src/libs/languageutils/fakemetaobject.h index 6fd032e5e59..f00b8f608ac 100644 --- a/src/libs/languageutils/fakemetaobject.h +++ b/src/libs/languageutils/fakemetaobject.h @@ -41,6 +41,7 @@ #include <QtCore/QStringList> #include <QtCore/QList> #include <QtCore/QHash> +#include <QtCore/QSharedPointer> namespace LanguageUtils { @@ -118,6 +119,9 @@ class LANGUAGEUTILS_EXPORT FakeMetaObject { Q_DISABLE_COPY(FakeMetaObject); public: + typedef QSharedPointer<FakeMetaObject> Ptr; + typedef QSharedPointer<const FakeMetaObject> ConstPtr; + class Export { public: QString package; @@ -128,7 +132,7 @@ public: private: QList<Export> m_exports; - const FakeMetaObject *m_super; + ConstPtr m_super; QString m_superName; QList<FakeMetaEnum> m_enums; QHash<QString, int> m_enumNameToIndex; @@ -145,8 +149,8 @@ public: void setSuperclassName(const QString &superclass); QString superclassName() const; - void setSuperclass(FakeMetaObject *superClass); - const FakeMetaObject *superClass() const; + void setSuperclass(ConstPtr superClass); + ConstPtr superClass() const; void addEnum(const FakeMetaEnum &fakeEnum); int enumeratorCount() const; diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h index b9dc3ca5eb8..e3a239e220a 100644 --- a/src/libs/qmljs/qmljsdocument.h +++ b/src/libs/qmljs/qmljsdocument.h @@ -39,16 +39,14 @@ #include <QtCore/QSharedPointer> #include <QtCore/QString> +#include <languageutils/fakemetaobject.h> + #include "parser/qmldirparser_p.h" #include "parser/qmljsengine_p.h" #include "qmljs_global.h" QT_QML_BEGIN_NAMESPACE -namespace LanguageUtils { - class FakeMetaObject; -} - namespace QmlJS { class Bind; @@ -134,7 +132,7 @@ private: bool _valid; QList<QmlDirParser::Component> _components; QList<QmlDirParser::Plugin> _plugins; - typedef QList<const LanguageUtils::FakeMetaObject *> FakeMetaObjectList; + typedef QList<LanguageUtils::FakeMetaObject::ConstPtr> FakeMetaObjectList; FakeMetaObjectList _metaObjects; DumpStatus _dumpStatus; diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index da0616cf0a4..fb2fe5a589e 100644 --- a/src/libs/qmljs/qmljsinterpreter.cpp +++ b/src/libs/qmljs/qmljsinterpreter.cpp @@ -164,7 +164,7 @@ public: : _xml(data) {} - bool operator()(QMap<QString, FakeMetaObject *> *objects) { + bool operator()(QMap<QString, FakeMetaObject::Ptr> *objects) { Q_ASSERT(objects); _objects = objects; @@ -247,7 +247,7 @@ private: } } - FakeMetaObject *metaObject = new FakeMetaObject; + FakeMetaObject::Ptr metaObject = FakeMetaObject::Ptr(new FakeMetaObject); if (! extends.isEmpty()) metaObject->setSuperclassName(extends); if (! defaultPropertyName.isEmpty()) @@ -270,11 +270,8 @@ private: metaObject->addExport(id, QString(), ComponentVersion()); - if (doInsert) { + if (doInsert) _objects->insert(id, metaObject); - } else { - delete metaObject; - } } bool split(const QString &name, QString *packageName, QString *className) { @@ -294,7 +291,7 @@ private: } } - void readProperty(FakeMetaObject *metaObject) + void readProperty(FakeMetaObject::Ptr metaObject) { const QLatin1String tag("property"); Q_ASSERT(_xml.isStartElement() && _xml.name() == tag); @@ -352,14 +349,14 @@ private: } } - void createProperty(FakeMetaObject *metaObject, const QString &name, + void createProperty(FakeMetaObject::Ptr metaObject, const QString &name, const QString &type, bool isList, bool isWritable, bool isPointer) { Q_ASSERT(metaObject); metaObject->addProperty(FakeMetaProperty(name, type, isList, isWritable, isPointer)); } - void readEnum(FakeMetaObject *metaObject) + void readEnum(FakeMetaObject::Ptr metaObject) { Q_ASSERT(metaObject); @@ -426,7 +423,7 @@ private: } } - void readSignal(FakeMetaObject *metaObject) + void readSignal(FakeMetaObject::Ptr metaObject) { Q_ASSERT(metaObject); QLatin1String tag("signal"); @@ -489,7 +486,7 @@ private: } } - void readMethod(FakeMetaObject *metaObject) + void readMethod(FakeMetaObject::Ptr metaObject) { Q_ASSERT(metaObject); QLatin1String tag("method"); @@ -526,7 +523,7 @@ private: metaObject->addMethod(method); } - void readExports(FakeMetaObject *metaObject) + void readExports(FakeMetaObject::Ptr metaObject) { Q_ASSERT(metaObject); QLatin1String tag("exports"); @@ -582,12 +579,12 @@ private: private: QXmlStreamReader _xml; - QMap<QString, FakeMetaObject *> *_objects; + QMap<QString, FakeMetaObject::Ptr> *_objects; }; } // end of anonymous namespace -QmlObjectValue::QmlObjectValue(const FakeMetaObject *metaObject, const QString &className, +QmlObjectValue::QmlObjectValue(FakeMetaObject::ConstPtr metaObject, const QString &className, const QString &packageName, const ComponentVersion version, Engine *engine) : ObjectValue(engine), _metaObject(metaObject), @@ -734,7 +731,7 @@ QString QmlObjectValue::defaultPropertyName() const QString QmlObjectValue::propertyType(const QString &propertyName) const { - for (const FakeMetaObject *iter = _metaObject; iter; iter = iter->superClass()) { + for (FakeMetaObject::ConstPtr iter = _metaObject; iter; iter = iter->superClass()) { int propIdx = iter->propertyIndex(propertyName); if (propIdx != -1) { return iter->property(propIdx).typeName(); @@ -745,7 +742,7 @@ QString QmlObjectValue::propertyType(const QString &propertyName) const bool QmlObjectValue::isListProperty(const QString &propertyName) const { - for (const FakeMetaObject *iter = _metaObject; iter; iter = iter->superClass()) { + for (FakeMetaObject::ConstPtr iter = _metaObject; iter; iter = iter->superClass()) { int propIdx = iter->propertyIndex(propertyName); if (propIdx != -1) { return iter->property(propIdx).isList(); @@ -761,7 +758,7 @@ bool QmlObjectValue::isEnum(const QString &typeName) const bool QmlObjectValue::isWritable(const QString &propertyName) const { - for (const FakeMetaObject *iter = _metaObject; iter; iter = iter->superClass()) { + for (FakeMetaObject::ConstPtr iter = _metaObject; iter; iter = iter->superClass()) { int propIdx = iter->propertyIndex(propertyName); if (propIdx != -1) { return iter->property(propIdx).isWritable(); @@ -772,7 +769,7 @@ bool QmlObjectValue::isWritable(const QString &propertyName) const bool QmlObjectValue::isPointer(const QString &propertyName) const { - for (const FakeMetaObject *iter = _metaObject; iter; iter = iter->superClass()) { + for (FakeMetaObject::ConstPtr iter = _metaObject; iter; iter = iter->superClass()) { int propIdx = iter->propertyIndex(propertyName); if (propIdx != -1) { return iter->property(propIdx).isPointer(); @@ -791,7 +788,7 @@ bool QmlObjectValue::hasLocalProperty(const QString &typeName) const bool QmlObjectValue::hasProperty(const QString &propertyName) const { - for (const FakeMetaObject *iter = _metaObject; iter; iter = iter->superClass()) { + for (FakeMetaObject::ConstPtr iter = _metaObject; iter; iter = iter->superClass()) { int propIdx = iter->propertyIndex(propertyName); if (propIdx != -1) { return true; @@ -831,11 +828,11 @@ bool QmlObjectValue::hasChildInPackage() const QHashIterator<QString, QmlObjectValue *> it(engine()->cppQmlTypes().types()); while (it.hasNext()) { it.next(); - const FakeMetaObject *other = it.value()->_metaObject; + FakeMetaObject::ConstPtr other = it.value()->_metaObject; // if it has only the default no-package export, it is not really exported if (other->exports().size() <= 1) continue; - for (const FakeMetaObject *iter = other; iter; iter = iter->superClass()) { + for (FakeMetaObject::ConstPtr iter = other; iter; iter = iter->superClass()) { if (iter == _metaObject) // this object is a parent of other return true; } @@ -843,9 +840,9 @@ bool QmlObjectValue::hasChildInPackage() const return false; } -bool QmlObjectValue::isDerivedFrom(const FakeMetaObject *base) const +bool QmlObjectValue::isDerivedFrom(FakeMetaObject::ConstPtr base) const { - for (const FakeMetaObject *iter = _metaObject; iter; iter = iter->superClass()) { + for (FakeMetaObject::ConstPtr iter = _metaObject; iter; iter = iter->superClass()) { if (iter == base) return true; } @@ -1946,12 +1943,12 @@ const Value *Function::invoke(const Activation *activation) const // typing environment //////////////////////////////////////////////////////////////////////////////// -QList<const FakeMetaObject *> CppQmlTypesLoader::builtinObjects; -QList<const FakeMetaObject *> CppQmlTypesLoader::cppObjects; +QList<FakeMetaObject::ConstPtr> CppQmlTypesLoader::builtinObjects; +QList<FakeMetaObject::ConstPtr> CppQmlTypesLoader::cppObjects; QStringList CppQmlTypesLoader::load(const QFileInfoList &xmlFiles) { - QMap<QString, FakeMetaObject *> newObjects; + QMap<QString, FakeMetaObject::Ptr> newObjects; QStringList errorMsgs; foreach (const QFileInfo &xmlFile, xmlFiles) { @@ -1973,7 +1970,7 @@ QStringList CppQmlTypesLoader::load(const QFileInfoList &xmlFiles) // we need to go from QList<T *> of newObjects.values() to QList<const T *> // and there seems to be no better way - QMapIterator<QString, FakeMetaObject *> it(newObjects); + QMapIterator<QString, FakeMetaObject::Ptr> it(newObjects); while (it.hasNext()) { it.next(); builtinObjects.append(it.value()); @@ -1983,7 +1980,7 @@ QStringList CppQmlTypesLoader::load(const QFileInfoList &xmlFiles) return errorMsgs; } -QString CppQmlTypesLoader::parseQmlTypeXml(const QByteArray &xml, QMap<QString, FakeMetaObject *> *newObjects) +QString CppQmlTypesLoader::parseQmlTypeXml(const QByteArray &xml, QMap<QString, FakeMetaObject::Ptr> *newObjects) { QmlXmlReader reader(xml); if (!reader(newObjects)) { @@ -1995,16 +1992,16 @@ QString CppQmlTypesLoader::parseQmlTypeXml(const QByteArray &xml, QMap<QString, return QString(); } -void CppQmlTypesLoader::setSuperClasses(QMap<QString, FakeMetaObject *> *newObjects) +void CppQmlTypesLoader::setSuperClasses(QMap<QString, FakeMetaObject::Ptr> *newObjects) { - QMapIterator<QString, FakeMetaObject *> it(*newObjects); + QMapIterator<QString, FakeMetaObject::Ptr> it(*newObjects); while (it.hasNext()) { it.next(); - FakeMetaObject *obj = it.value(); + FakeMetaObject::Ptr obj = it.value(); const QString superName = obj->superclassName(); if (! superName.isEmpty()) { - FakeMetaObject *superClass = newObjects->value(superName); + FakeMetaObject::Ptr superClass = newObjects->value(superName); if (superClass) obj->setSuperclass(superClass); else @@ -2013,10 +2010,10 @@ void CppQmlTypesLoader::setSuperClasses(QMap<QString, FakeMetaObject *> *newObje } } -void CppQmlTypes::load(Engine *engine, const QList<const FakeMetaObject *> &objects) +void CppQmlTypes::load(Engine *engine, const QList<FakeMetaObject::ConstPtr> &objects) { // load - foreach (const FakeMetaObject *metaObject, objects) { + foreach (FakeMetaObject::ConstPtr metaObject, objects) { for (int i = 0; i < metaObject->exports().size(); ++i) { const FakeMetaObject::Export &exp = metaObject->exports().at(i); // make sure we're not loading duplicate objects @@ -2031,7 +2028,7 @@ void CppQmlTypes::load(Engine *engine, const QList<const FakeMetaObject *> &obje } // set prototypes - foreach (const FakeMetaObject *metaObject, objects) { + foreach (FakeMetaObject::ConstPtr metaObject, objects) { foreach (const FakeMetaObject::Export &exp, metaObject->exports()) { QmlObjectValue *objectValue = _typesByFullyQualifiedName.value(exp.packageNameVersion); if (!objectValue || !metaObject->superClass()) @@ -2043,7 +2040,7 @@ void CppQmlTypes::load(Engine *engine, const QList<const FakeMetaObject *> &obje // needs to create Positioner (Qt) and Positioner (QtQuick) bool created = true; QmlObjectValue *v = objectValue; - const FakeMetaObject *fmo = metaObject; + FakeMetaObject::ConstPtr fmo = metaObject; while (created && fmo->superClass()) { QmlObjectValue *superValue = getOrCreate(exp.package, fmo->superclassName(), fmo->superClass(), engine, &created); @@ -2136,7 +2133,7 @@ QmlObjectValue *CppQmlTypes::typeByQualifiedName(const QString &package, const Q } QmlObjectValue *CppQmlTypes::getOrCreate(const QString &package, const QString &cppName, - const FakeMetaObject *metaObject, Engine *engine, bool *created) + FakeMetaObject::ConstPtr metaObject, Engine *engine, bool *created) { QString typeName = cppName; ComponentVersion version; diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h index 758ca27cce4..f4f10b0fb41 100644 --- a/src/libs/qmljs/qmljsinterpreter.h +++ b/src/libs/qmljs/qmljsinterpreter.h @@ -35,6 +35,7 @@ #define QMLJS_INTERPRETER_H #include <languageutils/componentversion.h> +#include <languageutils/fakemetaobject.h> #include <qmljs/qmljsdocument.h> #include <qmljs/qmljs_global.h> #include <qmljs/parser/qmljsastfwd_p.h> @@ -46,13 +47,6 @@ #include <QtCore/QSet> #include <QtCore/QMutex> -namespace LanguageUtils { -class FakeMetaObject; -class FakeMetaMethod; -class FakeMetaProperty; -class FakeMetaEnum; -} - namespace QmlJS { class NameId; @@ -452,7 +446,7 @@ private: class QMLJS_EXPORT QmlObjectValue: public ObjectValue { public: - QmlObjectValue(const LanguageUtils::FakeMetaObject *metaObject, const QString &className, + QmlObjectValue(LanguageUtils::FakeMetaObject::ConstPtr metaObject, const QString &className, const QString &packageName, const LanguageUtils::ComponentVersion version, Engine *engine); virtual ~QmlObjectValue(); @@ -478,10 +472,10 @@ public: protected: const Value *findOrCreateSignature(int index, const LanguageUtils::FakeMetaMethod &method, QString *methodName) const; - bool isDerivedFrom(const LanguageUtils::FakeMetaObject *base) const; + bool isDerivedFrom(LanguageUtils::FakeMetaObject::ConstPtr base) const; private: - const LanguageUtils::FakeMetaObject *_metaObject; + LanguageUtils::FakeMetaObject::ConstPtr _metaObject; const QString _packageName; const LanguageUtils::ComponentVersion _componentVersion; mutable QHash<int, const Value *> _metaSignature; @@ -592,20 +586,20 @@ class QMLJS_EXPORT CppQmlTypesLoader public: /** \return an empty list when successful, error messages otherwise. */ static QStringList load(const QFileInfoList &xmlFiles); - static QList<const LanguageUtils::FakeMetaObject *> builtinObjects; - static QList<const LanguageUtils::FakeMetaObject *> cppObjects; + static QList<LanguageUtils::FakeMetaObject::ConstPtr> builtinObjects; + static QList<LanguageUtils::FakeMetaObject::ConstPtr> cppObjects; // parses the xml string and fills the newObjects map static QString parseQmlTypeXml(const QByteArray &xml, - QMap<QString, LanguageUtils::FakeMetaObject *> *newObjects); + QMap<QString, LanguageUtils::FakeMetaObject::Ptr> *newObjects); private: - static void setSuperClasses(QMap<QString, LanguageUtils::FakeMetaObject *> *newObjects); + static void setSuperClasses(QMap<QString, LanguageUtils::FakeMetaObject::Ptr> *newObjects); }; class QMLJS_EXPORT CppQmlTypes { public: - void load(Interpreter::Engine *interpreter, const QList<const LanguageUtils::FakeMetaObject *> &objects); + void load(Interpreter::Engine *interpreter, const QList<LanguageUtils::FakeMetaObject::ConstPtr> &objects); QList<Interpreter::QmlObjectValue *> typesForImport(const QString &prefix, LanguageUtils::ComponentVersion version) const; Interpreter::QmlObjectValue *typeForImport(const QString &qualifiedName, @@ -623,7 +617,7 @@ public: private: QmlObjectValue *getOrCreate(const QString &package, const QString &cppName, - const LanguageUtils::FakeMetaObject *metaObject, + LanguageUtils::FakeMetaObject::ConstPtr metaObject, Engine *engine, bool *created); diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 6b57eda68ee..263e0c1a81a 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -1459,8 +1459,8 @@ static Class *lookupClass(const QString &expression, Scope *scope, TypeOfExpress return 0; } -static void populate(LanguageUtils::FakeMetaObject *fmo, Class *klass, - QHash<Class *, LanguageUtils::FakeMetaObject *> *classes, +static void populate(LanguageUtils::FakeMetaObject::Ptr fmo, Class *klass, + QHash<Class *, LanguageUtils::FakeMetaObject::Ptr> *classes, TypeOfExpression &typeOf) { using namespace LanguageUtils; @@ -1539,27 +1539,27 @@ static void populate(LanguageUtils::FakeMetaObject *fmo, Class *klass, if (!baseClass) return; - FakeMetaObject *baseFmo = classes->value(baseClass); + FakeMetaObject::Ptr baseFmo = classes->value(baseClass); if (!baseFmo) { - baseFmo = new FakeMetaObject; + baseFmo = FakeMetaObject::Ptr(new FakeMetaObject); populate(baseFmo, baseClass, classes, typeOf); } fmo->setSuperclass(baseFmo); } } -QList<LanguageUtils::FakeMetaObject *> CppModelManager::exportedQmlObjects() const +QList<LanguageUtils::FakeMetaObject::ConstPtr> CppModelManager::exportedQmlObjects() const { using namespace LanguageUtils; - QList<FakeMetaObject *> exportedObjects; - QHash<Class *, FakeMetaObject *> classes; + QList<FakeMetaObject::ConstPtr> exportedObjects; + QHash<Class *, FakeMetaObject::Ptr> classes; const Snapshot currentSnapshot = snapshot(); foreach (Document::Ptr doc, currentSnapshot) { TypeOfExpression typeOf; typeOf.init(doc, currentSnapshot); foreach (const Document::ExportedQmlType &exportedType, doc->exportedQmlTypes()) { - FakeMetaObject *fmo = new FakeMetaObject; + FakeMetaObject::Ptr fmo(new FakeMetaObject); fmo->addExport(exportedType.typeName, exportedType.packageName, ComponentVersion(exportedType.majorVersion, exportedType.minorVersion)); exportedObjects += fmo; diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index bd0bef09622..262a30d99f7 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -131,7 +131,7 @@ public: virtual void findMacroUsages(const CPlusPlus::Macro ¯o); - virtual QList<LanguageUtils::FakeMetaObject *> exportedQmlObjects() const; + virtual QList<LanguageUtils::FakeMetaObject::ConstPtr> exportedQmlObjects() const; void setHeaderSuffixes(const QStringList &suffixes) { m_headerSuffixes = suffixes; } diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp index 0477f9ed01c..377d2540e5e 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -562,8 +562,5 @@ void ModelManager::updateCppQmlTypes() if (!cppModelManager) return; - QList<const LanguageUtils::FakeMetaObject *> constFMOs; - foreach (LanguageUtils::FakeMetaObject *fmo, cppModelManager->exportedQmlObjects()) - constFMOs.append(fmo); - Interpreter::CppQmlTypesLoader::cppObjects = constFMOs; + Interpreter::CppQmlTypesLoader::cppObjects = cppModelManager->exportedQmlObjects(); } diff --git a/src/plugins/qmljstools/qmljsplugindumper.cpp b/src/plugins/qmljstools/qmljsplugindumper.cpp index 56f98333815..cc05c9a2783 100644 --- a/src/plugins/qmljstools/qmljsplugindumper.cpp +++ b/src/plugins/qmljstools/qmljsplugindumper.cpp @@ -126,15 +126,15 @@ static QString qmldumpFailedMessage() return PluginDumper::tr("Type dump of C++ plugin failed.\nCheck 'General Messages' output pane for details."); } -static QList<const FakeMetaObject *> parseHelper(const QByteArray &xml, QString *error) +static QList<FakeMetaObject::ConstPtr> parseHelper(const QByteArray &xml, QString *error) { - QList<const FakeMetaObject *> ret; - QMap<QString, FakeMetaObject *> newObjects; + QList<FakeMetaObject::ConstPtr> ret; + QMap<QString, FakeMetaObject::Ptr> newObjects; *error = Interpreter::CppQmlTypesLoader::parseQmlTypeXml(xml, &newObjects); if (error->isEmpty()) { // convert from QList<T *> to QList<const T *> - QMapIterator<QString, FakeMetaObject *> it(newObjects); + QMapIterator<QString, FakeMetaObject::Ptr> it(newObjects); while (it.hasNext()) { it.next(); ret.append(it.value()); @@ -162,7 +162,7 @@ void PluginDumper::qmlPluginTypeDumpDone(int exitCode) const QByteArray output = process->readAllStandardOutput(); QString error; - QList<const FakeMetaObject *> objectsList = parseHelper(output, &error); + QList<FakeMetaObject::ConstPtr> objectsList = parseHelper(output, &error); if (exitCode == 0 && !error.isEmpty()) { libraryInfo.setDumpStatus(LibraryInfo::DumpError, tr("Type dump of C++ plugin failed. Parse error:\n'%1'").arg(error)); } @@ -229,7 +229,7 @@ void PluginDumper::dump(const Plugin &plugin) libraryXmlFile.close(); QString error; - const QList<const FakeMetaObject *> objectsList = parseHelper(xml, &error); + const QList<FakeMetaObject::ConstPtr> objectsList = parseHelper(xml, &error); if (error.isEmpty()) { libraryInfo.setMetaObjects(objectsList); -- GitLab