aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2019-11-22 13:35:36 +0100
committerUlf Hermann <ulf.hermann@qt.io>2019-11-23 17:20:00 +0100
commit16683799681578d076c46b71f77d326ac304cc6e (patch)
treefc1264c6e6bbed9d671222628360629752f63ca3
parentb7030c2efb90fd1109166d8d476aeab7194c41e1 (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.cpp1
-rw-r--r--src/qml/qmldirparser/qqmldirparser.cpp23
-rw-r--r--src/qml/qmldirparser/qqmldirparser_p.h6
-rw-r--r--tests/auto/qml/qqmldirparser/tst_qqmldirparser.cpp3
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)