diff --git a/src/qml/qml/qqmltypedata.cpp b/src/qml/qml/qqmltypedata.cpp index 0ed0253a3e..7362107315 100644 --- a/src/qml/qml/qqmltypedata.cpp +++ b/src/qml/qml/qqmltypedata.cpp @@ -1053,12 +1053,14 @@ bool QQmlTypeData::resolveType(const QString &typeName, QTypeRevision &version, return true; } -void QQmlTypeData::scriptImported(const QQmlRefPointer &blob, const QV4::CompiledData::Location &location, const QString &qualifier, const QString &/*nameSpace*/) +void QQmlTypeData::scriptImported( + const QQmlRefPointer &blob, const QV4::CompiledData::Location &location, + const QString &nameSpace, const QString &qualifier) { ScriptReference ref; ref.script = blob; ref.location = location; - ref.qualifier = qualifier; + ref.qualifier = qualifier.isEmpty() ? nameSpace : qualifier + QLatin1Char('.') + nameSpace; m_scripts << ref; } diff --git a/src/qml/qml/qqmltypedata_p.h b/src/qml/qml/qqmltypedata_p.h index 4803497945..55704985e6 100644 --- a/src/qml/qml/qqmltypedata_p.h +++ b/src/qml/qml/qqmltypedata_p.h @@ -103,7 +103,9 @@ private: QQmlType::RegistrationType registrationType = QQmlType::AnyRegistrationType, bool *typeRecursionDetected = nullptr); - void scriptImported(const QQmlRefPointer &blob, const QV4::CompiledData::Location &location, const QString &qualifier, const QString &nameSpace) override; + void scriptImported( + const QQmlRefPointer &blob, const QV4::CompiledData::Location &location, + const QString &nameSpace, const QString &qualifier) override; SourceCodeData m_backupSourceCode; // used when cache verification fails. QScopedPointer m_document; diff --git a/tests/auto/qml/qqmlimport/data/MyModuleName/Font.js b/tests/auto/qml/qqmlimport/data/MyModuleName/Font.js new file mode 100644 index 0000000000..7036c0a739 --- /dev/null +++ b/tests/auto/qml/qqmlimport/data/MyModuleName/Font.js @@ -0,0 +1,4 @@ +.pragma library +.import QtQuick as QtQuick + +var exampleVar = 12; diff --git a/tests/auto/qml/qqmlimport/data/MyModuleName/qmldir b/tests/auto/qml/qqmlimport/data/MyModuleName/qmldir new file mode 100644 index 0000000000..43add34163 --- /dev/null +++ b/tests/auto/qml/qqmlimport/data/MyModuleName/qmldir @@ -0,0 +1,2 @@ +module MyModuleName +Font 0.1 Font.js diff --git a/tests/auto/qml/qqmlimport/data/qualifiedScriptImport.qml b/tests/auto/qml/qqmlimport/data/qualifiedScriptImport.qml new file mode 100644 index 0000000000..de4b02afbb --- /dev/null +++ b/tests/auto/qml/qqmlimport/data/qualifiedScriptImport.qml @@ -0,0 +1,8 @@ +import QtQuick +import 'MyModuleName' as MyModuleName + +Item { + property var a: MyModuleName.Font.exampleVar + property var b: Font.SmallCaps + property var c: Font.exampleVar +} diff --git a/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp b/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp index 38970a3b99..f1c6b4226a 100644 --- a/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp +++ b/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp @@ -38,6 +38,7 @@ private slots: void invalidFileImport_data(); void invalidFileImport(); void implicitWithDependencies(); + void qualifiedScriptImport(); }; void tst_QQmlImport::cleanup() @@ -123,6 +124,19 @@ void tst_QQmlImport::implicitWithDependencies() QCOMPARE(o->objectName(), QStringLiteral("notARectangle")); } +void tst_QQmlImport::qualifiedScriptImport() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("qualifiedScriptImport.qml")); + QVERIFY2(component.isReady(), qPrintable(component.errorString())); + QScopedPointer o(component.create()); + QVERIFY(!o.isNull()); + + QCOMPARE(o->property("a"), QVariant::fromValue(12)); + QCOMPARE(o->property("b"), QVariant::fromValue(3)); + QCOMPARE(o->property("c"), QVariant()); +} + void tst_QQmlImport::testDesignerSupported() { QQuickView *window = new QQuickView();