#ifndef QMLJSLINK_H #define QMLJSLINK_H #include #include #include #include #include #include namespace QmlJS { class NameId; /* Helper for building a context. */ class Link { public: // Link all documents in snapshot Link(Interpreter::Context *context, const Snapshot &snapshot, const QStringList &importPaths); ~Link(); // Get the scope chain for the currentObject inside doc. void scopeChainAt(Document::Ptr doc, const QList &astPath = QList()); private: Interpreter::Engine *engine(); void makeComponentChain( Document::Ptr doc, Interpreter::ScopeChain::QmlComponentChain *target, QHash *components); static QList reachableDocuments(Document::Ptr startDoc, const Snapshot &snapshot, const QStringList &importPaths); static AST::UiQualifiedId *qualifiedTypeNameId(AST::Node *node); void linkImports(); void populateImportedTypes(Interpreter::ObjectValue *typeEnv, Document::Ptr doc); void importFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc, AST::UiImport *import); void importNonFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc, AST::UiImport *import); void importObject(Bind *bind, const QString &name, Interpreter::ObjectValue *object, NameId *targetNamespace); private: Snapshot _snapshot; Interpreter::Context *_context; QMultiHash _documentByPath; const QStringList _importPaths; }; } // namespace QmlJS #endif // QMLJSLINK_H