summaryrefslogtreecommitdiff
path: root/src/libs/languageutils
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/libs/languageutils
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/libs/languageutils')
-rw-r--r--src/libs/languageutils/fakemetaobject.cpp4
-rw-r--r--src/libs/languageutils/fakemetaobject.h10
2 files changed, 9 insertions, 5 deletions
diff --git a/src/libs/languageutils/fakemetaobject.cpp b/src/libs/languageutils/fakemetaobject.cpp
index 6be0d25cb3..c026cca150 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 6fd032e5e5..f00b8f608a 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;