aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/qmljs/qmljsbundle.cpp19
-rw-r--r--src/libs/qmljs/qmljsbundle.h5
-rw-r--r--src/plugins/qmljstools/qmljsbundleprovider.cpp29
-rw-r--r--src/plugins/qmljstools/qmljsbundleprovider.h9
4 files changed, 40 insertions, 22 deletions
diff --git a/src/libs/qmljs/qmljsbundle.cpp b/src/libs/qmljs/qmljsbundle.cpp
index c55edcdf5e..e4d536a3da 100644
--- a/src/libs/qmljs/qmljsbundle.cpp
+++ b/src/libs/qmljs/qmljsbundle.cpp
@@ -7,6 +7,7 @@
#include <QString>
#include <QFile>
+#include <QRegularExpression>
#include <QTextStream>
#include <QHash>
@@ -186,8 +187,10 @@ QString QmlBundle::toString(const QString &indent)
}
QStringList QmlBundle::maybeReadTrie(Trie &trie, Utils::JsonObjectValue *config,
- const QString &path, const QString &propertyName, bool required)
+ const QString &path, const QString &propertyName,
+ bool required, bool stripVersions)
{
+ static const QRegularExpression versionNumberAtEnd("^(.+)( \\d+\\.\\d+)$");
QStringList res;
if (!config->hasMember(propertyName)) {
if (required)
@@ -202,7 +205,13 @@ QStringList QmlBundle::maybeReadTrie(Trie &trie, Utils::JsonObjectValue *config,
for (Utils::JsonValue *v : elements) {
Utils::JsonStringValue *impStr = ((v != nullptr) ? v->toString() : nullptr);
if (impStr != nullptr) {
- trie.insert(impStr->value());
+ QString value = impStr->value();
+ if (stripVersions) {
+ const QRegularExpressionMatch match = versionNumberAtEnd.match(value);
+ if (match.hasMatch())
+ value = match.captured(1);
+ }
+ trie.insert(value);
} else {
res.append(QString::fromLatin1("Expected all elements of array in property \"%1\" "
"to be strings in QmlBundle at %2.")
@@ -217,7 +226,7 @@ QStringList QmlBundle::maybeReadTrie(Trie &trie, Utils::JsonObjectValue *config,
return res;
}
-bool QmlBundle::readFrom(QString path, QStringList *errors)
+bool QmlBundle::readFrom(QString path, bool stripVersions, QStringList *errors)
{
Utils::JsonMemoryPool pool;
@@ -249,8 +258,8 @@ bool QmlBundle::readFrom(QString path, QStringList *errors)
}
errs << maybeReadTrie(m_searchPaths, config, path, QLatin1String("searchPaths"));
errs << maybeReadTrie(m_installPaths, config, path, QLatin1String("installPaths"));
- errs << maybeReadTrie(m_supportedImports, config, path, QLatin1String("supportedImports")
- , true);
+ errs << maybeReadTrie(m_supportedImports, config, path, QLatin1String("supportedImports"),
+ true, stripVersions);
errs << maybeReadTrie(m_implicitImports, config, path, QLatin1String("implicitImports"));
if (errors)
(*errors) << errs;
diff --git a/src/libs/qmljs/qmljsbundle.h b/src/libs/qmljs/qmljsbundle.h
index 8cf3145671..5d2058eef4 100644
--- a/src/libs/qmljs/qmljsbundle.h
+++ b/src/libs/qmljs/qmljsbundle.h
@@ -53,14 +53,15 @@ public:
bool writeTo(const QString &path) const;
bool writeTo(QTextStream &stream, const QString &indent = QString()) const;
QString toString(const QString &indent = QString());
- bool readFrom(QString path, QStringList *errors);
+ bool readFrom(QString path, bool stripVersions, QStringList *errors);
bool operator==(const QmlBundle &o) const;
bool operator!=(const QmlBundle &o) const;
private:
static void printEscaped(QTextStream &s, const QString &str);
static void writeTrie(QTextStream &stream, const Trie &t, const QString &indent);
QStringList maybeReadTrie(Trie &trie, Utils::JsonObjectValue *config, const QString &path,
- const QString &propertyName, bool required = false);
+ const QString &propertyName, bool required = false,
+ bool stripVersions = false);
QString m_name;
Trie m_searchPaths;
diff --git a/src/plugins/qmljstools/qmljsbundleprovider.cpp b/src/plugins/qmljstools/qmljsbundleprovider.cpp
index f44070b75e..623a6f4684 100644
--- a/src/plugins/qmljstools/qmljsbundleprovider.cpp
+++ b/src/plugins/qmljstools/qmljsbundleprovider.cpp
@@ -25,7 +25,8 @@ BasicBundleProvider::BasicBundleProvider(QObject *parent) :
IBundleProvider(parent)
{ }
-QmlBundle BasicBundleProvider::defaultBundle(const QString &bundleInfoName)
+QmlBundle BasicBundleProvider::defaultBundle(const QString &bundleInfoName,
+ QtSupport::QtVersion *qtVersion)
{
static bool wroteErrors = false;
QmlBundle res;
@@ -37,7 +38,8 @@ QmlBundle BasicBundleProvider::defaultBundle(const QString &bundleInfoName)
return res;
}
QStringList errors;
- if (!res.readFrom(defaultBundlePath.toString(), &errors) && !wroteErrors) {
+ bool stripVersions = qtVersion && qtVersion->qtVersion().majorVersion() > 5;
+ if (!res.readFrom(defaultBundlePath.toString(), stripVersions, &errors) && !wroteErrors) {
qWarning() << "BasicBundleProvider: ERROR reading " << defaultBundlePath
<< " : " << errors;
wroteErrors = true;
@@ -45,31 +47,31 @@ QmlBundle BasicBundleProvider::defaultBundle(const QString &bundleInfoName)
return res;
}
-QmlBundle BasicBundleProvider::defaultQt5QtQuick2Bundle(bool enhance)
+QmlBundle BasicBundleProvider::defaultQt5QtQuick2Bundle(QtSupport::QtVersion *qtVersion)
{
- QmlBundle result = defaultBundle(QLatin1String("qt5QtQuick2-bundle.json"));
- if (!enhance)
+ QmlBundle result = defaultBundle(QLatin1String("qt5QtQuick2-bundle.json"), qtVersion);
+ if (!qtVersion || qtVersion->qtVersion().majorVersion() < 6)
return result;
if (Utils::HostOsInfo::isMacHost())
- result.merge(defaultBundle(QLatin1String("qt5QtQuick2ext-macos-bundle.json")));
+ result.merge(defaultBundle(QLatin1String("qt5QtQuick2ext-macos-bundle.json"), qtVersion));
if (Utils::HostOsInfo::isWindowsHost())
- result.merge(defaultBundle(QLatin1String("qt5QtQuick2ext-win-bundle.json")));
+ result.merge(defaultBundle(QLatin1String("qt5QtQuick2ext-win-bundle.json"), qtVersion));
return result;
}
QmlBundle BasicBundleProvider::defaultQbsBundle()
{
- return defaultBundle(QLatin1String("qbs-bundle.json"));
+ return defaultBundle(QLatin1String("qbs-bundle.json"), nullptr);
}
QmlBundle BasicBundleProvider::defaultQmltypesBundle()
{
- return defaultBundle(QLatin1String("qmltypes-bundle.json"));
+ return defaultBundle(QLatin1String("qmltypes-bundle.json"), nullptr);
}
QmlBundle BasicBundleProvider::defaultQmlprojectBundle()
{
- return defaultBundle(QLatin1String("qmlproject-bundle.json"));
+ return defaultBundle(QLatin1String("qmlproject-bundle.json"), nullptr);
}
void BasicBundleProvider::mergeBundlesForKit(ProjectExplorer::Kit *kit
@@ -84,7 +86,7 @@ void BasicBundleProvider::mergeBundlesForKit(ProjectExplorer::Kit *kit
QtSupport::QtVersion *qtVersion = QtSupport::QtKitAspect::qtVersion(kit);
if (!qtVersion) {
- QmlBundle b2(defaultQt5QtQuick2Bundle(false));
+ QmlBundle b2(defaultQt5QtQuick2Bundle(qtVersion));
bundles.mergeBundleForLanguage(Dialect::Qml, b2);
bundles.mergeBundleForLanguage(Dialect::QmlQtQuick2, b2);
bundles.mergeBundleForLanguage(Dialect::QmlQtQuick2Ui, b2);
@@ -97,17 +99,18 @@ void BasicBundleProvider::mergeBundlesForKit(ProjectExplorer::Kit *kit
qtQuick2Bundles.setNameFilters(QStringList(QLatin1String("*-bundle.json")));
QmlBundle qtQuick2Bundle;
QFileInfoList list = qtQuick2Bundles.entryInfoList();
+ bool stripVersions = qtVersion->qtVersion().majorVersion() > 5;
for (int i = 0; i < list.size(); ++i) {
QmlBundle bAtt;
QStringList errors;
- if (!bAtt.readFrom(list.value(i).filePath(), &errors))
+ if (!bAtt.readFrom(list.value(i).filePath(), stripVersions, &errors))
qWarning() << "BasicBundleProvider: ERROR reading " << list[i].filePath() << " : "
<< errors;
qtQuick2Bundle.merge(bAtt);
}
if (!qtQuick2Bundle.supportedImports().contains(QLatin1String("QtQuick 2."),
PersistentTrie::Partial)) {
- qtQuick2Bundle.merge(defaultQt5QtQuick2Bundle(qtVersion->qtVersion().majorVersion() >= 6));
+ qtQuick2Bundle.merge(defaultQt5QtQuick2Bundle(qtVersion));
}
qtQuick2Bundle.replaceVars(myReplacements);
bundles.mergeBundleForLanguage(Dialect::Qml, qtQuick2Bundle);
diff --git a/src/plugins/qmljstools/qmljsbundleprovider.h b/src/plugins/qmljstools/qmljsbundleprovider.h
index 392055b032..d8cd835150 100644
--- a/src/plugins/qmljstools/qmljsbundleprovider.h
+++ b/src/plugins/qmljstools/qmljsbundleprovider.h
@@ -19,6 +19,10 @@ class QmlLanguageBundles;
class QmlBundle;
} // namespace QmlJS
+namespace QtSupport {
+class QtVersion;
+}
+
namespace QmlJSTools {
class QMLJSTOOLS_EXPORT IBundleProvider : public QObject
@@ -43,8 +47,9 @@ public:
void mergeBundlesForKit(ProjectExplorer::Kit *kit, QmlJS::QmlLanguageBundles &bundles,
const QHash<QString,QString> &replacements) override;
- static QmlJS::QmlBundle defaultBundle(const QString &bundleInfoName);
- static QmlJS::QmlBundle defaultQt5QtQuick2Bundle(bool enhance);
+ static QmlJS::QmlBundle defaultBundle(const QString &bundleInfoName,
+ QtSupport::QtVersion *qtVersion);
+ static QmlJS::QmlBundle defaultQt5QtQuick2Bundle(QtSupport::QtVersion *qtVersion);
static QmlJS::QmlBundle defaultQbsBundle();
static QmlJS::QmlBundle defaultQmltypesBundle();
static QmlJS::QmlBundle defaultQmlprojectBundle();