summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppmodelmanager.cpp
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2011-01-04 17:04:44 +0100
committerChristian Kamm <christian.d.kamm@nokia.com>2011-01-06 15:01:09 +0100
commitab642bc8206b291fb8b6f8a569ae4902a935187c (patch)
treee1439f85b5dce1424560f9ee14e8c971af9221ae /src/plugins/cpptools/cppmodelmanager.cpp
parent62d66fcd1542ebed3259606c792472c035960ebc (diff)
downloadqt-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.cpp16
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;