aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qmllint
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-01-22 13:12:56 +0100
committerUlf Hermann <ulf.hermann@qt.io>2020-02-03 15:22:12 +0100
commit789929f939a60462373beae37ab4373809095cff (patch)
treed3ee9dadb901213940ba61748f303fd34ccab424 /tools/qmllint
parent8ba73c0134f162afd9aa83b731a8147728642385 (diff)
Use QTypeRevision for all versions and revisions
In many places we carry major and minor versions or revisions that are loosely coupled to minor versions. As the Qt minor version resets now, we need to handle these things more systematically. In particular, we need to add a "major" part to revisions. QTypeRevision can express the current major/minor pairs more efficiently and can also be used to add a major version to revisions. This change does not change the semantics, yet, but only replaces the types. Change-Id: Ie58ba8114d7e4c6427f0f28716deee71995c0d24 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tools/qmllint')
-rw-r--r--tools/qmllint/componentversion.cpp18
-rw-r--r--tools/qmllint/componentversion.h14
-rw-r--r--tools/qmllint/findunqualified.cpp44
-rw-r--r--tools/qmllint/findunqualified.h2
-rw-r--r--tools/qmllint/typedescriptionreader.cpp2
5 files changed, 38 insertions, 42 deletions
diff --git a/tools/qmllint/componentversion.cpp b/tools/qmllint/componentversion.cpp
index e5047b8302..95403ec15f 100644
--- a/tools/qmllint/componentversion.cpp
+++ b/tools/qmllint/componentversion.cpp
@@ -41,21 +41,21 @@ ComponentVersion::ComponentVersion(const QString &versionString)
const int maybeMinor = versionString.midRef(dotIdx + 1).toInt(&ok);
if (!ok)
return;
- m_major = maybeMajor;
- m_minor = maybeMinor;
+ m_version = QTypeRevision::fromVersion(maybeMajor, maybeMinor);
}
bool operator<(const ComponentVersion &lhs, const ComponentVersion &rhs)
{
- return lhs.majorVersion() < rhs.majorVersion()
- || (lhs.majorVersion() == rhs.majorVersion() && lhs.minorVersion() < rhs.minorVersion());
+ return lhs.version().majorVersion() < rhs.version().majorVersion()
+ || (lhs.version().majorVersion() == rhs.version().majorVersion()
+ && lhs.version().minorVersion() < rhs.version().minorVersion());
}
bool operator<=(const ComponentVersion &lhs, const ComponentVersion &rhs)
{
- return lhs.majorVersion() < rhs.majorVersion()
- || (lhs.majorVersion() == rhs.majorVersion()
- && lhs.minorVersion() <= rhs.minorVersion());
+ return lhs.version().majorVersion() < rhs.version().majorVersion()
+ || (lhs.version().majorVersion() == rhs.version().majorVersion()
+ && lhs.version().minorVersion() <= rhs.version().minorVersion());
}
bool operator>(const ComponentVersion &lhs, const ComponentVersion &rhs)
@@ -70,8 +70,8 @@ bool operator>=(const ComponentVersion &lhs, const ComponentVersion &rhs)
bool operator==(const ComponentVersion &lhs, const ComponentVersion &rhs)
{
- return lhs.majorVersion() == rhs.majorVersion()
- && lhs.minorVersion() == rhs.minorVersion();
+ return lhs.version().majorVersion() == rhs.version().majorVersion()
+ && lhs.version().minorVersion() == rhs.version().minorVersion();
}
bool operator!=(const ComponentVersion &lhs, const ComponentVersion &rhs)
diff --git a/tools/qmllint/componentversion.h b/tools/qmllint/componentversion.h
index 9c4604b9a3..bbb039fc40 100644
--- a/tools/qmllint/componentversion.h
+++ b/tools/qmllint/componentversion.h
@@ -40,24 +40,20 @@
// We mean it.
#include <QtCore/qglobal.h>
+#include <QtCore/qversionnumber.h>
class ComponentVersion
{
public:
- static const int NoVersion = -1;
-
ComponentVersion() = default;
- ComponentVersion(int major, int minor) : m_major(major), m_minor(minor) {}
+ ComponentVersion(QTypeRevision version) : m_version(version) {}
explicit ComponentVersion(const QString &versionString);
- int majorVersion() const { return m_major; }
- int minorVersion() const { return m_minor; }
-
- bool isValid() const { return m_major >= 0 && m_minor >= 0; }
+ QTypeRevision version() const { return m_version; }
+ bool isValid() const { return m_version.hasMajorVersion() && m_version.hasMinorVersion(); }
private:
- int m_major = NoVersion;
- int m_minor = NoVersion;
+ QTypeRevision m_version;
};
bool operator<(const ComponentVersion &lhs, const ComponentVersion &rhs);
diff --git a/tools/qmllint/findunqualified.cpp b/tools/qmllint/findunqualified.cpp
index 807110c3c1..187471125a 100644
--- a/tools/qmllint/findunqualified.cpp
+++ b/tools/qmllint/findunqualified.cpp
@@ -92,8 +92,7 @@ void FindUnqualifiedIDVisitor::parseHeaders(QQmlJS::AST::UiHeaderItemList *heade
if (import->asToken.isValid()) {
prefix += import->importId + QLatin1Char('.');
}
- importHelper(path, prefix, import->version->majorVersion,
- import->version->minorVersion);
+ importHelper(path, prefix, import->version->version);
}
}
header = header->next;
@@ -119,7 +118,7 @@ ScopeTree *FindUnqualifiedIDVisitor::parseProgram(QQmlJS::AST::Program *program,
enum ImportVersion { FullyVersioned, PartiallyVersioned, Unversioned, BasePath };
-QStringList completeImportPaths(const QString &uri, const QString &basePath, int vmaj, int vmin)
+QStringList completeImportPaths(const QString &uri, const QString &basePath, QTypeRevision version)
{
static const QLatin1Char Slash('/');
static const QLatin1Char Backslash('\\');
@@ -130,15 +129,16 @@ QStringList completeImportPaths(const QString &uri, const QString &basePath, int
// fully & partially versioned parts + 1 unversioned for each base path
qmlDirPathsPaths.reserve(2 * parts.count() + 1);
- auto versionString = [](int vmaj, int vmin, ImportVersion version)
+ auto versionString = [](QTypeRevision version, ImportVersion mode)
{
- if (version == FullyVersioned) {
+ if (mode == FullyVersioned) {
// extension with fully encoded version number (eg. MyModule.3.2)
- return QString::fromLatin1(".%1.%2").arg(vmaj).arg(vmin);
+ return QString::fromLatin1(".%1.%2").arg(version.majorVersion())
+ .arg(version.minorVersion());
}
- if (version == PartiallyVersioned) {
+ if (mode == PartiallyVersioned) {
// extension with encoded version major (eg. MyModule.3)
- return QString::fromLatin1(".%1").arg(vmaj);
+ return QString::fromLatin1(".%1").arg(version.majorVersion());
}
// else extension without version number (eg. MyModule)
return QString();
@@ -153,24 +153,24 @@ QStringList completeImportPaths(const QString &uri, const QString &basePath, int
return str;
};
- const ImportVersion initial = (vmin >= 0)
+ const ImportVersion initial = (version.hasMinorVersion())
? FullyVersioned
- : (vmaj >= 0 ? PartiallyVersioned : Unversioned);
- for (int version = initial; version <= BasePath; ++version) {
- const QString ver = versionString(vmaj, vmin, static_cast<ImportVersion>(version));
+ : (version.hasMajorVersion() ? PartiallyVersioned : Unversioned);
+ for (int mode = initial; mode <= BasePath; ++mode) {
+ const QString ver = versionString(version, ImportVersion(mode));
QString dir = basePath;
if (!dir.endsWith(Slash) && !dir.endsWith(Backslash))
dir += Slash;
- if (version == BasePath) {
+ if (mode == BasePath) {
qmlDirPathsPaths += dir;
} else {
// append to the end
qmlDirPathsPaths += dir + joinStringRefs(parts, Slash) + ver;
}
- if (version < Unversioned) {
+ if (mode < Unversioned) {
// insert in the middle
for (int index = parts.count() - 2; index >= 0; --index) {
qmlDirPathsPaths += dir + joinStringRefs(parts.mid(0, index + 1), Slash)
@@ -222,7 +222,7 @@ FindUnqualifiedIDVisitor::Import FindUnqualifiedIDVisitor::readQmldir(const QStr
(*mo)->addExport(
it.key(), reader.typeNamespace(),
- ComponentVersion(it->majorVersion, it->minorVersion));
+ ComponentVersion(it->version));
}
for (auto it = qmlComponents.begin(), end = qmlComponents.end(); it != end; ++it)
result.objects.insert( it.key(), ScopeTree::ConstPtr(it.value()));
@@ -240,11 +240,11 @@ void FindUnqualifiedIDVisitor::processImport(const QString &prefix, const FindUn
auto const &id = split.at(0);
if (split.length() > 1) {
const auto version = split.at(1).split('.');
- importHelper(id, QString(),
- version.at(0).toInt(),
- version.length() > 1 ? version.at(1).toInt() : -1);
+ importHelper(id, QString(), QTypeRevision::fromVersion(
+ version.at(0).toInt(),
+ version.length() > 1 ? version.at(1).toInt() : -1));
} else {
- importHelper(id, QString(), -1, -1);
+ importHelper(id, QString(), QTypeRevision());
}
@@ -267,7 +267,7 @@ void FindUnqualifiedIDVisitor::processImport(const QString &prefix, const FindUn
}
void FindUnqualifiedIDVisitor::importHelper(const QString &module, const QString &prefix,
- int major, int minor)
+ QTypeRevision version)
{
const QString id = QString(module).replace(QLatin1Char('/'), QLatin1Char('.'));
QPair<QString, QString> importId { id, prefix };
@@ -276,7 +276,7 @@ void FindUnqualifiedIDVisitor::importHelper(const QString &module, const QString
m_alreadySeenImports.insert(importId);
for (const QString &qmltypeDir : m_qmltypeDirs) {
- auto qmltypesPaths = completeImportPaths(id, qmltypeDir, major, minor);
+ auto qmltypesPaths = completeImportPaths(id, qmltypeDir, version);
for (auto const &qmltypesPath : qmltypesPaths) {
if (QFile::exists(qmltypesPath + SlashQmldir)) {
@@ -764,7 +764,7 @@ bool FindUnqualifiedIDVisitor::visit(QQmlJS::AST::UiImport *import)
}
path.chop(1);
- importHelper(path, prefix, import->version->majorVersion, import->version->minorVersion);
+ importHelper(path, prefix, import->version->version);
}
return true;
}
diff --git a/tools/qmllint/findunqualified.h b/tools/qmllint/findunqualified.h
index 6668b53b08..1c351e4fd9 100644
--- a/tools/qmllint/findunqualified.h
+++ b/tools/qmllint/findunqualified.h
@@ -91,7 +91,7 @@ private:
void enterEnvironment(ScopeType type, const QString &name);
void leaveEnvironment();
void importHelper(const QString &module, const QString &prefix = QString(),
- int major = -1, int minor = -1);
+ QTypeRevision version = QTypeRevision());
void readQmltypes(const QString &filename, Import &result);
Import readQmldir(const QString &dirname);
diff --git a/tools/qmllint/typedescriptionreader.cpp b/tools/qmllint/typedescriptionreader.cpp
index 3dc87ffc8d..8734f349d5 100644
--- a/tools/qmllint/typedescriptionreader.cpp
+++ b/tools/qmllint/typedescriptionreader.cpp
@@ -102,7 +102,7 @@ void TypeDescriptionReader::readDocument(UiProgram *ast)
return;
}
- if (import->version->majorVersion != 1) {
+ if (import->version->version.majorVersion() != 1) {
addError(import->version->firstSourceLocation(),
tr("Major version different from 1 not supported."));
return;