diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2018-04-24 10:44:05 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2018-04-26 09:56:53 +0000 |
commit | 99b7f1b50267071023bcc35e094b61eb0e568b5d (patch) | |
tree | fce977d20fcdbe5ae4bb314e8dc7457795135d1d /src | |
parent | f741956de935ab9f954afa53b32a167c0c7528ea (diff) |
Clean up manual reference counting of QQmlQmldirData
Finally the handling of the asynchronously retrievable qqmldir data
obtained via QQmlTypeLoader::getQmldir(url) becomes simpler when doing
QQmlRefPointer.
Change-Id: I557980482f8d1a3c7e4189dee92564ec5e6dfb48
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/qml/qqmltypeloader.cpp | 25 | ||||
-rw-r--r-- | src/qml/qml/qqmltypeloader_p.h | 9 |
2 files changed, 9 insertions, 25 deletions
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index 61bcf6a663..2691a15885 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -1328,20 +1328,17 @@ QQmlTypeLoader::Blob::Blob(const QUrl &url, QQmlDataBlob::Type type, QQmlTypeLoa QQmlTypeLoader::Blob::~Blob() { - for (int ii = 0; ii < m_qmldirs.count(); ++ii) - m_qmldirs.at(ii)->release(); } bool QQmlTypeLoader::Blob::fetchQmldir(const QUrl &url, const QV4::CompiledData::Import *import, int priority, QList<QQmlError> *errors) { - QQmlQmldirData *data = typeLoader()->getQmldir(url); + QQmlRefPointer<QQmlQmldirData> data = typeLoader()->getQmldir(url); data->setImport(this, import); data->setPriority(this, priority); if (data->status() == Error) { // This qmldir must not exist - which is not an error - data->release(); return true; } else if (data->status() == Complete) { // This data is already available @@ -1349,11 +1346,11 @@ bool QQmlTypeLoader::Blob::fetchQmldir(const QUrl &url, const QV4::CompiledData: } // Wait for this data to become available - addDependency(data); + addDependency(data.data()); return true; } -bool QQmlTypeLoader::Blob::updateQmldir(QQmlQmldirData *data, const QV4::CompiledData::Import *import, QList<QQmlError> *errors) +bool QQmlTypeLoader::Blob::updateQmldir(const QQmlRefPointer<QQmlQmldirData> &data, const QV4::CompiledData::Import *import, QList<QQmlError> *errors) { QString qmldirIdentifier = data->urlString(); QString qmldirUrl = qmldirIdentifier.left(qmldirIdentifier.lastIndexOf(QLatin1Char('/')) + 1); @@ -1500,14 +1497,6 @@ bool QQmlTypeLoader::Blob::addImport(const QV4::CompiledData::Import *import, QL return true; } -void QQmlTypeLoader::Blob::dependencyError(QQmlDataBlob *blob) -{ - if (blob->type() == QQmlDataBlob::QmldirFile) { - QQmlQmldirData *data = static_cast<QQmlQmldirData *>(blob); - data->release(); - } -} - void QQmlTypeLoader::Blob::dependencyComplete(QQmlDataBlob *blob) { if (blob->type() == QQmlDataBlob::QmldirFile) { @@ -1533,7 +1522,7 @@ bool QQmlTypeLoader::Blob::isDebugging() const return typeLoader()->engine()->handle()->debugger() != nullptr; } -bool QQmlTypeLoader::Blob::qmldirDataAvailable(QQmlQmldirData *data, QList<QQmlError> *errors) +bool QQmlTypeLoader::Blob::qmldirDataAvailable(const QQmlRefPointer<QQmlQmldirData> &data, QList<QQmlError> *errors) { bool resolve = true; @@ -1553,7 +1542,6 @@ bool QQmlTypeLoader::Blob::qmldirDataAvailable(QQmlQmldirData *data, QList<QQmlE if (resolve) { // This is the (current) best resolution for this import if (!updateQmldir(data, import, errors)) { - data->release(); return false; } @@ -1563,7 +1551,6 @@ bool QQmlTypeLoader::Blob::qmldirDataAvailable(QQmlQmldirData *data, QList<QQmlE } } - data->release(); return true; } @@ -1747,7 +1734,7 @@ QQmlRefPointer<QQmlScriptBlob> QQmlTypeLoader::getScript(const QUrl &url) /*! Returns a QQmlQmldirData for \a url. The QQmlQmldirData may be cached. */ -QQmlQmldirData *QQmlTypeLoader::getQmldir(const QUrl &url) +QQmlRefPointer<QQmlQmldirData> QQmlTypeLoader::getQmldir(const QUrl &url) { Q_ASSERT(!url.isRelative() && (QQmlFile::urlToLocalFileOrQrc(url).isEmpty() || @@ -1763,8 +1750,6 @@ QQmlQmldirData *QQmlTypeLoader::getQmldir(const QUrl &url) QQmlTypeLoader::load(qmldirData); } - qmldirData->addref(); - return qmldirData; } diff --git a/src/qml/qml/qqmltypeloader_p.h b/src/qml/qml/qqmltypeloader_p.h index 2418f3f716..66b1eaf18e 100644 --- a/src/qml/qml/qqmltypeloader_p.h +++ b/src/qml/qml/qqmltypeloader_p.h @@ -279,14 +279,13 @@ public: bool addImport(const QV4::CompiledData::Import *import, QList<QQmlError> *errors); bool fetchQmldir(const QUrl &url, const QV4::CompiledData::Import *import, int priority, QList<QQmlError> *errors); - bool updateQmldir(QQmlQmldirData *data, const QV4::CompiledData::Import *import, QList<QQmlError> *errors); + bool updateQmldir(const QQmlRefPointer<QQmlQmldirData> &data, const QV4::CompiledData::Import *import, QList<QQmlError> *errors); private: - virtual bool qmldirDataAvailable(QQmlQmldirData *, QList<QQmlError> *); + virtual bool qmldirDataAvailable(const QQmlRefPointer<QQmlQmldirData> &, QList<QQmlError> *); virtual void scriptImported(const QQmlRefPointer<QQmlScriptBlob> &, const QV4::CompiledData::Location &, const QString &, const QString &) {} - void dependencyError(QQmlDataBlob *) override; void dependencyComplete(QQmlDataBlob *) override; protected: @@ -296,7 +295,7 @@ public: QQmlImports m_importCache; QHash<const QV4::CompiledData::Import*, int> m_unresolvedImports; - QList<QQmlQmldirData *> m_qmldirs; + QVector<QQmlRefPointer<QQmlQmldirData>> m_qmldirs; QQmlMetaType::CachedUnitLookupError m_cachedUnitStatus = QQmlMetaType::CachedUnitLookupError::NoError; }; @@ -309,7 +308,7 @@ public: QQmlRefPointer<QQmlTypeData> getType(const QByteArray &, const QUrl &url, Mode mode = PreferSynchronous); QQmlRefPointer<QQmlScriptBlob> getScript(const QUrl &); - QQmlQmldirData *getQmldir(const QUrl &); + QQmlRefPointer<QQmlQmldirData> getQmldir(const QUrl &); QString absoluteFilePath(const QString &path); bool directoryExists(const QString &path); |