diff --git a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp index e1b95b75068..5cfb1414ed0 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp @@ -10,11 +10,12 @@ #include "rewriterview.h" #include "qmlitemnode.h" #include "qmlobjectnode.h" -#include "coreplugin/editormanager/editormanager.h" -#include "utils/qtcassert.h" -#include "utils/runextensions.h" -#include "projectexplorer/projectmanager.h" -#include "projectexplorer/project.h" + +#include +#include +#include +#include +#include #include @@ -69,7 +70,7 @@ public: private: void addAsset(const QPixmap &p, const Utils::FilePath &path); - void doDumping(QFutureInterface &fi); + void doDumping(QPromise &promise); void savePixmap(const QPixmap &p, Utils::FilePath &path) const; QFuture m_dumpFuture; @@ -452,7 +453,7 @@ QDebug operator<<(QDebug os, const AssetExporter::ParsingState &s) AssetDumper::AssetDumper(): m_quitDumper(false) { - m_dumpFuture = Utils::runAsync(&AssetDumper::doDumping, this); + m_dumpFuture = Utils::asyncRun(&AssetDumper::doDumping, this); } AssetDumper::~AssetDumper() @@ -489,7 +490,7 @@ void AssetDumper::addAsset(const QPixmap &p, const Utils::FilePath &path) m_assets.push({p, path}); } -void AssetDumper::doDumping(QFutureInterface &fi) +void AssetDumper::doDumping(QPromise &promise) { auto haveAsset = [this] (std::pair *asset) { QMutexLocker locker(&m_queueMutex); @@ -503,7 +504,7 @@ void AssetDumper::doDumping(QFutureInterface &fi) forever { std::pair asset; if (haveAsset(&asset)) { - if (fi.isCanceled()) + if (promise.isCanceled()) break; savePixmap(asset.first, asset.second); } else { @@ -513,10 +514,9 @@ void AssetDumper::doDumping(QFutureInterface &fi) m_queueCondition.wait(&m_queueMutex); } - if (fi.isCanceled()) + if (promise.isCanceled()) break; } - fi.reportFinished(); } void AssetDumper::savePixmap(const QPixmap &p, Utils::FilePath &path) const diff --git a/src/plugins/qmldesigner/assetexporterplugin/filepathmodel.cpp b/src/plugins/qmldesigner/assetexporterplugin/filepathmodel.cpp index b50bc3cffba..dd92973eba9 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/filepathmodel.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/filepathmodel.cpp @@ -4,9 +4,10 @@ #include "exportnotification.h" -#include "projectexplorer/project.h" -#include "projectexplorer/projectnodes.h" -#include "utils/runextensions.h" +#include +#include + +#include #include #include @@ -17,19 +18,19 @@ namespace { Q_LOGGING_CATEGORY(loggerError, "qtc.designer.assetExportPlugin.filePathModel", QtCriticalMsg) Q_LOGGING_CATEGORY(loggerInfo, "qtc.designer.assetExportPlugin.filePathModel", QtInfoMsg) -void findQmlFiles(QFutureInterface &f, const Project *project) +void findQmlFiles(QPromise &promise, const Project *project) { - if (!project || f.isCanceled()) + if (!project || promise.isCanceled()) return; int index = 0; - project->files([&f, &index](const Node* node) ->bool { - if (f.isCanceled()) + project->files([&promise, &index](const Node* node) ->bool { + if (promise.isCanceled()) return false; Utils::FilePath path = node->filePath(); bool isComponent = !path.fileName().isEmpty() && path.fileName().front().isUpper(); if (isComponent && node->filePath().endsWith(".ui.qml")) - f.reportResult(path, index++); + promise.addResult(path, index++); return true; }); } @@ -132,7 +133,7 @@ void FilePathModel::processProject() connect(m_preprocessWatcher.get(), &QFutureWatcher::finished, this, &FilePathModel::endResetModel); - QFuture f = Utils::runAsync(&findQmlFiles, m_project); + QFuture f = Utils::asyncRun(&findQmlFiles, m_project); m_preprocessWatcher->setFuture(f); } diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp index b37d0e8758d..c8ae1f8b8b0 100644 --- a/src/plugins/qmljseditor/qmljsfindreferences.cpp +++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp @@ -12,8 +12,8 @@ #include #include #include +#include #include -#include #include #include @@ -26,19 +26,10 @@ #include #include -#include "qmljseditorconstants.h" - -#include #include -#include #include -#include -#include -#include #include -#include - using namespace Core; using namespace QmlJS; using namespace QmlJS::AST; @@ -704,7 +695,7 @@ class ProcessFile using Usage = FindReferences::Usage; const QString name; const ObjectValue *scope; - QFutureInterface *future; + QPromise &m_promise; public: // needed by QtConcurrent @@ -714,16 +705,15 @@ public: ProcessFile(const ContextPtr &context, const QString &name, const ObjectValue *scope, - QFutureInterface *future) - : context(context), name(name), scope(scope), future(future) + QPromise &promise) + : context(context), name(name), scope(scope), m_promise(promise) { } QList operator()(const Utils::FilePath &fileName) { QList usages; - if (future->isPaused()) - future->waitForResume(); - if (future->isCanceled()) + m_promise.suspendIfRequested(); + if (m_promise.isCanceled()) return usages; ModelManagerInterface *modelManager = ModelManagerInterface::instance(); Document::Ptr doc = context->snapshot().document(fileName); @@ -739,8 +729,7 @@ public: loc.startLine, loc.startColumn - 1, loc.length)); - if (future->isPaused()) - future->waitForResume(); + m_promise.suspendIfRequested(); return usages; } }; @@ -751,7 +740,7 @@ class SearchFileForType using Usage = FindReferences::Usage; const QString name; const ObjectValue *scope; - QFutureInterface *future; + QPromise &m_promise; public: // needed by QtConcurrent @@ -761,16 +750,15 @@ public: SearchFileForType(const ContextPtr &context, const QString &name, const ObjectValue *scope, - QFutureInterface *future) - : context(context), name(name), scope(scope), future(future) + QPromise &promise) + : context(context), name(name), scope(scope), m_promise(promise) { } QList operator()(const Utils::FilePath &fileName) { QList usages; - if (future->isPaused()) - future->waitForResume(); - if (future->isCanceled()) + m_promise.suspendIfRequested(); + if (m_promise.isCanceled()) return usages; Document::Ptr doc = context->snapshot().document(fileName); if (!doc) @@ -781,8 +769,7 @@ public: const FindTypeUsages::Result results = findUsages(name, scope); for (const SourceLocation &loc : results) usages.append(Usage(fileName, matchingLine(loc.offset, doc->source()), loc.startLine, loc.startColumn - 1, loc.length)); - if (future->isPaused()) - future->waitForResume(); + m_promise.suspendIfRequested(); return usages; } }; @@ -790,7 +777,7 @@ public: class UpdateUI { using Usage = FindReferences::Usage; - QFutureInterface *future; + QPromise &m_promise; public: // needed by QtConcurrent @@ -798,14 +785,13 @@ public: using second_argument_type = const QList &; using result_type = void; - UpdateUI(QFutureInterface *future): future(future) {} + UpdateUI(QPromise &promise): m_promise(promise) {} void operator()(QList &, const QList &usages) { for (const Usage &u : usages) - future->reportResult(u); - - future->setProgressValue(future->progressValue() + 1); + m_promise.addResult(u); + m_promise.setProgressValue(m_promise.future().progressValue() + 1); } }; @@ -822,7 +808,7 @@ FindReferences::FindReferences(QObject *parent) FindReferences::~FindReferences() = default; -static void find_helper(QFutureInterface &future, +static void find_helper(QPromise &promise, const ModelManagerInterface::WorkingCopy &workingCopy, Snapshot snapshot, const Utils::FilePath &fileName, @@ -885,7 +871,7 @@ static void find_helper(QFutureInterface &future, } files = Utils::filteredUnique(files); - future.setProgressRange(0, files.size()); + promise.setProgressRange(0, files.size()); // report a dummy usage to indicate the search is starting FindReferences::Usage searchStarting(Utils::FilePath::fromString(replacement), name, 0, 0, 0); @@ -894,10 +880,10 @@ static void find_helper(QFutureInterface &future, const ObjectValue *typeValue = value_cast(findTarget.targetValue()); if (!typeValue) return; - future.reportResult(searchStarting); + promise.addResult(searchStarting); - SearchFileForType process(context, name, typeValue, &future); - UpdateUI reduce(&future); + SearchFileForType process(context, name, typeValue, promise); + UpdateUI reduce(promise); QtConcurrent::blockingMappedReduced > (files, process, reduce); } else { @@ -909,21 +895,21 @@ static void find_helper(QFutureInterface &future, return; if (!scope->className().isEmpty()) searchStarting.lineText.prepend(scope->className() + QLatin1Char('.')); - future.reportResult(searchStarting); + promise.addResult(searchStarting); - ProcessFile process(context, name, scope, &future); - UpdateUI reduce(&future); + ProcessFile process(context, name, scope, promise); + UpdateUI reduce(promise); QtConcurrent::blockingMappedReduced > (files, process, reduce); } - future.setProgressValue(files.size()); + promise.setProgressValue(files.size()); } void FindReferences::findUsages(const Utils::FilePath &fileName, quint32 offset) { ModelManagerInterface *modelManager = ModelManagerInterface::instance(); - QFuture result = Utils::runAsync(&find_helper, ModelManagerInterface::workingCopy(), + QFuture result = Utils::asyncRun(&find_helper, ModelManagerInterface::workingCopy(), modelManager->snapshot(), fileName, offset, QString()); m_watcher.setFuture(result); m_synchronizer.addFuture(result); @@ -940,7 +926,7 @@ void FindReferences::renameUsages(const Utils::FilePath &fileName, if (newName.isNull()) newName = QLatin1String(""); - QFuture result = Utils::runAsync(&find_helper, ModelManagerInterface::workingCopy(), + QFuture result = Utils::asyncRun(&find_helper, ModelManagerInterface::workingCopy(), modelManager->snapshot(), fileName, offset, newName); m_watcher.setFuture(result); m_synchronizer.addFuture(result); diff --git a/src/plugins/qmljseditor/qmltaskmanager.cpp b/src/plugins/qmljseditor/qmltaskmanager.cpp index 08019019da0..0d25bb3f13a 100644 --- a/src/plugins/qmljseditor/qmltaskmanager.cpp +++ b/src/plugins/qmljseditor/qmltaskmanager.cpp @@ -2,7 +2,6 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "qmltaskmanager.h" -#include "qmljseditor.h" #include "qmljseditorconstants.h" #include @@ -13,7 +12,7 @@ #include #include #include -#include +#include #include #include @@ -57,7 +56,7 @@ static Tasks convertToTasks(const QList &messages, cons return convertToTasks(diagnostics, fileName, category); } -void QmlTaskManager::collectMessages(QFutureInterface &future, +void QmlTaskManager::collectMessages(QPromise &promise, Snapshot snapshot, const QList &projectInfos, ViewerContext vContext, @@ -96,8 +95,8 @@ void QmlTaskManager::collectMessages(QFutureInterface &future } if (!result.tasks.isEmpty()) - future.reportResult(result); - if (future.isCanceled()) + promise.addResult(result); + if (promise.isCanceled()) break; } } @@ -127,8 +126,7 @@ void QmlTaskManager::updateMessagesNow(bool updateSemantic) ModelManagerInterface *modelManager = ModelManagerInterface::instance(); // process them - QFuture future = - Utils::runAsync( + QFuture future = Utils::asyncRun( &collectMessages, modelManager->newestSnapshot(), modelManager->projectInfos(), modelManager->defaultVContext(Dialect::AnyLanguage), updateSemantic); m_messageCollector.setFuture(future); diff --git a/src/plugins/qmljseditor/qmltaskmanager.h b/src/plugins/qmljseditor/qmltaskmanager.h index 26fa3bd347f..226fd2203d4 100644 --- a/src/plugins/qmljseditor/qmltaskmanager.h +++ b/src/plugins/qmljseditor/qmltaskmanager.h @@ -45,7 +45,7 @@ private: Utils::FilePath fileName; ProjectExplorer::Tasks tasks; }; - static void collectMessages(QFutureInterface &future, + static void collectMessages(QPromise &promise, QmlJS::Snapshot snapshot, const QList &projectInfos, QmlJS::ViewerContext vContext,