diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2011-01-04 17:04:44 +0100 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2011-01-06 15:01:09 +0100 |
commit | ab642bc8206b291fb8b6f8a569ae4902a935187c (patch) | |
tree | e1439f85b5dce1424560f9ee14e8c971af9221ae /src/plugins/cpptools/cppmodelmanager.cpp | |
parent | 62d66fcd1542ebed3259606c792472c035960ebc (diff) | |
download | qt-creator-ab642bc8206b291fb8b6f8a569ae4902a935187c.tar.gz |
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
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanager.cpp')
-rw-r--r-- | src/plugins/cpptools/cppmodelmanager.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 6b57eda68e..263e0c1a81 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; |