diff options
| author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2023-02-12 02:08:11 +0100 |
|---|---|---|
| committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2023-03-10 10:04:51 +0000 |
| commit | 62489e49f8478f7cc3b8d68e5ecc5dd13a1282ea (patch) | |
| tree | a5f4ac0fe13e0cae964d7ac18327cd19a95e94bf | |
| parent | 8240333f969ff1707997e080733d7f83b2385fc0 (diff) | |
| download | qt-creator-62489e49f8478f7cc3b8d68e5ecc5dd13a1282ea.tar.gz | |
ProjectInfoGenerator: Use QPromise for async calls
Change-Id: Ibf95090bee773cabcaed82a79687508e1f017059
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
| -rw-r--r-- | src/plugins/cppeditor/cppprojectinfogenerator.cpp | 16 | ||||
| -rw-r--r-- | src/plugins/cppeditor/cppprojectinfogenerator.h | 11 | ||||
| -rw-r--r-- | src/plugins/cppeditor/cppprojectupdater.cpp | 8 | ||||
| -rw-r--r-- | src/plugins/cppeditor/projectinfo_test.cpp | 6 |
4 files changed, 18 insertions, 23 deletions
diff --git a/src/plugins/cppeditor/cppprojectinfogenerator.cpp b/src/plugins/cppeditor/cppprojectinfogenerator.cpp index fe077bd377..5c4c03de4c 100644 --- a/src/plugins/cppeditor/cppprojectinfogenerator.cpp +++ b/src/plugins/cppeditor/cppprojectinfogenerator.cpp @@ -10,30 +10,24 @@ #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/taskhub.h> -#include <utils/qtcassert.h> - +#include <QPromise> #include <QTimer> -#include <set> - using namespace ProjectExplorer; using namespace Utils; namespace CppEditor::Internal { -ProjectInfoGenerator::ProjectInfoGenerator( - const QFutureInterface<ProjectInfo::ConstPtr> &futureInterface, - const ProjectUpdateInfo &projectUpdateInfo) - : m_futureInterface(futureInterface) - , m_projectUpdateInfo(projectUpdateInfo) +ProjectInfoGenerator::ProjectInfoGenerator(const ProjectUpdateInfo &projectUpdateInfo) + : m_projectUpdateInfo(projectUpdateInfo) { } -ProjectInfo::ConstPtr ProjectInfoGenerator::generate() +ProjectInfo::ConstPtr ProjectInfoGenerator::generate(const QPromise<ProjectInfo::ConstPtr> &promise) { QVector<ProjectPart::ConstPtr> projectParts; for (const RawProjectPart &rpp : m_projectUpdateInfo.rawProjectParts) { - if (m_futureInterface.isCanceled()) + if (promise.isCanceled()) return {}; for (const ProjectPart::ConstPtr &part : createProjectParts( rpp, m_projectUpdateInfo.projectFilePath)) { diff --git a/src/plugins/cppeditor/cppprojectinfogenerator.h b/src/plugins/cppeditor/cppprojectinfogenerator.h index c090974c04..8720d3e1cd 100644 --- a/src/plugins/cppeditor/cppprojectinfogenerator.h +++ b/src/plugins/cppeditor/cppprojectinfogenerator.h @@ -5,17 +5,19 @@ #include "projectinfo.h" -#include <QFutureInterface> +QT_BEGIN_NAMESPACE +template <class T> +class QPromise; +QT_END_NAMESPACE namespace CppEditor::Internal { class ProjectInfoGenerator { public: - ProjectInfoGenerator(const QFutureInterface<ProjectInfo::ConstPtr> &futureInterface, - const ProjectExplorer::ProjectUpdateInfo &projectUpdateInfo); + ProjectInfoGenerator(const ProjectExplorer::ProjectUpdateInfo &projectUpdateInfo); - ProjectInfo::ConstPtr generate(); + ProjectInfo::ConstPtr generate(const QPromise<ProjectInfo::ConstPtr> &promise); private: const QVector<ProjectPart::ConstPtr> createProjectParts( @@ -29,7 +31,6 @@ private: Utils::LanguageExtensions languageExtensions); private: - const QFutureInterface<ProjectInfo::ConstPtr> m_futureInterface; const ProjectExplorer::ProjectUpdateInfo &m_projectUpdateInfo; bool m_cToolchainMissing = false; bool m_cxxToolchainMissing = false; diff --git a/src/plugins/cppeditor/cppprojectupdater.cpp b/src/plugins/cppeditor/cppprojectupdater.cpp index a784d3bb79..cb64ea61bc 100644 --- a/src/plugins/cppeditor/cppprojectupdater.cpp +++ b/src/plugins/cppeditor/cppprojectupdater.cpp @@ -49,12 +49,12 @@ void CppProjectUpdater::update(const ProjectUpdateInfo &projectUpdateInfo, using namespace ProjectExplorer; // Run the project info generator in a worker thread and continue if that one is finished. - const auto infoGenerator = [=](QFutureInterface<ProjectInfo::ConstPtr> &futureInterface) { + const auto infoGenerator = [=](QPromise<ProjectInfo::ConstPtr> &promise) { ProjectUpdateInfo fullProjectUpdateInfo = projectUpdateInfo; if (fullProjectUpdateInfo.rppGenerator) fullProjectUpdateInfo.rawProjectParts = fullProjectUpdateInfo.rppGenerator(); - Internal::ProjectInfoGenerator generator(futureInterface, fullProjectUpdateInfo); - futureInterface.reportResult(generator.generate()); + Internal::ProjectInfoGenerator generator(fullProjectUpdateInfo); + promise.addResult(generator.generate(promise)); }; using namespace Tasking; @@ -63,7 +63,7 @@ void CppProjectUpdater::update(const ProjectUpdateInfo &projectUpdateInfo, }; const TreeStorage<UpdateStorage> storage; const auto setupInfoGenerator = [=](AsyncTask<ProjectInfo::ConstPtr> &async) { - async.setAsyncCallData(infoGenerator); + async.setConcurrentCallData(infoGenerator); async.setFutureSynchronizer(&m_futureSynchronizer); }; const auto onInfoGeneratorDone = [=](const AsyncTask<ProjectInfo::ConstPtr> &async) { diff --git a/src/plugins/cppeditor/projectinfo_test.cpp b/src/plugins/cppeditor/projectinfo_test.cpp index 73254647f5..88115e2ea4 100644 --- a/src/plugins/cppeditor/projectinfo_test.cpp +++ b/src/plugins/cppeditor/projectinfo_test.cpp @@ -362,12 +362,12 @@ public: ProjectInfo::ConstPtr generate() { - QFutureInterface<ProjectInfo::ConstPtr> fi; + QPromise<ProjectInfo::ConstPtr> promise; projectUpdateInfo.rawProjectParts += rawProjectPart; - ProjectInfoGenerator generator(fi, projectUpdateInfo); + ProjectInfoGenerator generator(projectUpdateInfo); - return generator.generate(); + return generator.generate(promise); } ProjectUpdateInfo projectUpdateInfo; |
