From 8285c857251977a8ff6c9b44bbeac794ff1dfa2e Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Sun, 12 Feb 2023 01:31:47 +0100 Subject: [PATCH] Autotest: Use QPromise for async calls Change-Id: I57d2feed36eeb1871b2b00cf7720c48f6a0e81b5 Reviewed-by: Christian Stenger Reviewed-by: Qt CI Bot Reviewed-by: --- .../autotest/boost/boosttestparser.cpp | 4 ++-- src/plugins/autotest/boost/boosttestparser.h | 2 +- .../autotest/catch/catchtestparser.cpp | 4 ++-- src/plugins/autotest/catch/catchtestparser.h | 2 +- src/plugins/autotest/gtest/gtestparser.cpp | 4 ++-- src/plugins/autotest/gtest/gtestparser.h | 2 +- src/plugins/autotest/itestparser.h | 6 +++--- src/plugins/autotest/qtest/qttestparser.cpp | 4 ++-- src/plugins/autotest/qtest/qttestparser.h | 2 +- .../autotest/quick/quicktestparser.cpp | 21 ++++++++----------- src/plugins/autotest/quick/quicktestparser.h | 4 ++-- src/plugins/autotest/testcodeparser.cpp | 8 +++---- 12 files changed, 30 insertions(+), 33 deletions(-) diff --git a/src/plugins/autotest/boost/boosttestparser.cpp b/src/plugins/autotest/boost/boosttestparser.cpp index bbf6dfd56ce..74c463244b9 100644 --- a/src/plugins/autotest/boost/boosttestparser.cpp +++ b/src/plugins/autotest/boost/boosttestparser.cpp @@ -96,7 +96,7 @@ static BoostTestParseResult *createParseResult(const QString &name, const FilePa } -bool BoostTestParser::processDocument(QFutureInterface &futureInterface, +bool BoostTestParser::processDocument(QPromise &promise, const FilePath &fileName) { CPlusPlus::Document::Ptr doc = document(fileName); @@ -148,7 +148,7 @@ bool BoostTestParser::processDocument(QFutureInterface &futu locationAndType.m_type, tmpInfo); currentSuite->children.append(funcResult); - futureInterface.reportResult(TestParseResultPtr(topLevelSuite)); + promise.addResult(TestParseResultPtr(topLevelSuite)); } } return true; diff --git a/src/plugins/autotest/boost/boosttestparser.h b/src/plugins/autotest/boost/boosttestparser.h index 049f42d0c93..3ea67815c95 100644 --- a/src/plugins/autotest/boost/boosttestparser.h +++ b/src/plugins/autotest/boost/boosttestparser.h @@ -22,7 +22,7 @@ class BoostTestParser : public CppParser { public: explicit BoostTestParser(ITestFramework *framework) : CppParser(framework) {} - bool processDocument(QFutureInterface &futureInterface, + bool processDocument(QPromise &promise, const Utils::FilePath &fileName) override; }; diff --git a/src/plugins/autotest/catch/catchtestparser.cpp b/src/plugins/autotest/catch/catchtestparser.cpp index dd01c01c90b..9198e41342b 100644 --- a/src/plugins/autotest/catch/catchtestparser.cpp +++ b/src/plugins/autotest/catch/catchtestparser.cpp @@ -91,7 +91,7 @@ static bool hasCatchNames(const CPlusPlus::Document::Ptr &document) return false; } -bool CatchTestParser::processDocument(QFutureInterface &futureInterface, +bool CatchTestParser::processDocument(QPromise &promise, const FilePath &fileName) { CPlusPlus::Document::Ptr doc = document(fileName); @@ -144,7 +144,7 @@ bool CatchTestParser::processDocument(QFutureInterface &futu parseResult->children.append(testCase); } - futureInterface.reportResult(TestParseResultPtr(parseResult)); + promise.addResult(TestParseResultPtr(parseResult)); return !foundTests.isEmpty(); } diff --git a/src/plugins/autotest/catch/catchtestparser.h b/src/plugins/autotest/catch/catchtestparser.h index 6159ff58133..8b72073204b 100644 --- a/src/plugins/autotest/catch/catchtestparser.h +++ b/src/plugins/autotest/catch/catchtestparser.h @@ -23,7 +23,7 @@ class CatchTestParser : public CppParser public: CatchTestParser(ITestFramework *framework) : CppParser(framework) {} - bool processDocument(QFutureInterface &futureInterface, + bool processDocument(QPromise &promise, const Utils::FilePath &fileName) override; }; diff --git a/src/plugins/autotest/gtest/gtestparser.cpp b/src/plugins/autotest/gtest/gtestparser.cpp index aa59bb94c2e..7e3f987905b 100644 --- a/src/plugins/autotest/gtest/gtestparser.cpp +++ b/src/plugins/autotest/gtest/gtestparser.cpp @@ -70,7 +70,7 @@ static bool hasGTestNames(const CPlusPlus::Document::Ptr &document) return false; } -bool GTestParser::processDocument(QFutureInterface &futureInterface, +bool GTestParser::processDocument(QPromise &promise, const FilePath &fileName) { CPlusPlus::Document::Ptr doc = document(fileName); @@ -124,7 +124,7 @@ bool GTestParser::processDocument(QFutureInterface &futureIn parseResult->children.append(testSet); } - futureInterface.reportResult(TestParseResultPtr(parseResult)); + promise.addResult(TestParseResultPtr(parseResult)); } return !result.isEmpty(); } diff --git a/src/plugins/autotest/gtest/gtestparser.h b/src/plugins/autotest/gtest/gtestparser.h index 665a8a496c2..52febe6b890 100644 --- a/src/plugins/autotest/gtest/gtestparser.h +++ b/src/plugins/autotest/gtest/gtestparser.h @@ -22,7 +22,7 @@ class GTestParser : public CppParser { public: explicit GTestParser(ITestFramework *framework) : CppParser(framework) {} - bool processDocument(QFutureInterface &futureInterface, + bool processDocument(QPromise &futureInterface, const Utils::FilePath &fileName) override; }; diff --git a/src/plugins/autotest/itestparser.h b/src/plugins/autotest/itestparser.h index 7e16a61b90d..24b132c610c 100644 --- a/src/plugins/autotest/itestparser.h +++ b/src/plugins/autotest/itestparser.h @@ -9,9 +9,9 @@ #include #include -#include - QT_BEGIN_NAMESPACE +template +class QPromise; class QRegularExpression; QT_END_NAMESPACE @@ -46,7 +46,7 @@ public: explicit ITestParser(ITestFramework *framework) : m_framework(framework) {} virtual ~ITestParser() { } virtual void init(const Utils::FilePaths &filesToParse, bool fullParse) = 0; - virtual bool processDocument(QFutureInterface &futureInterface, + virtual bool processDocument(QPromise &futureInterface, const Utils::FilePath &fileName) = 0; virtual QStringList supportedExtensions() const { return {}; } diff --git a/src/plugins/autotest/qtest/qttestparser.cpp b/src/plugins/autotest/qtest/qttestparser.cpp index 2b13133f03f..ece94f82474 100644 --- a/src/plugins/autotest/qtest/qttestparser.cpp +++ b/src/plugins/autotest/qtest/qttestparser.cpp @@ -292,7 +292,7 @@ static bool isQObject(const CPlusPlus::Document::Ptr &declaringDoc) || file.endsWith("QtCore/qobject.h") || file.endsWith("kernel/qobject.h"); } -bool QtTestParser::processDocument(QFutureInterface &futureInterface, +bool QtTestParser::processDocument(QPromise &promise, const FilePath &fileName) { CPlusPlus::Document::Ptr doc = document(fileName); @@ -325,7 +325,7 @@ bool QtTestParser::processDocument(QFutureInterface &futureI data.multipleTestCases = testCase.multipleTestCases; QtTestParseResult *parseResult = createParseResult(testCase.name, data, projectParts.first()->projectFile); - futureInterface.reportResult(TestParseResultPtr(parseResult)); + promise.addResult(TestParseResultPtr(parseResult)); reported = true; } } diff --git a/src/plugins/autotest/qtest/qttestparser.h b/src/plugins/autotest/qtest/qttestparser.h index db677929ec8..9dafcdc77e1 100644 --- a/src/plugins/autotest/qtest/qttestparser.h +++ b/src/plugins/autotest/qtest/qttestparser.h @@ -36,7 +36,7 @@ public: void init(const Utils::FilePaths &filesToParse, bool fullParse) override; void release() override; - bool processDocument(QFutureInterface &futureInterface, + bool processDocument(QPromise &promise, const Utils::FilePath &fileName) override; private: diff --git a/src/plugins/autotest/quick/quicktestparser.cpp b/src/plugins/autotest/quick/quicktestparser.cpp index 2c72cdf3f1a..f5b79d8075c 100644 --- a/src/plugins/autotest/quick/quicktestparser.cpp +++ b/src/plugins/autotest/quick/quicktestparser.cpp @@ -196,7 +196,7 @@ QList QuickTestParser::scanDirectoryForQuickTestQmlFiles(const Fi return foundDocs; } -static bool checkQmlDocumentForQuickTestCode(QFutureInterface &futureInterface, +static bool checkQmlDocumentForQuickTestCode(QPromise &promise, const Document::Ptr &qmlJSDoc, ITestFramework *framework, const FilePath &proFile = {}, @@ -240,12 +240,12 @@ static bool checkQmlDocumentForQuickTestCode(QFutureInterfacechildren.append(funcResult); } - futureInterface.reportResult(TestParseResultPtr(parseResult)); + promise.addResult(TestParseResultPtr(parseResult)); } return true; } -bool QuickTestParser::handleQtQuickTest(QFutureInterface &futureInterface, +bool QuickTestParser::handleQtQuickTest(QPromise &promise, CPlusPlus::Document::Ptr document, ITestFramework *framework) { @@ -263,17 +263,14 @@ bool QuickTestParser::handleQtQuickTest(QFutureInterface &fu if (srcDir.isEmpty()) return false; - if (futureInterface.isCanceled()) + if (promise.isCanceled()) return false; const QList qmlDocs = scanDirectoryForQuickTestQmlFiles(srcDir); bool result = false; for (const Document::Ptr &qmlJSDoc : qmlDocs) { - if (futureInterface.isCanceled()) + if (promise.isCanceled()) break; - result |= checkQmlDocumentForQuickTestCode(futureInterface, - qmlJSDoc, - framework, - proFile, + result |= checkQmlDocumentForQuickTestCode(promise, qmlJSDoc, framework, proFile, m_checkForDerivedTests); } return result; @@ -370,7 +367,7 @@ void QuickTestParser::release() CppParser::release(); } -bool QuickTestParser::processDocument(QFutureInterface &futureInterface, +bool QuickTestParser::processDocument(QPromise &promise, const FilePath &fileName) { if (fileName.endsWith(".qml")) { @@ -378,7 +375,7 @@ bool QuickTestParser::processDocument(QFutureInterface &futu if (proFile.isEmpty()) return false; Document::Ptr qmlJSDoc = m_qmlSnapshot.document(fileName); - return checkQmlDocumentForQuickTestCode(futureInterface, + return checkQmlDocumentForQuickTestCode(promise, qmlJSDoc, framework(), proFile, @@ -389,7 +386,7 @@ bool QuickTestParser::processDocument(QFutureInterface &futu if (cppdoc.isNull() || !includesQtQuickTest(cppdoc, m_cppSnapshot)) return false; - return handleQtQuickTest(futureInterface, cppdoc, framework()); + return handleQtQuickTest(promise, cppdoc, framework()); } FilePath QuickTestParser::projectFileForMainCppFile(const FilePath &fileName) const diff --git a/src/plugins/autotest/quick/quicktestparser.h b/src/plugins/autotest/quick/quicktestparser.h index c0fbc5a3e83..bf3727feca3 100644 --- a/src/plugins/autotest/quick/quicktestparser.h +++ b/src/plugins/autotest/quick/quicktestparser.h @@ -26,13 +26,13 @@ public: explicit QuickTestParser(ITestFramework *framework); void init(const Utils::FilePaths &filesToParse, bool fullParse) override; void release() override; - bool processDocument(QFutureInterface &futureInterface, + bool processDocument(QPromise &promise, const Utils::FilePath &fileName) override; Utils::FilePath projectFileForMainCppFile(const Utils::FilePath &fileName) const; QStringList supportedExtensions() const override { return {"qml"}; }; private: - bool handleQtQuickTest(QFutureInterface &futureInterface, + bool handleQtQuickTest(QPromise &promise, CPlusPlus::Document::Ptr document, ITestFramework *framework); void handleDirectoryChanged(const QString &directory); diff --git a/src/plugins/autotest/testcodeparser.cpp b/src/plugins/autotest/testcodeparser.cpp index 69e90e9ac97..a42f3aa77d4 100644 --- a/src/plugins/autotest/testcodeparser.cpp +++ b/src/plugins/autotest/testcodeparser.cpp @@ -254,13 +254,13 @@ bool TestCodeParser::postponed(const FilePaths &fileList) QTC_ASSERT(false, return false); // should not happen at all } -static void parseFileForTests(QFutureInterface &futureInterface, +static void parseFileForTests(QPromise &promise, const QList &parsers, const FilePath &fileName) { for (ITestParser *parser : parsers) { - if (futureInterface.isCanceled()) + if (promise.isCanceled()) return; - if (parser->processDocument(futureInterface, fileName)) + if (parser->processDocument(promise, fileName)) break; } } @@ -359,7 +359,7 @@ void TestCodeParser::scanForTests(const FilePaths &fileList, const QList tasks{parallel}; // TODO: use ParallelLimit(N) and add to settings? for (const FilePath &file : filteredList) { const auto setup = [this, codeParsers, file](AsyncTask &async) { - async.setAsyncCallData(parseFileForTests, codeParsers, file); + async.setConcurrentCallData(parseFileForTests, codeParsers, file); async.setThreadPool(m_threadPool); async.setPriority(QThread::LowestPriority); async.setFutureSynchronizer(&m_futureSynchronizer);