summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2022-11-23 09:32:45 +0100
committerThomas Hartmann <thomas.hartmann@qt.io>2022-11-23 16:28:26 +0000
commitd0a07dcacb70eaa58b36cd9fc3b37f8c8ce8106c (patch)
treeb0c4380483b5f153c811bb72b327289d546c5179
parent910a8864dc43f8dede7617855282f19de62ee939 (diff)
downloadqt-creator-d0a07dcacb70eaa58b36cd9fc3b37f8c8ce8106c.tar.gz
QmlJS: std::set instead of QList
This reduces the CPU time of Export::visibleInVContext() from 50% to 15% on Windows, when switching files. Change-Id: Iff82924c47d1b696c9d3d7ca40f49d9d02bcb3e6 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r--src/libs/qmljs/qmljslink.cpp3
-rw-r--r--src/libs/qmljs/qmljsmodelmanagerinterface.cpp4
-rw-r--r--src/libs/qmljs/qmljsviewercontext.h4
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriterview.cpp6
-rw-r--r--src/plugins/qmljstools/qmljsmodelmanager.cpp2
-rw-r--r--tests/auto/qml/codemodel/importscheck/tst_importscheck.cpp7
7 files changed, 18 insertions, 10 deletions
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index 6c04966ced..2ce98efad3 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -123,7 +123,8 @@ Link::Link(const Snapshot &snapshot, const ViewerContext &vContext, const Librar
{
d->m_valueOwner = new ValueOwner;
d->m_snapshot = snapshot;
- d->m_importPaths = vContext.paths;
+ const QList<Utils::FilePath> list(vContext.paths.begin(), vContext.paths.end());
+ d->m_importPaths = list;
d->m_applicationDirectories = vContext.applicationDirectories;
d->m_builtins = builtins;
d->m_vContext = vContext;
diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp
index 70eebf6faf..6d3fda5af3 100644
--- a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp
+++ b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp
@@ -63,8 +63,8 @@ static const char *qtQuickUISuffix = "ui.qml";
static void maybeAddPath(ViewerContext &context, const Utils::FilePath &path)
{
- if (!path.isEmpty() && !context.paths.contains(path))
- context.paths.append(path);
+ if (!path.isEmpty() && !context.paths.count(path) > 0)
+ context.paths.insert(path);
}
static QList<Utils::FilePath> environmentImportPaths()
diff --git a/src/libs/qmljs/qmljsviewercontext.h b/src/libs/qmljs/qmljsviewercontext.h
index 7d22136844..043f56b108 100644
--- a/src/libs/qmljs/qmljsviewercontext.h
+++ b/src/libs/qmljs/qmljsviewercontext.h
@@ -8,6 +8,8 @@
#include <QStringList>
+#include <set>
+
namespace QmlJS {
struct QMLJS_EXPORT ViewerContext
@@ -21,7 +23,7 @@ struct QMLJS_EXPORT ViewerContext
};
QStringList selectors;
- QList<Utils::FilePath> paths;
+ std::set<Utils::FilePath> paths;
QList<Utils::FilePath> applicationDirectories;
Dialect language = Dialect::Qml;
Flags flags = AddAllPaths;
diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
index 927b762ffe..cdda880f84 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
@@ -149,7 +149,7 @@ static QString qualifiedTypeNameForContext(const ObjectValue *objectValue,
if (!cImport.valid())
break;
for (const Export &e : std::as_const(cImport.possibleExports)) {
- if (e.pathRequired.isEmpty() || vContext.paths.contains(e.pathRequired)) {
+ if (e.pathRequired.isEmpty() || vContext.paths.count(e.pathRequired) > 0) {
switch (e.exportName.type) {
case ImportType::Library:
{
diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
index 1a09a070fd..89ad9c0ab9 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
@@ -1005,8 +1005,10 @@ QString RewriterView::pathForImport(const Import &import)
QStringList RewriterView::importDirectories() const
{
- return Utils::transform(m_textToModelMerger->vContext().paths,
- [](const Utils::FilePath &p) { return p.toString(); });
+ const QList<Utils::FilePath> list(m_textToModelMerger->vContext().paths.begin(),
+ m_textToModelMerger->vContext().paths.end());
+
+ return Utils::transform(list, [](const Utils::FilePath &p) { return p.toString(); });
}
QSet<QPair<QString, QString> > RewriterView::qrcMapping() const
diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp
index 66b92ebabe..149897b752 100644
--- a/src/plugins/qmljstools/qmljsmodelmanager.cpp
+++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp
@@ -281,7 +281,7 @@ void ModelManager::delayedInitialization()
ViewerContext qbsVContext;
qbsVContext.language = Dialect::QmlQbs;
- qbsVContext.paths.append(ICore::resourcePath("qbs"));
+ qbsVContext.paths.insert(ICore::resourcePath("qbs"));
setDefaultVContext(qbsVContext);
}
diff --git a/tests/auto/qml/codemodel/importscheck/tst_importscheck.cpp b/tests/auto/qml/codemodel/importscheck/tst_importscheck.cpp
index 45d5f51577..8f300db02f 100644
--- a/tests/auto/qml/codemodel/importscheck/tst_importscheck.cpp
+++ b/tests/auto/qml/codemodel/importscheck/tst_importscheck.cpp
@@ -58,7 +58,7 @@ void scanDirectory(const QString &dir)
ModelManagerInterface::instance(), false);
ModelManagerInterface::instance()->test_joinAllThreads();
ViewerContext vCtx;
- vCtx.paths.append(dirPath);
+ vCtx.paths.insert(dirPath);
Snapshot snap = ModelManagerInterface::instance()->snapshot();
ImportDependencies *iDeps = snap.importDependencies();
@@ -176,7 +176,10 @@ void tst_ImportCheck::test()
ModelManagerInterface::instance(), false);
ModelManagerInterface::instance()->test_joinAllThreads();
ViewerContext vCtx;
- vCtx.paths.append(pathPaths);
+
+ for (const Utils::FilePath &path : pathPaths)
+ vCtx.paths.insert(path);
+
Snapshot snap = ModelManagerInterface::instance()->snapshot();
ImportDependencies *iDeps = snap.importDependencies();