ImportKey::ImportKey(const ImportInfo &info)
    : type(info.type())
    , majorVersion(info.version().majorVersion())
    , minorVersion(info.version().minorVersion())
{
    splitPath = QFileInfo(info.path()).canonicalFilePath().split(QLatin1Char('/'),
                                                                 QString::KeepEmptyParts);
}
Esempio n. 2
0
bool Bind::visit(UiImport *ast)
{
    ComponentVersion version;
    if (ast->versionToken.isValid()) {
        const QString versionString = _doc->source().mid(ast->versionToken.offset, ast->versionToken.length);
        version = ComponentVersion(versionString);
        if (!version.isValid()) {
            _diagnosticMessages->append(
                        errorMessage(ast->versionToken, tr("expected two numbers separated by a dot")));
        }
    }

    if (ast->importUri) {
        if (!version.isValid()) {
            _diagnosticMessages->append(
                        errorMessage(ast, tr("package import requires a version number")));
        }
        const QString importId = ast->importId.toString();
        ImportInfo import = ImportInfo::moduleImport(toString(ast->importUri), version,
                                                     importId, ast);
        if (_doc->language() == Dialect::Qml) {
            const QString importStr = import.name() + importId;
            if (ModelManagerInterface::instance()) {
                QmlLanguageBundles langBundles = ModelManagerInterface::instance()->extendedBundles();
                QmlBundle qq1 = langBundles.bundleForLanguage(Dialect::QmlQtQuick1);
                QmlBundle qq2 = langBundles.bundleForLanguage(Dialect::QmlQtQuick2);
                bool isQQ1 = qq1.supportedImports().contains(importStr);
                bool isQQ2 = qq2.supportedImports().contains(importStr);
                if (isQQ1 && ! isQQ2)
                    _doc->setLanguage(Dialect::QmlQtQuick1);
                if (isQQ2 && ! isQQ1)
                    _doc->setLanguage(Dialect::QmlQtQuick2);
            }
        }
        _imports += import;
    } else if (!ast->fileName.isEmpty()) {
        _imports += ImportInfo::pathImport(_doc->path(), ast->fileName.toString(),
                                           version, ast->importId.toString(), ast);
    } else {
        _imports += ImportInfo::invalidImport(ast);
    }
    return false;
}
/*
    import "content"
    import "content" as Xxx
    import "content" 4.6
    import "content" 4.6 as Xxx

    import "http://www.ovi.com/" as Ovi

    import "file.js" as Foo
*/
Import LinkPrivate::importFileOrDirectory(Document::Ptr doc, const ImportInfo &importInfo)
{
    Import import;
    import.info = importInfo;
    import.object = 0;
    import.valid = true;

    QString path = importInfo.path();

    if (importInfo.type() == ImportType::Directory
            || importInfo.type() == ImportType::ImplicitDirectory) {
        import.object = new ObjectValue(valueOwner);

        importLibrary(doc, path, &import);

        const QList<Document::Ptr> &documentsInDirectory = snapshot.documentsInDirectory(path);
        foreach (Document::Ptr importedDoc, documentsInDirectory) {
            if (importedDoc->bind()->rootObjectValue()) {
                const QString targetName = importedDoc->componentName();
                import.object->setMember(targetName, importedDoc->bind()->rootObjectValue());
            }
        }
    } else if (importInfo.type() == ImportType::File) {