diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp index 9c0890e6c98c95ec9453307c29a8d65ad704bf6f..6ccbf532d054524e52bfb938fb7aef12b270d915 100644 --- a/src/libs/qmljs/qmljsdocument.cpp +++ b/src/libs/qmljs/qmljsdocument.cpp @@ -250,8 +250,10 @@ Snapshot::~Snapshot() void Snapshot::insert(const Document::Ptr &document) { - if (document && (document->qmlProgram() || document->jsProgram())) + if (document && (document->qmlProgram() || document->jsProgram())) { _documents.insert(document->fileName(), document); + _documentsByPath.insert(document->path(), document); + } } void Snapshot::insertLibraryInfo(const QString &path, const LibraryInfo &info) diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h index e3cfa420d840153d87d4dd6f49f54feacb24e16c..2a1469c1dadf1c6433cdc8797c304c55c24dbd91 100644 --- a/src/libs/qmljs/qmljsdocument.h +++ b/src/libs/qmljs/qmljsdocument.h @@ -131,9 +131,10 @@ public: class QMLJS_EXPORT Snapshot { - typedef QMap<QString, Document::Ptr> _Base; - QMap<QString, Document::Ptr> _documents; - QMap<QString, LibraryInfo> _libraries; + typedef QHash<QString, Document::Ptr> _Base; + QHash<QString, Document::Ptr> _documents; + QMultiHash<QString, Document::Ptr> _documentsByPath; + QHash<QString, LibraryInfo> _libraries; public: Snapshot(); @@ -151,6 +152,9 @@ public: Document::Ptr document(const QString &fileName) const { return _documents.value(fileName); } + QList<Document::Ptr> documentsInDirectory(const QString &path) const + { return _documentsByPath.values(path); } + LibraryInfo libraryInfo(const QString &path) const { return _libraries.value(path); } diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp index 57f3dd990768d5474cee21e745b6814d16580524..af248d9c4de646d08bc0e4b95d05af2088bb210a 100644 --- a/src/libs/qmljs/qmljslink.cpp +++ b/src/libs/qmljs/qmljslink.cpp @@ -21,8 +21,6 @@ Link::Link(Context *context, const Document::Ptr &doc, const Snapshot &snapshot, , _context(context) , _importPaths(importPaths) { - foreach (Document::Ptr doc, snapshot) - _documentByPath.insert(doc->path(), doc); linkImports(); } @@ -161,7 +159,7 @@ void Link::populateImportedTypes(Interpreter::ObjectValue *typeEnv, Document::Pt // implicit imports: // qml files in the same directory are available without explicit imports - foreach (Document::Ptr otherDoc, _documentByPath.values(doc->path())) { + foreach (Document::Ptr otherDoc, _snapshot.documentsInDirectory(doc->path())) { if (otherDoc == doc) continue; @@ -206,13 +204,14 @@ void Link::importFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc, ObjectValue *importNamespace = typeEnv; // directory import - if (_documentByPath.contains(path)) { + QList<Document::Ptr> documentsInDirectory = _snapshot.documentsInDirectory(path); + if (! documentsInDirectory.isEmpty()) { if (import->importId) { importNamespace = engine()->newObject(/*prototype =*/0); typeEnv->setProperty(import->importId->asString(), importNamespace); } - foreach (Document::Ptr importedDoc, _documentByPath.values(path)) { + foreach (Document::Ptr importedDoc, documentsInDirectory) { const QString targetName = importedDoc->componentName(); importNamespace->setProperty(targetName, importedDoc->bind()->rootObjectValue()); } diff --git a/src/libs/qmljs/qmljslink.h b/src/libs/qmljs/qmljslink.h index 1f531379ee8d79d3302a9268535986d6905cdc87..9772f1dc570a0125d79448083cfed0a78c58a362 100644 --- a/src/libs/qmljs/qmljslink.h +++ b/src/libs/qmljs/qmljslink.h @@ -56,7 +56,6 @@ private: Document::Ptr _doc; Snapshot _snapshot; Interpreter::Context *_context; - QMultiHash<QString, Document::Ptr> _documentByPath; const QStringList _importPaths; QList<DiagnosticMessage> _diagnosticMessages;