forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -123,7 +123,8 @@ Link::Link(const Snapshot &snapshot, const ViewerContext &vContext, const Librar
|
|||||||
{
|
{
|
||||||
d->m_valueOwner = new ValueOwner;
|
d->m_valueOwner = new ValueOwner;
|
||||||
d->m_snapshot = snapshot;
|
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_applicationDirectories = vContext.applicationDirectories;
|
||||||
d->m_builtins = builtins;
|
d->m_builtins = builtins;
|
||||||
d->m_vContext = vContext;
|
d->m_vContext = vContext;
|
||||||
|
|||||||
@@ -63,8 +63,8 @@ static const char *qtQuickUISuffix = "ui.qml";
|
|||||||
|
|
||||||
static void maybeAddPath(ViewerContext &context, const Utils::FilePath &path)
|
static void maybeAddPath(ViewerContext &context, const Utils::FilePath &path)
|
||||||
{
|
{
|
||||||
if (!path.isEmpty() && !context.paths.contains(path))
|
if (!path.isEmpty() && !context.paths.count(path) > 0)
|
||||||
context.paths.append(path);
|
context.paths.insert(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
static QList<Utils::FilePath> environmentImportPaths()
|
static QList<Utils::FilePath> environmentImportPaths()
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
|
#include <set>
|
||||||
|
|
||||||
namespace QmlJS {
|
namespace QmlJS {
|
||||||
|
|
||||||
struct QMLJS_EXPORT ViewerContext
|
struct QMLJS_EXPORT ViewerContext
|
||||||
@@ -21,7 +23,7 @@ struct QMLJS_EXPORT ViewerContext
|
|||||||
};
|
};
|
||||||
|
|
||||||
QStringList selectors;
|
QStringList selectors;
|
||||||
QList<Utils::FilePath> paths;
|
std::set<Utils::FilePath> paths;
|
||||||
QList<Utils::FilePath> applicationDirectories;
|
QList<Utils::FilePath> applicationDirectories;
|
||||||
Dialect language = Dialect::Qml;
|
Dialect language = Dialect::Qml;
|
||||||
Flags flags = AddAllPaths;
|
Flags flags = AddAllPaths;
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ static QString qualifiedTypeNameForContext(const ObjectValue *objectValue,
|
|||||||
if (!cImport.valid())
|
if (!cImport.valid())
|
||||||
break;
|
break;
|
||||||
for (const Export &e : std::as_const(cImport.possibleExports)) {
|
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) {
|
switch (e.exportName.type) {
|
||||||
case ImportType::Library:
|
case ImportType::Library:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1005,8 +1005,10 @@ QString RewriterView::pathForImport(const Import &import)
|
|||||||
|
|
||||||
QStringList RewriterView::importDirectories() const
|
QStringList RewriterView::importDirectories() const
|
||||||
{
|
{
|
||||||
return Utils::transform(m_textToModelMerger->vContext().paths,
|
const QList<Utils::FilePath> list(m_textToModelMerger->vContext().paths.begin(),
|
||||||
[](const Utils::FilePath &p) { return p.toString(); });
|
m_textToModelMerger->vContext().paths.end());
|
||||||
|
|
||||||
|
return Utils::transform(list, [](const Utils::FilePath &p) { return p.toString(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
QSet<QPair<QString, QString> > RewriterView::qrcMapping() const
|
QSet<QPair<QString, QString> > RewriterView::qrcMapping() const
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ void ModelManager::delayedInitialization()
|
|||||||
|
|
||||||
ViewerContext qbsVContext;
|
ViewerContext qbsVContext;
|
||||||
qbsVContext.language = Dialect::QmlQbs;
|
qbsVContext.language = Dialect::QmlQbs;
|
||||||
qbsVContext.paths.append(ICore::resourcePath("qbs"));
|
qbsVContext.paths.insert(ICore::resourcePath("qbs"));
|
||||||
setDefaultVContext(qbsVContext);
|
setDefaultVContext(qbsVContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ void scanDirectory(const QString &dir)
|
|||||||
ModelManagerInterface::instance(), false);
|
ModelManagerInterface::instance(), false);
|
||||||
ModelManagerInterface::instance()->test_joinAllThreads();
|
ModelManagerInterface::instance()->test_joinAllThreads();
|
||||||
ViewerContext vCtx;
|
ViewerContext vCtx;
|
||||||
vCtx.paths.append(dirPath);
|
vCtx.paths.insert(dirPath);
|
||||||
Snapshot snap = ModelManagerInterface::instance()->snapshot();
|
Snapshot snap = ModelManagerInterface::instance()->snapshot();
|
||||||
|
|
||||||
ImportDependencies *iDeps = snap.importDependencies();
|
ImportDependencies *iDeps = snap.importDependencies();
|
||||||
@@ -176,7 +176,10 @@ void tst_ImportCheck::test()
|
|||||||
ModelManagerInterface::instance(), false);
|
ModelManagerInterface::instance(), false);
|
||||||
ModelManagerInterface::instance()->test_joinAllThreads();
|
ModelManagerInterface::instance()->test_joinAllThreads();
|
||||||
ViewerContext vCtx;
|
ViewerContext vCtx;
|
||||||
vCtx.paths.append(pathPaths);
|
|
||||||
|
for (const Utils::FilePath &path : pathPaths)
|
||||||
|
vCtx.paths.insert(path);
|
||||||
|
|
||||||
Snapshot snap = ModelManagerInterface::instance()->snapshot();
|
Snapshot snap = ModelManagerInterface::instance()->snapshot();
|
||||||
|
|
||||||
ImportDependencies *iDeps = snap.importDependencies();
|
ImportDependencies *iDeps = snap.importDependencies();
|
||||||
|
|||||||
Reference in New Issue
Block a user