forked from qt-creator/qt-creator
Make QmlJS::Link private. Use Context::build to set up a context.
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
|
||||
#include "qmljsinterpreter.h"
|
||||
#include "qmljscheck.h"
|
||||
#include "qmljslink.h"
|
||||
#include "parser/qmljsast_p.h"
|
||||
#include <QtCore/QMetaObject>
|
||||
#include <QtCore/QMetaProperty>
|
||||
@@ -688,6 +689,12 @@ Context::~Context()
|
||||
{
|
||||
}
|
||||
|
||||
void Context::build(AST::Node *node, Document::Ptr doc, const Snapshot &snapshot)
|
||||
{
|
||||
Link link(this, doc, snapshot);
|
||||
link.scopeChainAt(doc, node);
|
||||
}
|
||||
|
||||
Engine *Context::engine() const
|
||||
{
|
||||
return _engine;
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#ifndef QMLJS_INTERPRETER_H
|
||||
#define QMLJS_INTERPRETER_H
|
||||
|
||||
#include <qmljs/qmljsdocument.h>
|
||||
#include <qmljs/qmljs_global.h>
|
||||
#include <qmljs/qmljsmetatypesystem.h>
|
||||
#include <qmljs/parser/qmljsastfwd_p.h>
|
||||
@@ -224,6 +225,8 @@ public:
|
||||
Context(Engine *engine);
|
||||
~Context();
|
||||
|
||||
void build(AST::Node *node, Document::Ptr doc, const Snapshot &snapshot);
|
||||
|
||||
Engine *engine() const;
|
||||
ScopeChain scopeChain() const;
|
||||
|
||||
|
||||
@@ -12,12 +12,11 @@ using namespace QmlJS;
|
||||
using namespace QmlJS::Interpreter;
|
||||
using namespace QmlJS::AST;
|
||||
|
||||
Link::Link(Document::Ptr currentDoc, const Snapshot &snapshot, Interpreter::Engine *interp)
|
||||
Link::Link(Context *context, Document::Ptr currentDoc, const Snapshot &snapshot)
|
||||
: _snapshot(snapshot)
|
||||
, _context(interp)
|
||||
, _context(context)
|
||||
{
|
||||
_docs = reachableDocuments(currentDoc, snapshot);
|
||||
|
||||
linkImports();
|
||||
}
|
||||
|
||||
@@ -25,25 +24,20 @@ Link::~Link()
|
||||
{
|
||||
}
|
||||
|
||||
Context *Link::context()
|
||||
{
|
||||
return &_context;
|
||||
}
|
||||
|
||||
Interpreter::Engine *Link::engine()
|
||||
{
|
||||
return _context.engine();
|
||||
return _context->engine();
|
||||
}
|
||||
|
||||
void Link::scopeChainAt(Document::Ptr doc, Node *currentObject)
|
||||
{
|
||||
_context.pushScope(engine()->globalObject());
|
||||
_context->pushScope(engine()->globalObject());
|
||||
|
||||
if (! doc)
|
||||
return;
|
||||
|
||||
if (doc->qmlProgram() != 0)
|
||||
_context.setLookupMode(Context::QmlLookup);
|
||||
_context->setLookupMode(Context::QmlLookup);
|
||||
|
||||
Bind *bind = doc->bind();
|
||||
|
||||
@@ -52,7 +46,7 @@ void Link::scopeChainAt(Document::Ptr doc, Node *currentObject)
|
||||
// ### FIXME: May want to link to instantiating components from here.
|
||||
|
||||
if (bind->_rootObjectValue)
|
||||
_context.pushScope(bind->_rootObjectValue);
|
||||
_context->pushScope(bind->_rootObjectValue);
|
||||
|
||||
ObjectValue *scopeObject = 0;
|
||||
if (UiObjectDefinition *definition = cast<UiObjectDefinition *>(currentObject))
|
||||
@@ -61,7 +55,7 @@ void Link::scopeChainAt(Document::Ptr doc, Node *currentObject)
|
||||
scopeObject = bind->_qmlObjects.value(binding);
|
||||
|
||||
if (scopeObject && scopeObject != bind->_rootObjectValue)
|
||||
_context.pushScope(scopeObject);
|
||||
_context->pushScope(scopeObject);
|
||||
|
||||
const QStringList &includedScripts = bind->includedScripts();
|
||||
for (int index = includedScripts.size() - 1; index != -1; --index) {
|
||||
@@ -69,19 +63,19 @@ void Link::scopeChainAt(Document::Ptr doc, Node *currentObject)
|
||||
|
||||
if (Document::Ptr scriptDoc = _snapshot.document(scriptFile)) {
|
||||
if (scriptDoc->jsProgram()) {
|
||||
_context.pushScope(scriptDoc->bind()->_rootObjectValue);
|
||||
_context->pushScope(scriptDoc->bind()->_rootObjectValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (bind->_functionEnvironment)
|
||||
_context.pushScope(bind->_functionEnvironment);
|
||||
_context->pushScope(bind->_functionEnvironment);
|
||||
|
||||
if (bind->_idEnvironment)
|
||||
_context.pushScope(bind->_idEnvironment);
|
||||
_context->pushScope(bind->_idEnvironment);
|
||||
|
||||
if (const ObjectValue *typeEnvironment = _context.typeEnvironment(doc.data()))
|
||||
_context.pushScope(typeEnvironment);
|
||||
if (const ObjectValue *typeEnvironment = _context->typeEnvironment(doc.data()))
|
||||
_context->pushScope(typeEnvironment);
|
||||
}
|
||||
|
||||
void Link::linkImports()
|
||||
@@ -92,7 +86,7 @@ void Link::linkImports()
|
||||
// Populate the _typeEnvironment with imports.
|
||||
populateImportedTypes(typeEnv, doc);
|
||||
|
||||
_context.setTypeEnvironment(doc.data(), typeEnv);
|
||||
_context->setTypeEnvironment(doc.data(), typeEnv);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,34 +2,32 @@
|
||||
#define QMLJSLINK_H
|
||||
|
||||
#include <qmljs/qmljsdocument.h>
|
||||
#include <qmljs/qmljsbind.h>
|
||||
#include <qmljs/qmljsinterpreter.h>
|
||||
#include <qmljs/parser/qmljsastfwd_p.h>
|
||||
#include <qmljs/parser/qmljsengine_p.h>
|
||||
|
||||
#include <QtCore/QList>
|
||||
#include <QtCore/QHash>
|
||||
|
||||
namespace QmlJS {
|
||||
|
||||
class NameId;
|
||||
|
||||
/*
|
||||
Temporarily links a set of bound documents together to allow resolving cross-document
|
||||
dependencies. The link is undone when this object is destoyed.
|
||||
Helper for building a context.
|
||||
*/
|
||||
class QMLJS_EXPORT Link
|
||||
class Link
|
||||
{
|
||||
public:
|
||||
// Link all documents in snapshot reachable from doc.
|
||||
Link(Document::Ptr doc, const Snapshot &snapshot, Interpreter::Engine *interp);
|
||||
Link(Interpreter::Context *context, Document::Ptr doc, const Snapshot &snapshot);
|
||||
~Link();
|
||||
|
||||
Interpreter::Context *context();
|
||||
Interpreter::Engine *engine();
|
||||
|
||||
// Get the scope chain for the currentObject inside doc.
|
||||
void scopeChainAt(Document::Ptr doc, AST::Node *currentObject);
|
||||
|
||||
private:
|
||||
Interpreter::Engine *engine();
|
||||
|
||||
static QList<Document::Ptr> reachableDocuments(Document::Ptr startDoc, const Snapshot &snapshot);
|
||||
static AST::UiQualifiedId *qualifiedTypeNameId(AST::Node *node);
|
||||
|
||||
@@ -44,7 +42,7 @@ private:
|
||||
|
||||
private:
|
||||
Snapshot _snapshot;
|
||||
Interpreter::Context _context;
|
||||
Interpreter::Context *_context;
|
||||
QList<Document::Ptr> _docs;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user