forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -233,15 +233,13 @@ Context::ImportsPerDocument LinkPrivate::linkImports()
|
||||
|
||||
void LinkPrivate::populateImportedTypes(Imports *imports, Document::Ptr doc)
|
||||
{
|
||||
if (! doc->qmlProgram())
|
||||
return;
|
||||
|
||||
// implicit imports: the <default> package is always available
|
||||
loadImplicitDefaultImports(imports);
|
||||
|
||||
// implicit imports:
|
||||
// qml files in the same directory are available without explicit imports
|
||||
loadImplicitDirectoryImports(imports, doc);
|
||||
if (doc->isQmlDocument())
|
||||
loadImplicitDirectoryImports(imports, doc);
|
||||
|
||||
// explicit imports, whether directories, files or libraries
|
||||
foreach (const ImportInfo &info, doc->bind()->imports()) {
|
||||
@@ -261,8 +259,10 @@ void LinkPrivate::populateImportedTypes(Imports *imports, Document::Ptr doc)
|
||||
import = importNonFile(doc, info);
|
||||
break;
|
||||
case ImportInfo::UnknownFileImport:
|
||||
error(doc, info.ast()->fileNameToken,
|
||||
Link::tr("file or directory not found"));
|
||||
if (info.ast()) {
|
||||
error(doc, info.ast()->fileNameToken,
|
||||
Link::tr("file or directory not found"));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -400,9 +400,8 @@ bool LinkPrivate::importLibrary(Document::Ptr doc,
|
||||
import->libraryPath = libraryPath;
|
||||
|
||||
const ComponentVersion version = importInfo.version();
|
||||
const UiImport *ast = importInfo.ast();
|
||||
SourceLocation errorLoc;
|
||||
if (ast)
|
||||
if (const UiImport *ast = importInfo.ast())
|
||||
errorLoc = locationFromRange(ast->firstSourceLocation(), ast->lastSourceLocation());
|
||||
|
||||
if (!libraryInfo.plugins().isEmpty()) {
|
||||
@@ -505,8 +504,7 @@ void LinkPrivate::loadQmldirComponents(ObjectValue *import, ComponentVersion ver
|
||||
|
||||
void LinkPrivate::loadImplicitDirectoryImports(Imports *imports, Document::Ptr doc)
|
||||
{
|
||||
ImportInfo implcitDirectoryImportInfo(
|
||||
ImportInfo::ImplicitDirectoryImport, doc->path());
|
||||
ImportInfo implcitDirectoryImportInfo = ImportInfo::implicitDirectoryImport(doc->path());
|
||||
|
||||
Import directoryImport = importCache.value(ImportCacheKey(implcitDirectoryImportInfo));
|
||||
if (!directoryImport.object) {
|
||||
@@ -523,15 +521,15 @@ void LinkPrivate::loadImplicitDefaultImports(Imports *imports)
|
||||
{
|
||||
const QString defaultPackage = CppQmlTypes::defaultPackage;
|
||||
if (valueOwner->cppQmlTypes().hasModule(defaultPackage)) {
|
||||
ImportInfo info(ImportInfo::LibraryImport, defaultPackage);
|
||||
const ComponentVersion maxVersion(ComponentVersion::MaxVersion, ComponentVersion::MaxVersion);
|
||||
const ImportInfo info = ImportInfo::moduleImport(defaultPackage, maxVersion, QString());
|
||||
Import import = importCache.value(ImportCacheKey(info));
|
||||
if (!import.object) {
|
||||
import.info = info;
|
||||
import.object = new ObjectValue(valueOwner);
|
||||
foreach (const QmlObjectValue *object,
|
||||
valueOwner->cppQmlTypes().createObjectsForImport(
|
||||
defaultPackage,
|
||||
ComponentVersion(ComponentVersion::MaxVersion, ComponentVersion::MaxVersion))) {
|
||||
defaultPackage, maxVersion)) {
|
||||
import.object->setMember(object->className(), object);
|
||||
}
|
||||
importCache.insert(ImportCacheKey(info), import);
|
||||
|
||||
Reference in New Issue
Block a user