aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmlcompiler
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-10-06 11:35:30 +0200
committerUlf Hermann <ulf.hermann@qt.io>2020-10-07 13:26:09 +0200
commitfe013bdbaecd9605ebf715215cef3cd82c1a712f (patch)
tree1853e6ec6eb8dec4cc97d0f02c3ed63d3af00b09 /src/qmlcompiler
parent3633047d812559fc91d6f6324c4677bd886ef7fd (diff)
qmllint: Read deprecated dependency specifications from qmltypes files
And produce a warning when doing so. Task-number: QTBUG-87164 Change-Id: I75eab97a37af1268a310e88e3ac6a625127a7f62 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qmlcompiler')
-rw-r--r--src/qmlcompiler/qqmljsimporter.cpp47
-rw-r--r--src/qmlcompiler/qqmljsimporter_p.h3
2 files changed, 42 insertions, 8 deletions
diff --git a/src/qmlcompiler/qqmljsimporter.cpp b/src/qmlcompiler/qqmljsimporter.cpp
index a83f344523..94fcdc460c 100644
--- a/src/qmlcompiler/qqmljsimporter.cpp
+++ b/src/qmlcompiler/qqmljsimporter.cpp
@@ -56,7 +56,8 @@ static QQmlDirParser createQmldirParserForFile(const QString &filename)
}
void QQmlJSImporter::readQmltypes(
- const QString &filename, QHash<QString, QQmlJSScope::Ptr> *objects)
+ const QString &filename, QHash<QString, QQmlJSScope::Ptr> *objects,
+ QList<QQmlDirParser::Import> *dependencies)
{
const QFileInfo fileInfo(filename);
if (!fileInfo.exists()) {
@@ -72,10 +73,42 @@ void QQmlJSImporter::readQmltypes(
QFile file(filename);
file.open(QFile::ReadOnly);
QQmlJSTypeDescriptionReader reader { filename, QString::fromUtf8(file.readAll()) };
- QStringList dependencies;
- auto succ = reader(objects, &dependencies);
+ QStringList dependencyStrings;
+ auto succ = reader(objects, &dependencyStrings);
if (!succ)
m_warnings.append(reader.errorMessage());
+
+ if (dependencyStrings.isEmpty())
+ return;
+
+ m_warnings.append(QStringLiteral("Found deprecated dependency specifications in %1."
+ "Specify dependencies in qmldir and use qmltyperegistrar to "
+ "generate qmltypes files without dependencies.")
+ .arg(filename));
+
+ for (const QString &dependency : qAsConst(dependencyStrings)) {
+ const auto blank = dependency.indexOf(u' ');
+ if (blank < 0) {
+ dependencies->append(QQmlDirParser::Import(dependency, {}, false));
+ continue;
+ }
+
+ const QString module = dependency.left(blank);
+ const QString versionString = dependency.mid(blank + 1).trimmed();
+ if (versionString == QStringLiteral("auto")) {
+ dependencies->append(QQmlDirParser::Import(module, {}, true));
+ continue;
+ }
+
+ const auto dot = versionString.indexOf(u'.');
+
+ const QTypeRevision version = dot < 0
+ ? QTypeRevision::fromMajorVersion(versionString.toUShort())
+ : QTypeRevision::fromVersion(versionString.left(dot).toUShort(),
+ versionString.mid(dot + 1).toUShort());
+
+ dependencies->append(QQmlDirParser::Import(module, version, false));
+ }
}
QQmlJSImporter::Import QQmlJSImporter::readQmldir(const QString &path)
@@ -109,7 +142,7 @@ QQmlJSImporter::Import QQmlJSImporter::readQmldir(const QString &path)
for (const auto &typeInfo : typeInfos) {
const QString typeInfoPath = QFileInfo(typeInfo).isRelative()
? path + u'/' + typeInfo : typeInfo;
- readQmltypes(typeInfoPath, &result.objects);
+ readQmltypes(typeInfoPath, &result.objects, &result.dependencies);
}
if (typeInfos.isEmpty() && !reader.plugins().isEmpty()) {
@@ -117,7 +150,7 @@ QQmlJSImporter::Import QQmlJSImporter::readQmldir(const QString &path)
if (QFile::exists(defaultTypeInfoPath)) {
m_warnings.append(QStringLiteral("typeinfo not declared in qmldir file: ")
+ defaultTypeInfoPath);
- readQmltypes(defaultTypeInfoPath, &result.objects);
+ readQmltypes(defaultTypeInfoPath, &result.objects, &result.dependencies);
}
}
@@ -182,7 +215,7 @@ QQmlJSImporter::ImportedTypes QQmlJSImporter::importBuiltins()
QDirIterator it { dir, QStringList() << QLatin1String("builtins.qmltypes"), QDir::NoFilter,
QDirIterator::Subdirectories };
while (it.hasNext())
- readQmltypes(it.next(), &result.objects);
+ readQmltypes(it.next(), &result.objects, &result.dependencies);
importDependencies(result, &types);
processImport(result, &types);
}
@@ -199,7 +232,7 @@ QQmlJSImporter::ImportedTypes QQmlJSImporter::importQmltypes(const QStringList &
Import result;
for (const auto &qmltypeFile : qmltypesFiles)
- readQmltypes(qmltypeFile, &result.objects);
+ readQmltypes(qmltypeFile, &result.objects, &result.dependencies);
importDependencies(result, &types);
processImport(result, &types);
diff --git a/src/qmlcompiler/qqmljsimporter_p.h b/src/qmlcompiler/qqmljsimporter_p.h
index 245964a339..2f4d51a33c 100644
--- a/src/qmlcompiler/qqmljsimporter_p.h
+++ b/src/qmlcompiler/qqmljsimporter_p.h
@@ -94,7 +94,8 @@ private:
AvailableTypes *types,
const QString &prefix = QString(),
QTypeRevision version = QTypeRevision());
- void readQmltypes(const QString &filename, QHash<QString, QQmlJSScope::Ptr> *objects);
+ void readQmltypes(const QString &filename, QHash<QString, QQmlJSScope::Ptr> *objects,
+ QList<QQmlDirParser::Import> *dependencies);
Import readQmldir(const QString &dirname);
QQmlJSScope::Ptr localFile2ScopeTree(const QString &filePath);