diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index b9c048764ed..95b634a8f36 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -1194,7 +1194,7 @@ QmakeProFile::~QmakeProFile() void QmakeProFile::setupFutureWatcher() { - m_parseFutureWatcher = new QFutureWatcher; + m_parseFutureWatcher = new QFutureWatcher; QObject::connect(m_parseFutureWatcher, &QFutureWatcherBase::finished, [this]() { applyAsyncEvaluate(true); }); @@ -1292,10 +1292,10 @@ void QmakeProFile::asyncUpdate() m_readerExact->setExact(false); m_parseFutureWatcher->waitForFinished(); QmakeEvalInput input = evalInput(); - QFuture future = Utils::runAsync(ProjectExplorerPlugin::sharedThreadPool(), - QThread::LowestPriority, - &QmakeProFile::asyncEvaluate, - this, input); + QFuture future = Utils::runAsync(ProjectExplorerPlugin::sharedThreadPool(), + QThread::LowestPriority, + &QmakeProFile::asyncEvaluate, + this, input); m_parseFutureWatcher->setFuture(future); } @@ -1375,9 +1375,9 @@ static bool evaluateOne(const QmakeEvalInput &input, ProFile *pro, return true; } -QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input) +QmakeEvalResultPtr QmakeProFile::evaluate(const QmakeEvalInput &input) { - auto *result = new QmakeEvalResult; + QmakeEvalResultPtr result(new QmakeEvalResult); QtSupport::ProFileReader *exactBuildPassReader = nullptr; QtSupport::ProFileReader *cumulativeBuildPassReader = nullptr; ProFile *pro; @@ -1635,10 +1635,9 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input) return result; } -void QmakeProFile::asyncEvaluate(QFutureInterface &fi, QmakeEvalInput input) +void QmakeProFile::asyncEvaluate(QFutureInterface &fi, QmakeEvalInput input) { - QmakeEvalResult *evalResult = evaluate(input); - fi.reportResult(evalResult); + fi.reportResult(evaluate(input)); } void QmakeProFile::applyAsyncEvaluate(bool apply) @@ -1653,9 +1652,8 @@ bool sortByParserNodes(Node *a, Node *b) return a->filePath() < b->filePath(); } -void QmakeProFile::applyEvaluate(QmakeEvalResult *evalResult) +void QmakeProFile::applyEvaluate(const QmakeEvalResultPtr &result) { - QScopedPointer result(evalResult); if (!m_readerExact) return; @@ -1664,7 +1662,7 @@ void QmakeProFile::applyEvaluate(QmakeEvalResult *evalResult) return; } - foreach (const QString &error, evalResult->errors) + foreach (const QString &error, result->errors) QmakeBuildSystem::proFileParseError(error, filePath()); // we are changing what is executed in that case diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index 9a4a22690e2..a894a11cc4c 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -116,6 +116,7 @@ namespace Internal { Q_DECLARE_LOGGING_CATEGORY(qmakeNodesLog) class QmakeEvalInput; class QmakeEvalResult; +using QmakeEvalResultPtr = std::shared_ptr; // FIXME: Use unique_ptr once we require Qt 6 class QmakePriFileEvalResult; } // namespace Internal; @@ -358,10 +359,11 @@ private: void setupReader(); Internal::QmakeEvalInput evalInput() const; - static Internal::QmakeEvalResult *evaluate(const Internal::QmakeEvalInput &input); - void applyEvaluate(Internal::QmakeEvalResult *parseResult); + static Internal::QmakeEvalResultPtr evaluate(const Internal::QmakeEvalInput &input); + void applyEvaluate(const Internal::QmakeEvalResultPtr &parseResult); - void asyncEvaluate(QFutureInterface &fi, Internal::QmakeEvalInput input); + void asyncEvaluate(QFutureInterface &fi, + Internal::QmakeEvalInput input); void cleanupProFileReaders(); void updateGeneratedFiles(const Utils::FilePath &buildDir); @@ -400,7 +402,7 @@ private: QMap m_wildcardDirectoryContents; // Async stuff - QFutureWatcher *m_parseFutureWatcher = nullptr; + QFutureWatcher *m_parseFutureWatcher = nullptr; QtSupport::ProFileReader *m_readerExact = nullptr; QtSupport::ProFileReader *m_readerCumulative = nullptr; };