diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2011-09-27 15:12:22 +0200 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2011-09-28 08:52:56 +0200 |
commit | 82cbd0a9740010021853d1c954d788131861fb04 (patch) | |
tree | 939dffe4b442fbe54f072c74e38309893da0ee35 /src/libs/qmljs/qmljsdocument.cpp | |
parent | faa792f3cdf7141004ea83cfc1406fc678520b58 (diff) | |
download | qt-creator-82cbd0a9740010021853d1c954d788131861fb04.tar.gz |
QmlJS: Support .import directives in js files.
* Allow .import...
* Fix parsing of JS files when using Lexer::scanDirectives()
* Clean up ImportInfo construction.
* Rename ImportInfo::id to ImportInfo::as.
Change-Id: I888da248f06dc6184db99aa74c3b50d7f2f5e491
Reviewed-on: http://codereview.qt-project.org/5625
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
Diffstat (limited to 'src/libs/qmljs/qmljsdocument.cpp')
-rw-r--r-- | src/libs/qmljs/qmljsdocument.cpp | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp index 7455d421b7..843273ec91 100644 --- a/src/libs/qmljs/qmljsdocument.cpp +++ b/src/libs/qmljs/qmljsdocument.cpp @@ -211,6 +211,35 @@ QString Document::componentName() const return _componentName; } +namespace { +class CollectDirectives : public Directives +{ + QString documentPath; +public: + CollectDirectives(const QString &documentPath) + : documentPath(documentPath) + , isLibrary(false) + + {} + + virtual void pragmaLibrary() { isLibrary = true; } + virtual void importFile(const QString &jsfile, const QString &module) + { + imports += ImportInfo::pathImport( + documentPath, jsfile, LanguageUtils::ComponentVersion(), module); + } + + virtual void importModule(const QString &uri, const QString &version, const QString &module) + { + imports += ImportInfo::moduleImport(uri, LanguageUtils::ComponentVersion(version), module); + } + + bool isLibrary; + QList<ImportInfo> imports; +}; + +} // anonymous namespace + bool Document::parse_helper(int startToken) { Q_ASSERT(! _engine); @@ -225,11 +254,8 @@ bool Document::parse_helper(int startToken) QString source = _source; lexer.setCode(source, /*line = */ 1, /*qmlMode = */_language == QmlLanguage); - if (startToken == QmlJSGrammar::T_FEED_JS_PROGRAM) { - // ### use directives - Directives directives; - lexer.scanDirectives(&directives); - } + CollectDirectives collectDirectives(path()); + _engine->setDirectives(&collectDirectives); switch (startToken) { case QmlJSGrammar::T_FEED_UI_PROGRAM: @@ -248,7 +274,7 @@ bool Document::parse_helper(int startToken) _ast = parser.rootNode(); _diagnosticMessages = parser.diagnosticMessages(); - _bind = new Bind(this, &_diagnosticMessages); + _bind = new Bind(this, &_diagnosticMessages, collectDirectives.isLibrary, collectDirectives.imports); return _parsedCorrectly; } |