From ea5ca799002d774237e9433612d43f05c41cd297 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Thu, 20 May 2010 15:41:30 +0200 Subject: [PATCH] QmlJS: Add ComponentVersion class to simplify dealing with versions. --- src/libs/qmljs/qmljs-lib.pri | 6 ++- src/libs/qmljs/qmljsbind.cpp | 7 +--- src/libs/qmljs/qmljsbind.h | 4 +- src/libs/qmljs/qmljscomponentversion.cpp | 50 ++++++++++++++++++++++++ src/libs/qmljs/qmljscomponentversion.h | 35 +++++++++++++++++ 5 files changed, 93 insertions(+), 9 deletions(-) create mode 100644 src/libs/qmljs/qmljscomponentversion.cpp create mode 100644 src/libs/qmljs/qmljscomponentversion.h diff --git a/src/libs/qmljs/qmljs-lib.pri b/src/libs/qmljs/qmljs-lib.pri index c74ad3478b5..e0e7b49a167 100644 --- a/src/libs/qmljs/qmljs-lib.pri +++ b/src/libs/qmljs/qmljs-lib.pri @@ -20,7 +20,8 @@ HEADERS += \ $$PWD/qmljscheck.h \ $$PWD/qmljsscopebuilder.h \ $$PWD/qmljslineinfo.h \ - $$PWD/qmljscompletioncontextfinder.h + $$PWD/qmljscompletioncontextfinder.h \ + $$PWD/qmljscomponentversion.h SOURCES += \ $$PWD/qmljsbind.cpp \ @@ -32,7 +33,8 @@ SOURCES += \ $$PWD/qmljscheck.cpp \ $$PWD/qmljsscopebuilder.cpp \ $$PWD/qmljslineinfo.cpp \ - $$PWD/qmljscompletioncontextfinder.cpp + $$PWD/qmljscompletioncontextfinder.cpp \ + $$PWD/qmljscomponentversion.cpp OTHER_FILES += \ $$PWD/parser/qmljs.g diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp index 906b87f68e8..43659c3d022 100644 --- a/src/libs/qmljs/qmljsbind.cpp +++ b/src/libs/qmljs/qmljsbind.cpp @@ -187,15 +187,12 @@ bool Bind::visit(UiImport *ast) { ImportInfo info; - info.majorVersion = QmlObjectValue::NoVersion; - info.minorVersion = QmlObjectValue::NoVersion; - if (ast->versionToken.isValid()) { const QString versionString = _doc->source().mid(ast->versionToken.offset, ast->versionToken.length); const int dotIdx = versionString.indexOf(QLatin1Char('.')); if (dotIdx != -1) { - info.majorVersion = versionString.left(dotIdx).toInt(); - info.minorVersion = versionString.mid(dotIdx + 1).toInt(); + info.version = ComponentVersion(versionString.left(dotIdx).toInt(), + versionString.mid(dotIdx + 1).toInt()); } } diff --git a/src/libs/qmljs/qmljsbind.h b/src/libs/qmljs/qmljsbind.h index f5a7ee56f6f..6680b805d22 100644 --- a/src/libs/qmljs/qmljsbind.h +++ b/src/libs/qmljs/qmljsbind.h @@ -32,6 +32,7 @@ #include <qmljs/parser/qmljsastvisitor_p.h> #include <qmljs/qmljsinterpreter.h> +#include <qmljs/qmljscomponentversion.h> #include <QtCore/QHash> #include <QtCore/QStringList> @@ -52,8 +53,7 @@ public: struct ImportInfo { QString name; - int majorVersion; - int minorVersion; + ComponentVersion version; }; QList<ImportInfo> fileImports() const; diff --git a/src/libs/qmljs/qmljscomponentversion.cpp b/src/libs/qmljs/qmljscomponentversion.cpp new file mode 100644 index 00000000000..37f5ac514a0 --- /dev/null +++ b/src/libs/qmljs/qmljscomponentversion.cpp @@ -0,0 +1,50 @@ +#include "qmljscomponentversion.h" + +using namespace QmlJS; + +const int ComponentVersion::NoVersion = -1; + +ComponentVersion::ComponentVersion() + : _major(NoVersion), _minor(NoVersion) +{ +} + +ComponentVersion::ComponentVersion(int major, int minor) + : _major(major), _minor(minor) +{ +} + +ComponentVersion::~ComponentVersion() +{ +} + +bool ComponentVersion::isValid() const +{ + return _major >= 0 && _minor >= 0; +} + +namespace QmlJS { + +bool operator<(const ComponentVersion &lhs, const ComponentVersion &rhs) +{ + return lhs.major() < rhs.major() + || (lhs.major() == rhs.major() && lhs.minor() < rhs.minor()); +} + +bool operator<=(const ComponentVersion &lhs, const ComponentVersion &rhs) +{ + return lhs.major() < rhs.major() + || (lhs.major() == rhs.major() && lhs.minor() <= rhs.minor()); +} + +bool operator==(const ComponentVersion &lhs, const ComponentVersion &rhs) +{ + return lhs.major() == rhs.major() && lhs.minor() == rhs.minor(); +} + +bool operator!=(const ComponentVersion &lhs, const ComponentVersion &rhs) +{ + return !(lhs == rhs); +} + +} diff --git a/src/libs/qmljs/qmljscomponentversion.h b/src/libs/qmljs/qmljscomponentversion.h new file mode 100644 index 00000000000..d0a837701b3 --- /dev/null +++ b/src/libs/qmljs/qmljscomponentversion.h @@ -0,0 +1,35 @@ +#ifndef QMLJSCOMPONENTVERSION_H +#define QMLJSCOMPONENTVERSION_H + +#include "qmljs_global.h" + +namespace QmlJS { + +class QMLJS_EXPORT ComponentVersion +{ + int _major; + int _minor; + +public: + static const int NoVersion; + + ComponentVersion(); + ComponentVersion(int major, int minor); + ~ComponentVersion(); + + int major() const + { return _major; } + int minor() const + { return _minor; } + + bool isValid() const; +}; + +bool operator<(const ComponentVersion &lhs, const ComponentVersion &rhs); +bool operator<=(const ComponentVersion &lhs, const ComponentVersion &rhs); +bool operator==(const ComponentVersion &lhs, const ComponentVersion &rhs); +bool operator!=(const ComponentVersion &lhs, const ComponentVersion &rhs); + +} // namespace QmlJS + +#endif // QMLJSCOMPONENTVERSION_H -- GitLab