summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2019-10-23 09:14:58 +0200
committerUlf Hermann <ulf.hermann@qt.io>2019-10-23 10:14:47 +0000
commit6371725dbfb7ee6c46e9840dcdebdeba504b56d3 (patch)
treee3e2a5c5c3493491837e15a5e0e2472572104eca
parent3b65c0a5d599d169ddad9b86d8f952ada7ff28f1 (diff)
downloadqt-creator-6371725dbfb7ee6c46e9840dcdebdeba504b56d3.tar.gz
QmlJS: Clean up ViewerContext
The special ctor wasn't used anywhere, the default ctor can be replaced by inline initialization, maybeAddPath is only meaningful in the model manager and the language compatibility check should definitely not pretend to be a general rule either. Change-Id: I11cf25fe1c696550d33b56ce57316100321d564b Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r--src/libs/qmljs/qmljs-lib.pri1
-rw-r--r--src/libs/qmljs/qmljsimportdependencies.cpp38
-rw-r--r--src/libs/qmljs/qmljsmodelmanagerinterface.cpp22
-rw-r--r--src/libs/qmljs/qmljsviewercontext.cpp84
-rw-r--r--src/libs/qmljs/qmljsviewercontext.h15
-rw-r--r--src/plugins/qmljstools/qmljsmodelmanager.cpp2
6 files changed, 51 insertions, 111 deletions
diff --git a/src/libs/qmljs/qmljs-lib.pri b/src/libs/qmljs/qmljs-lib.pri
index 47967446bf..c9800eab81 100644
--- a/src/libs/qmljs/qmljs-lib.pri
+++ b/src/libs/qmljs/qmljs-lib.pri
@@ -70,7 +70,6 @@ SOURCES += \
$$PWD/qmljssimplereader.cpp \
$$PWD/persistenttrie.cpp \
$$PWD/qmljsimportdependencies.cpp \
- $$PWD/qmljsviewercontext.cpp \
$$PWD/qmljsdialect.cpp
contains(QT, gui) {
diff --git a/src/libs/qmljs/qmljsimportdependencies.cpp b/src/libs/qmljs/qmljsimportdependencies.cpp
index e5d0161665..a438b93a73 100644
--- a/src/libs/qmljs/qmljsimportdependencies.cpp
+++ b/src/libs/qmljs/qmljsimportdependencies.cpp
@@ -40,6 +40,34 @@ static Q_LOGGING_CATEGORY(importsLog, "qtc.qmljs.imports", QtWarningMsg)
namespace QmlJS {
+/*
+ which languages might be imported in this context
+ */
+static bool languageIsCompatible(Dialect contextLanguage, Dialect importLanguage)
+{
+ if (importLanguage == Dialect::AnyLanguage && contextLanguage != Dialect::NoLanguage)
+ return true;
+ switch (contextLanguage.dialect()) {
+ case Dialect::JavaScript:
+ case Dialect::Json:
+ case Dialect::QmlProject:
+ case Dialect::QmlQbs:
+ case Dialect::QmlTypeInfo:
+ return contextLanguage == importLanguage;
+ case Dialect::Qml:
+ return importLanguage == Dialect::Qml || importLanguage == Dialect::QmlQtQuick2 || importLanguage == Dialect::JavaScript;
+ case Dialect::QmlQtQuick2:
+ case Dialect::QmlQtQuick2Ui:
+ return importLanguage == Dialect::Qml || importLanguage == Dialect::QmlQtQuick2 || importLanguage == Dialect::QmlQtQuick2Ui
+ || importLanguage == Dialect::JavaScript;
+ case Dialect::AnyLanguage:
+ return true;
+ case Dialect::NoLanguage:
+ break;
+ }
+ return false;
+}
+
ImportKind::Enum toImportKind(ImportType::Enum type)
{
switch (type) {
@@ -587,7 +615,7 @@ void ImportDependencies::filter(const ViewerContext &vContext)
bool hasChanges = false;
for (auto j = m_coreImports.cbegin(), end = m_coreImports.cend(); j != end; ++j) {
const CoreImport &cImport = j.value();
- if (vContext.languageIsCompatible(cImport.language)) {
+ if (languageIsCompatible(vContext.language, cImport.language)) {
QList<Export> newExports;
foreach (const Export &e, cImport.possibleExports) {
if (e.visibleInVContext(vContext)) {
@@ -637,7 +665,7 @@ void ImportDependencies::iterateOnCandidateImports(
const QStringList imp = m_importCache.value(key.flatKey());
foreach (const QString &cImportName, imp) {
CoreImport cImport = coreImport(cImportName);
- if (vContext.languageIsCompatible(cImport.language)) {
+ if (languageIsCompatible(vContext.language, cImport.language)) {
foreach (const Export e, cImport.possibleExports) {
if (e.visibleInVContext(vContext)) {
ImportMatchStrength m = e.exportName.matchImport(key, vContext);
@@ -659,7 +687,7 @@ void ImportDependencies::iterateOnCandidateImports(
if (c == ImportKey::SameDir) {
foreach (const QString &cImportName, lb.value()) {
CoreImport cImport = coreImport(cImportName);
- if (vContext.languageIsCompatible(cImport.language)) {
+ if (languageIsCompatible(vContext.language, cImport.language)) {
foreach (const Export e, cImport.possibleExports) {
if (e.visibleInVContext(vContext)) {
ImportMatchStrength m = e.exportName.matchImport(key, vContext);
@@ -835,7 +863,7 @@ void ImportDependencies::iterateOnLibraryImports(
qCDebug(importsLog) << "libloop:" << i.key().toString() << i.value();
foreach (const QString &cImportName, i.value()) {
CoreImport cImport = coreImport(cImportName);
- if (vContext.languageIsCompatible(cImport.language)) {
+ if (languageIsCompatible(vContext.language, cImport.language)) {
foreach (const Export &e, cImport.possibleExports) {
if (e.visibleInVContext(vContext) && e.exportName.type == ImportType::Library) {
ImportMatchStrength m = e.exportName.matchImport(i.key(), vContext);
@@ -869,7 +897,7 @@ void ImportDependencies::iterateOnSubImports(
break;
foreach (const QString &cImportName, i.value()) {
CoreImport cImport = coreImport(cImportName);
- if (vContext.languageIsCompatible(cImport.language)) {
+ if (languageIsCompatible(vContext.language, cImport.language)) {
foreach (const Export &e, cImport.possibleExports) {
if (e.visibleInVContext(vContext)) {
ImportMatchStrength m = e.exportName.matchImport(i.key(), vContext);
diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp
index 4453172e8a..e9597e7562 100644
--- a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp
+++ b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp
@@ -81,6 +81,12 @@ static ModelManagerInterface *g_instance = nullptr;
const char qtQuickUISuffix[] = "ui.qml";
+static void maybeAddPath(ViewerContext &context, const QString &path)
+{
+ if (!path.isEmpty() && !context.paths.contains(path))
+ context.paths.append(path);
+}
+
static QStringList environmentImportPaths()
{
QStringList paths;
@@ -1355,17 +1361,17 @@ ViewerContext ModelManagerInterface::completeVContext(const ViewerContext &vCtx,
case ViewerContext::AddAllPaths:
{
foreach (const QString &path, defaultVCtx.paths)
- res.maybeAddPath(path);
+ maybeAddPath(res, path);
switch (res.language.dialect()) {
case Dialect::AnyLanguage:
case Dialect::Qml:
- res.maybeAddPath(info.qtQmlPath);
+ maybeAddPath(res, info.qtQmlPath);
Q_FALLTHROUGH();
case Dialect::QmlQtQuick2:
case Dialect::QmlQtQuick2Ui:
{
if (res.language == Dialect::QmlQtQuick2 || res.language == Dialect::QmlQtQuick2Ui)
- res.maybeAddPath(info.qtQmlPath);
+ maybeAddPath(res, info.qtQmlPath);
QList<ProjectInfo> allProjects;
{
QMutexLocker locker(&m_mutex);
@@ -1377,11 +1383,11 @@ ViewerContext ModelManagerInterface::completeVContext(const ViewerContext &vCtx,
for (int i = 0; i< pInfo.importPaths.size(); ++i) {
PathAndLanguage pAndL = pInfo.importPaths.at(i);
if (languages.contains(pAndL.language()) || pAndL.language().companionLanguages().contains(res.language))
- res.maybeAddPath(pAndL.path().toString());
+ maybeAddPath(res, pAndL.path().toString());
}
}
foreach (const QString &path, environmentImportPaths())
- res.maybeAddPath(path);
+ maybeAddPath(res, path);
break;
}
case Dialect::NoLanguage:
@@ -1399,13 +1405,13 @@ ViewerContext ModelManagerInterface::completeVContext(const ViewerContext &vCtx,
Q_FALLTHROUGH();
case ViewerContext::AddDefaultPaths:
foreach (const QString &path, defaultVCtx.paths)
- res.maybeAddPath(path);
+ maybeAddPath(res, path);
if (res.language == Dialect::AnyLanguage || res.language == Dialect::Qml)
- res.maybeAddPath(info.qtQmlPath);
+ maybeAddPath(res, info.qtQmlPath);
if (res.language == Dialect::AnyLanguage || res.language == Dialect::Qml
|| res.language == Dialect::QmlQtQuick2 || res.language == Dialect::QmlQtQuick2Ui) {
foreach (const QString &path, environmentImportPaths())
- res.maybeAddPath(path);
+ maybeAddPath(res, path);
}
break;
}
diff --git a/src/libs/qmljs/qmljsviewercontext.cpp b/src/libs/qmljs/qmljsviewercontext.cpp
deleted file mode 100644
index bc5d8e5b48..0000000000
--- a/src/libs/qmljs/qmljsviewercontext.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "qmljsviewercontext.h"
-
-namespace QmlJS {
-/*!
- \class QmlJS::ViewerContext
- \brief The ViewerContext class encapsulate selector and paths for a given viewer.
-
- Using a a different viewer context can emulate (the pure qml part) of a device.
- This allows checking how a given qml would be interpreted on another platform/viewer.
-
- Screen information will also most likely need to be added here.
-*/
-ViewerContext::ViewerContext()
- : language(Dialect::Qml), flags(AddAllPaths)
-{ }
-
-ViewerContext::ViewerContext(const QStringList &selectors, const QStringList &paths,
- QmlJS::Dialect language,
- QmlJS::ViewerContext::Flags flags)
- : selectors(selectors), paths(paths), language(language),
- flags(flags)
-{ }
-
-
-/*
- which languages might be imported in this context
- */
-bool ViewerContext::languageIsCompatible(Dialect l) const
-{
- if (l == Dialect::AnyLanguage && language != Dialect::NoLanguage)
- return true;
- switch (language.dialect()) {
- case Dialect::JavaScript:
- case Dialect::Json:
- case Dialect::QmlProject:
- case Dialect::QmlQbs:
- case Dialect::QmlTypeInfo:
- return language == l;
- case Dialect::Qml:
- return l == Dialect::Qml || l == Dialect::QmlQtQuick2 || l == Dialect::JavaScript;
- case Dialect::QmlQtQuick2:
- case Dialect::QmlQtQuick2Ui:
- return l == Dialect::Qml || l == Dialect::QmlQtQuick2 || l == Dialect::QmlQtQuick2Ui
- || l == Dialect::JavaScript;
- case Dialect::AnyLanguage:
- return true;
- case Dialect::NoLanguage:
- break;
- }
- return false;
-}
-
-void ViewerContext::maybeAddPath(const QString &path)
-{
- if (!path.isEmpty() && !paths.contains(path))
- paths.append(path);
-}
-
-} // namespace QmlJS
diff --git a/src/libs/qmljs/qmljsviewercontext.h b/src/libs/qmljs/qmljsviewercontext.h
index a04596cdd3..716636d7b3 100644
--- a/src/libs/qmljs/qmljsviewercontext.h
+++ b/src/libs/qmljs/qmljsviewercontext.h
@@ -32,9 +32,8 @@
namespace QmlJS {
-class QMLJS_EXPORT ViewerContext
+struct QMLJS_EXPORT ViewerContext
{
-public:
enum Flags {
Complete,
AddAllPathsAndDefaultSelectors,
@@ -43,18 +42,10 @@ public:
AddDefaultPathsAndSelectors
};
- ViewerContext();
- ViewerContext(const QStringList &selectors, const QStringList &paths,
- Dialect language = Dialect::Qml,
- Flags flags = AddAllPaths);
-
- bool languageIsCompatible(Dialect l) const;
- void maybeAddPath(const QString &path);
-
QStringList selectors;
QStringList paths;
- Dialect language;
- Flags flags;
+ Dialect language = Dialect::Qml;
+ Flags flags = AddAllPaths;
};
} // namespace QmlJS
diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp
index b33846faf9..ca4fc55594 100644
--- a/src/plugins/qmljstools/qmljsmodelmanager.cpp
+++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp
@@ -224,7 +224,7 @@ void ModelManager::delayedInitialization()
ViewerContext qbsVContext;
qbsVContext.language = Dialect::QmlQbs;
- qbsVContext.maybeAddPath(ICore::resourcePath() + QLatin1String("/qbs"));
+ qbsVContext.paths.append(ICore::resourcePath() + QLatin1String("/qbs"));
setDefaultVContext(qbsVContext);
}