summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2023-02-12 02:08:11 +0100
committerJarek Kobus <jaroslaw.kobus@qt.io>2023-03-10 10:04:51 +0000
commit62489e49f8478f7cc3b8d68e5ecc5dd13a1282ea (patch)
treea5f4ac0fe13e0cae964d7ac18327cd19a95e94bf
parent8240333f969ff1707997e080733d7f83b2385fc0 (diff)
downloadqt-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.cpp16
-rw-r--r--src/plugins/cppeditor/cppprojectinfogenerator.h11
-rw-r--r--src/plugins/cppeditor/cppprojectupdater.cpp8
-rw-r--r--src/plugins/cppeditor/projectinfo_test.cpp6
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;