diff --git a/src/plugins/cppeditor/cppprojectinfogenerator.cpp b/src/plugins/cppeditor/cppprojectinfogenerator.cpp index fe077bd3771..5c4c03de4cc 100644 --- a/src/plugins/cppeditor/cppprojectinfogenerator.cpp +++ b/src/plugins/cppeditor/cppprojectinfogenerator.cpp @@ -10,30 +10,24 @@ #include #include -#include - +#include #include -#include - using namespace ProjectExplorer; using namespace Utils; namespace CppEditor::Internal { -ProjectInfoGenerator::ProjectInfoGenerator( - const QFutureInterface &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 &promise) { QVector 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 c090974c042..8720d3e1cd2 100644 --- a/src/plugins/cppeditor/cppprojectinfogenerator.h +++ b/src/plugins/cppeditor/cppprojectinfogenerator.h @@ -5,17 +5,19 @@ #include "projectinfo.h" -#include +QT_BEGIN_NAMESPACE +template +class QPromise; +QT_END_NAMESPACE namespace CppEditor::Internal { class ProjectInfoGenerator { public: - ProjectInfoGenerator(const QFutureInterface &futureInterface, - const ProjectExplorer::ProjectUpdateInfo &projectUpdateInfo); + ProjectInfoGenerator(const ProjectExplorer::ProjectUpdateInfo &projectUpdateInfo); - ProjectInfo::ConstPtr generate(); + ProjectInfo::ConstPtr generate(const QPromise &promise); private: const QVector createProjectParts( @@ -29,7 +31,6 @@ private: Utils::LanguageExtensions languageExtensions); private: - const QFutureInterface 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 a784d3bb794..cb64ea61bc8 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 &futureInterface) { + const auto infoGenerator = [=](QPromise &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 storage; const auto setupInfoGenerator = [=](AsyncTask &async) { - async.setAsyncCallData(infoGenerator); + async.setConcurrentCallData(infoGenerator); async.setFutureSynchronizer(&m_futureSynchronizer); }; const auto onInfoGeneratorDone = [=](const AsyncTask &async) { diff --git a/src/plugins/cppeditor/projectinfo_test.cpp b/src/plugins/cppeditor/projectinfo_test.cpp index 73254647f5e..88115e2ea4f 100644 --- a/src/plugins/cppeditor/projectinfo_test.cpp +++ b/src/plugins/cppeditor/projectinfo_test.cpp @@ -362,12 +362,12 @@ public: ProjectInfo::ConstPtr generate() { - QFutureInterface fi; + QPromise promise; projectUpdateInfo.rawProjectParts += rawProjectPart; - ProjectInfoGenerator generator(fi, projectUpdateInfo); + ProjectInfoGenerator generator(projectUpdateInfo); - return generator.generate(); + return generator.generate(promise); } ProjectUpdateInfo projectUpdateInfo;