diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2019-11-22 13:35:36 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2019-11-23 17:20:00 +0100 |
commit | 16683799681578d076c46b71f77d326ac304cc6e (patch) | |
tree | fc1264c6e6bbed9d671222628360629752f63ca3 | |
parent | b7030c2efb90fd1109166d8d476aeab7194c41e1 (diff) |
QQmlDirParser: Fix lifecycle management
Remove pointless ctor and dtor, provide a clear() method that actually
clears everything, call that explicitly where needed.
Task-number: QTBUG-30467
Change-Id: I67c632af3a7a76d1d1a706a5ab6d1c446240405c
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r-- | src/qml/qml/qqmltypeloaderqmldircontent.cpp | 1 | ||||
-rw-r--r-- | src/qml/qmldirparser/qqmldirparser.cpp | 23 | ||||
-rw-r--r-- | src/qml/qmldirparser/qqmldirparser_p.h | 6 | ||||
-rw-r--r-- | tests/auto/qml/qqmldirparser/tst_qqmldirparser.cpp | 3 |
4 files changed, 17 insertions, 16 deletions
diff --git a/src/qml/qml/qqmltypeloaderqmldircontent.cpp b/src/qml/qml/qqmltypeloaderqmldircontent.cpp index 8e983db756..c4e6d86f0d 100644 --- a/src/qml/qml/qqmltypeloaderqmldircontent.cpp +++ b/src/qml/qml/qqmltypeloaderqmldircontent.cpp @@ -76,6 +76,7 @@ void QQmlTypeLoaderQmldirContent::setContent(const QString &location, const QStr { m_hasContent = true; m_location = location; + m_parser.clear(); m_parser.parse(content); } diff --git a/src/qml/qmldirparser/qqmldirparser.cpp b/src/qml/qmldirparser/qqmldirparser.cpp index 5bf33d3602..047323a3d4 100644 --- a/src/qml/qmldirparser/qqmldirparser.cpp +++ b/src/qml/qmldirparser/qqmldirparser.cpp @@ -73,12 +73,18 @@ static bool parseVersion(const QString &str, int *major, int *minor) return false; } -QQmlDirParser::QQmlDirParser() : _designerSupported(false) -{ -} - -QQmlDirParser::~QQmlDirParser() +void QQmlDirParser::clear() { + _errors.clear(); + _typeNamespace.clear(); + _components.clear(); + _dependencies.clear(); + _imports.clear(); + _scripts.clear(); + _plugins.clear(); + _designerSupported = false; + _typeInfos.clear(); + _className.clear(); } inline static void scanSpace(const QChar *&ch) { @@ -101,13 +107,6 @@ inline static void scanWord(const QChar *&ch) { */ bool QQmlDirParser::parse(const QString &source) { - _errors.clear(); - _plugins.clear(); - _components.clear(); - _scripts.clear(); - _designerSupported = false; - _className.clear(); - quint16 lineNumber = 0; bool firstLine = true; diff --git a/src/qml/qmldirparser/qqmldirparser_p.h b/src/qml/qmldirparser/qqmldirparser_p.h index 8159349173..9fdeadfb0e 100644 --- a/src/qml/qmldirparser/qqmldirparser_p.h +++ b/src/qml/qmldirparser/qqmldirparser_p.h @@ -64,9 +64,7 @@ class QQmlEngine; class Q_QMLCOMPILER_PRIVATE_EXPORT QQmlDirParser { public: - QQmlDirParser(); - ~QQmlDirParser(); - + void clear(); bool parse(const QString &source); bool hasError() const; @@ -166,7 +164,7 @@ private: QStringList _imports; QList<Script> _scripts; QList<Plugin> _plugins; - bool _designerSupported; + bool _designerSupported = false; QList<TypeInfo> _typeInfos; QString _className; }; diff --git a/tests/auto/qml/qqmldirparser/tst_qqmldirparser.cpp b/tests/auto/qml/qqmldirparser/tst_qqmldirparser.cpp index 1e690e38dd..bc4ba9437c 100644 --- a/tests/auto/qml/qqmldirparser/tst_qqmldirparser.cpp +++ b/tests/auto/qml/qqmldirparser/tst_qqmldirparser.cpp @@ -375,6 +375,9 @@ void tst_qqmldirparser::parse() QCOMPARE(toStringList(p.dependencies()), dependencies); QCOMPARE(p.designerSupported(), designerSupported); + + p.clear(); + QVERIFY(p.typeNamespace().isEmpty()); } QTEST_MAIN(tst_qqmldirparser) |