forked from qt-creator/qt-creator
CMakeProjectManager: Use QtConcurrent invocation for async run
Change-Id: I03b23a6bd32bfaa435ddddab1a7ab47a5203ff44 Reviewed-by: Cristian Adam <cristian.adam@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QLoggingCategory>
|
||||
#include <QPromise>
|
||||
|
||||
using namespace Utils;
|
||||
|
||||
@@ -825,7 +826,7 @@ static QStringList uniqueTargetFiles(const Configuration &config)
|
||||
return files;
|
||||
}
|
||||
|
||||
FileApiData FileApiParser::parseData(QFutureInterface<std::shared_ptr<FileApiQtcData>> &fi,
|
||||
FileApiData FileApiParser::parseData(QPromise<std::shared_ptr<FileApiQtcData>> &promise,
|
||||
const FilePath &replyFilePath,
|
||||
const QString &cmakeBuildType,
|
||||
QString &errorMessage)
|
||||
@@ -836,8 +837,8 @@ FileApiData FileApiParser::parseData(QFutureInterface<std::shared_ptr<FileApiQtc
|
||||
|
||||
FileApiData result;
|
||||
|
||||
const auto cancelCheck = [&fi, &errorMessage] {
|
||||
if (fi.isCanceled()) {
|
||||
const auto cancelCheck = [&promise, &errorMessage] {
|
||||
if (promise.isCanceled()) {
|
||||
errorMessage = Tr::tr("CMake parsing was canceled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -14,13 +14,17 @@
|
||||
#include <utils/fileutils.h>
|
||||
|
||||
#include <QDir>
|
||||
#include <QFutureInterface>
|
||||
#include <QString>
|
||||
#include <QVector>
|
||||
#include <QVersionNumber>
|
||||
|
||||
#include <vector>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
template <typename Ret>
|
||||
class QPromise;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace CMakeProjectManager::Internal {
|
||||
|
||||
namespace FileApiDetails {
|
||||
@@ -218,7 +222,7 @@ public:
|
||||
class FileApiParser
|
||||
{
|
||||
public:
|
||||
static FileApiData parseData(QFutureInterface<std::shared_ptr<FileApiQtcData>> &fi,
|
||||
static FileApiData parseData(QPromise<std::shared_ptr<FileApiQtcData>> &promise,
|
||||
const Utils::FilePath &replyFilePath,
|
||||
const QString &cmakeBuildType,
|
||||
QString &errorMessage);
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
|
||||
#include "cmakeprocess.h"
|
||||
#include "cmakeprojectmanagertr.h"
|
||||
#include "cmakeprojectplugin.h"
|
||||
#include "cmakespecificsettings.h"
|
||||
#include "fileapidataextractor.h"
|
||||
#include "fileapiparser.h"
|
||||
@@ -15,6 +14,7 @@
|
||||
#include <projectexplorer/projectexplorer.h>
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/asynctask.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <utils/runextensions.h>
|
||||
|
||||
@@ -235,11 +235,11 @@ void FileApiReader::endState(const FilePath &replyFilePath, bool restoredFromBac
|
||||
|
||||
m_lastReplyTimestamp = replyFilePath.lastModified();
|
||||
|
||||
m_future = runAsync(ProjectExplorerPlugin::sharedThreadPool(),
|
||||
m_future = Utils::asyncRun(ProjectExplorerPlugin::sharedThreadPool(),
|
||||
[replyFilePath, sourceDirectory, buildDirectory, cmakeBuildType](
|
||||
QFutureInterface<std::shared_ptr<FileApiQtcData>> &fi) {
|
||||
QPromise<std::shared_ptr<FileApiQtcData>> &promise) {
|
||||
auto result = std::make_shared<FileApiQtcData>();
|
||||
FileApiData data = FileApiParser::parseData(fi,
|
||||
FileApiData data = FileApiParser::parseData(promise,
|
||||
replyFilePath,
|
||||
cmakeBuildType,
|
||||
result->errorMessage);
|
||||
@@ -248,7 +248,7 @@ void FileApiReader::endState(const FilePath &replyFilePath, bool restoredFromBac
|
||||
else
|
||||
qWarning() << result->errorMessage;
|
||||
|
||||
fi.reportResult(result);
|
||||
promise.addResult(result);
|
||||
});
|
||||
onResultReady(m_future.value(),
|
||||
this,
|
||||
|
||||
Reference in New Issue
Block a user