aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qmldirparser/qqmldirparser.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-06-17 15:42:05 +0200
committerUlf Hermann <ulf.hermann@qt.io>2020-06-24 18:26:14 +0200
commit36df81b3bc6d721d5598d5163b0a9659de4a69ee (patch)
treed9032e08f4d27daa9e4b16a2c2e622ed2fa6951b /src/qml/qmldirparser/qqmldirparser.cpp
parent6de0287d7c3aa4251fe6eb4f970d73ce11cf07fc (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.cpp24
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;
}