diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-06-17 15:42:05 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-06-24 18:26:14 +0200 |
commit | 36df81b3bc6d721d5598d5163b0a9659de4a69ee (patch) | |
tree | d9032e08f4d27daa9e4b16a2c2e622ed2fa6951b /src/qml/qmldirparser/qqmldirparser.cpp | |
parent | 6de0287d7c3aa4251fe6eb4f970d73ce11cf07fc (diff) |
Discern between "auto" and versioned imports in qmldirs
You can now import the latest version, a specific version, or, "auto"
which is the same version as the parent module.
[ChangeLog][QtQml] You can now procedurally add module imports to
modules, using qmlRegisterModuleImport(). However, actual import
statements in qmldir files should be preferred wherever possible.
Fixes: QTBUG-84899
Change-Id: I3b32dd8b07a19d31b6538b9a6bb436840862f345
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/qmldirparser/qqmldirparser.cpp')
-rw-r--r-- | src/qml/qmldirparser/qqmldirparser.cpp | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/qml/qmldirparser/qqmldirparser.cpp b/src/qml/qmldirparser/qqmldirparser.cpp index e4d916a10f..c8589431b8 100644 --- a/src/qml/qmldirparser/qqmldirparser.cpp +++ b/src/qml/qmldirparser/qqmldirparser.cpp @@ -276,12 +276,28 @@ bool QQmlDirParser::parse(const QString &source) reportError(lineNumber, 0, QStringLiteral("invalid version %1, expected <major>.<minor>").arg(sections[2])); } } else if (sections[0] == QLatin1String("import")) { - if (sectionCount != 2) { + if (sectionCount == 2) { + _imports << Import(sections[1], QTypeRevision(), false); + } else if (sectionCount == 3) { + if (sections[2] == QLatin1String("auto")) { + _imports << Import(sections[1], QTypeRevision(), true); + } else { + const auto version = parseVersion(sections[2]); + if (version.isValid()) { + _imports << Import(sections[1], version, false); + } else { + reportError(lineNumber, 0, + QStringLiteral("invalid version %1, expected <major>.<minor>") + .arg(sections[2])); + continue; + } + } + } else { reportError(lineNumber, 0, - QStringLiteral("import requires 2 arguments, but %1 were provided").arg(sectionCount - 1)); + QStringLiteral("import requires 1 or 2 arguments, but %1 were provided") + .arg(sectionCount - 1)); continue; } - _imports << sections[1]; } else if (sectionCount == 2) { // No version specified (should only be used for relative qmldir files) const Component entry(sections[0], sections[1], QTypeRevision()); @@ -374,7 +390,7 @@ QHash<QString, QQmlDirParser::Component> QQmlDirParser::dependencies() const return _dependencies; } -QStringList QQmlDirParser::imports() const +QList<QQmlDirParser::Import> QQmlDirParser::imports() const { return _imports; } |