TaskTree: Introduce GroupItems

A shortcut for QList<GroupItem>.

Change-Id: I7428a5313a825e892d66964748ff4f7906378d28
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2024-09-19 17:50:30 +02:00
parent 55c6007bfe
commit 13a7d00be7
12 changed files with 40 additions and 32 deletions

View File

@@ -28,7 +28,7 @@ static ExecutableItem conditionsRecipe(const QList<ConditionData> &conditions)
{ {
Storage<bool> bodyExecutedStorage; Storage<bool> bodyExecutedStorage;
QList<GroupItem> recipes; GroupItems recipes;
for (const ConditionData &condition : conditions) for (const ConditionData &condition : conditions)
recipes << conditionRecipe(bodyExecutedStorage, condition); recipes << conditionRecipe(bodyExecutedStorage, condition);

View File

@@ -51,7 +51,7 @@ private:
class TASKING_EXPORT Else class TASKING_EXPORT Else
{ {
public: public:
explicit Else(const QList<GroupItem> &children) : m_body({children}) {} explicit Else(const GroupItems &children) : m_body({children}) {}
explicit Else(std::initializer_list<GroupItem> children) : m_body({children}) {} explicit Else(std::initializer_list<GroupItem> children) : m_body({children}) {}
private: private:
@@ -62,7 +62,7 @@ private:
class TASKING_EXPORT Then class TASKING_EXPORT Then
{ {
public: public:
explicit Then(const QList<GroupItem> &children) : m_body({children}) {} explicit Then(const GroupItems &children) : m_body({children}) {}
explicit Then(std::initializer_list<GroupItem> children) : m_body({children}) {} explicit Then(std::initializer_list<GroupItem> children) : m_body({children}) {}
private: private:

View File

@@ -319,6 +319,12 @@ private:
\sa operator->(), operator*() \sa operator->(), operator*()
*/ */
/*!
\typealias GroupItems
Type alias for QList<GroupItem>.
*/
/*! /*!
\class Tasking::GroupItem \class Tasking::GroupItem
\inheaderfile solutions/tasking/tasktree.h \inheaderfile solutions/tasking/tasktree.h
@@ -383,7 +389,7 @@ private:
*/ */
/*! /*!
\fn GroupItem::GroupItem(const QList<GroupItem> &items) \fn GroupItem::GroupItem(const GroupItems &items)
Constructs a \c GroupItem element with a given list of \a items. Constructs a \c GroupItem element with a given list of \a items.
@@ -419,7 +425,7 @@ private:
/*! /*!
\fn GroupItem::GroupItem(std::initializer_list<GroupItem> items) \fn GroupItem::GroupItem(std::initializer_list<GroupItem> items)
\overload \overload
\sa GroupItem(const QList<Tasking::GroupItem> &items) \sa GroupItem(const GroupItems &items)
*/ */
/*! /*!
@@ -508,7 +514,7 @@ private:
*/ */
/*! /*!
\fn Group::Group(const QList<GroupItem> &children) \fn Group::Group(const GroupItems &children)
Constructs a group with a given list of \a children. Constructs a group with a given list of \a children.
@@ -518,7 +524,7 @@ private:
\code \code
const QStringList sourceList = ...; const QStringList sourceList = ...;
QList<GroupItem> groupItems { parallel }; GroupItems groupItems { parallel };
for (const QString &source : sourceList) { for (const QString &source : sourceList) {
const NetworkQueryTask task(...); // use source for setup handler const NetworkQueryTask task(...); // use source for setup handler
@@ -1446,7 +1452,7 @@ void *StorageBase::activeStorageVoid() const
return m_storageData->threadData().activeStorage(); return m_storageData->threadData().activeStorage();
} }
void GroupItem::addChildren(const QList<GroupItem> &children) void GroupItem::addChildren(const GroupItems &children)
{ {
QT_ASSERT(m_type == Type::Group || m_type == Type::List, QT_ASSERT(m_type == Type::Group || m_type == Type::List,
qWarning("Only Group or List may have children, skipping..."); return); qWarning("Only Group or List may have children, skipping..."); return);
@@ -2110,7 +2116,7 @@ void RuntimeIteration::deleteChild(RuntimeTask *task)
} }
static std::vector<TaskNode> createChildren(TaskTreePrivate *taskTreePrivate, static std::vector<TaskNode> createChildren(TaskTreePrivate *taskTreePrivate,
const QList<GroupItem> &children) const GroupItems &children)
{ {
std::vector<TaskNode> result; std::vector<TaskNode> result;
result.reserve(children.size()); result.reserve(children.size());

View File

@@ -18,6 +18,12 @@ class QFuture;
namespace Tasking { namespace Tasking {
class Do;
class For;
class Group;
class GroupItem;
using GroupItems = QList<GroupItem>;
Q_NAMESPACE_EXPORT(TASKING_EXPORT) Q_NAMESPACE_EXPORT(TASKING_EXPORT)
// WorkflowPolicy: // WorkflowPolicy:
@@ -196,10 +202,6 @@ private:
} }
}; };
class Do;
class For;
class Group;
class TASKING_EXPORT GroupItem class TASKING_EXPORT GroupItem
{ {
public: public:
@@ -214,7 +216,7 @@ public:
, m_storageList{storage} {} , m_storageList{storage} {}
// TODO: Add tests. // TODO: Add tests.
GroupItem(const QList<GroupItem> &children) : m_type(Type::List) { addChildren(children); } GroupItem(const GroupItems &children) : m_type(Type::List) { addChildren(children); }
GroupItem(std::initializer_list<GroupItem> children) : m_type(Type::List) { addChildren(children); } GroupItem(std::initializer_list<GroupItem> children) : m_type(Type::List) { addChildren(children); }
protected: protected:
@@ -262,7 +264,7 @@ protected:
GroupItem(const TaskHandler &handler) GroupItem(const TaskHandler &handler)
: m_type(Type::TaskHandler) : m_type(Type::TaskHandler)
, m_taskHandler(handler) {} , m_taskHandler(handler) {}
void addChildren(const QList<GroupItem> &children); void addChildren(const GroupItems &children);
static GroupItem groupHandler(const GroupHandler &handler) { return GroupItem({handler}); } static GroupItem groupHandler(const GroupHandler &handler) { return GroupItem({handler}); }
@@ -285,7 +287,7 @@ private:
friend class ParallelLimitFunctor; friend class ParallelLimitFunctor;
friend class WorkflowPolicyFunctor; friend class WorkflowPolicyFunctor;
Type m_type = Type::Group; Type m_type = Type::Group;
QList<GroupItem> m_children; GroupItems m_children;
GroupData m_groupData; GroupData m_groupData;
QList<StorageBase> m_storageList; QList<StorageBase> m_storageList;
TaskHandler m_taskHandler; TaskHandler m_taskHandler;
@@ -329,7 +331,7 @@ private:
class TASKING_EXPORT Group : public ExecutableItem class TASKING_EXPORT Group : public ExecutableItem
{ {
public: public:
Group(const QList<GroupItem> &children) { addChildren(children); } Group(const GroupItems &children) { addChildren(children); }
Group(std::initializer_list<GroupItem> children) { addChildren(children); } Group(std::initializer_list<GroupItem> children) { addChildren(children); }
// GroupData related: // GroupData related:
@@ -453,7 +455,7 @@ private:
class TASKING_EXPORT Do final class TASKING_EXPORT Do final
{ {
public: public:
explicit Do(const QList<GroupItem> &children) : m_children(children) {} explicit Do(const GroupItems &children) : m_children(children) {}
explicit Do(std::initializer_list<GroupItem> children) : m_children(children) {} explicit Do(std::initializer_list<GroupItem> children) : m_children(children) {}
private: private:
@@ -465,7 +467,7 @@ private:
class TASKING_EXPORT Forever final : public ExecutableItem class TASKING_EXPORT Forever final : public ExecutableItem
{ {
public: public:
explicit Forever(const QList<GroupItem> &children) explicit Forever(const GroupItems &children)
{ addChildren({ For (LoopForever()) >> Do { children } } ); } { addChildren({ For (LoopForever()) >> Do { children } } ); }
explicit Forever(std::initializer_list<GroupItem> children) explicit Forever(std::initializer_list<GroupItem> children)
{ addChildren({ For (LoopForever()) >> Do { children } } ); } { addChildren({ For (LoopForever()) >> Do { children } } ); }

View File

@@ -682,7 +682,7 @@ Group ClangTool::runRecipe(const RunSettings &runSettings,
return SetupResult::StopWithError; return SetupResult::StopWithError;
}; };
QList<GroupItem> topTasks { onGroupSetup(onTopSetup) }; GroupItems topTasks { onGroupSetup(onTopSetup) };
if (buildBeforeAnalysis) { if (buildBeforeAnalysis) {
QPointer<RunControl> runControl(m_runControl); QPointer<RunControl> runControl(m_runControl);

View File

@@ -193,7 +193,7 @@ void DocumentClangToolRunner::run()
vfso().update(); vfso().update();
const ClangDiagnosticConfig config = diagnosticConfig(runSettings.diagnosticConfigId()); const ClangDiagnosticConfig config = diagnosticConfig(runSettings.diagnosticConfigId());
const Environment env = projectBuildEnvironment(project); const Environment env = projectBuildEnvironment(project);
QList<GroupItem> tasks; GroupItems tasks;
const auto addClangTool = [this, &runSettings, &config, &env, &tasks](ClangToolType tool) { const auto addClangTool = [this, &runSettings, &config, &env, &tasks](ClangToolType tool) {
if (!toolEnabled(tool, config, runSettings)) if (!toolEnabled(tool, config, runSettings))
return; return;

View File

@@ -402,7 +402,7 @@ void Locator::refresh(const QList<ILocatorFilter *> &filters)
saveSettings(); saveSettings();
}; };
QList<GroupItem> tasks{parallel}; GroupItems tasks{parallel};
for (ILocatorFilter *filter : std::as_const(m_refreshingFilters)) { for (ILocatorFilter *filter : std::as_const(m_refreshingFilters)) {
const auto task = filter->refreshRecipe(); const auto task = filter->refreshRecipe();
if (!task.has_value()) if (!task.has_value())

View File

@@ -72,7 +72,7 @@ void CppProjectUpdater::update(const ProjectUpdateInfo &projectUpdateInfo,
if (async.isResultAvailable()) if (async.isResultAvailable())
storage->projectInfo = async.result(); storage->projectInfo = async.result();
}; };
QList<GroupItem> tasks{parallel}; GroupItems tasks{parallel};
tasks.append(AsyncTask<ProjectInfo::ConstPtr>(onInfoGeneratorSetup, onInfoGeneratorDone, tasks.append(AsyncTask<ProjectInfo::ConstPtr>(onInfoGeneratorSetup, onInfoGeneratorDone,
CallDoneIf::Success)); CallDoneIf::Success));
for (QPointer<ExtraCompiler> compiler : compilers) { for (QPointer<ExtraCompiler> compiler : compilers) {

View File

@@ -762,10 +762,10 @@ void BuildManager::startBuildQueue()
const GroupItem abortPolicy const GroupItem abortPolicy
= projectExplorerSettings().abortBuildAllOnError ? stopOnError : continueOnError; = projectExplorerSettings().abortBuildAllOnError ? stopOnError : continueOnError;
QList<GroupItem> topLevel { abortPolicy, ParserAwaiterTask(onAwaiterSetup) }; GroupItems topLevel { abortPolicy, ParserAwaiterTask(onAwaiterSetup) };
Project *lastProject = nullptr; Project *lastProject = nullptr;
Target *lastTarget = nullptr; Target *lastTarget = nullptr;
QList<GroupItem> targetTasks; GroupItems targetTasks;
d->m_progress = 0; d->m_progress = 0;
d->m_maxProgress = 0; d->m_maxProgress = 0;

View File

@@ -154,7 +154,7 @@ GroupItem GenericDirectUploadStep::statTree(const Storage<UploadStorage> &storag
const auto onSetup = [this, storage, filesToStat, statEndHandler](TaskTree &tree) { const auto onSetup = [this, storage, filesToStat, statEndHandler](TaskTree &tree) {
UploadStorage *storagePtr = storage.activeStorage(); UploadStorage *storagePtr = storage.activeStorage();
const QList<DeployableFile> files = filesToStat(storagePtr); const QList<DeployableFile> files = filesToStat(storagePtr);
QList<GroupItem> statList{finishAllAndSuccess, parallelLimit(MaxConcurrentStatCalls)}; GroupItems statList{finishAllAndSuccess, parallelLimit(MaxConcurrentStatCalls)};
for (const DeployableFile &file : std::as_const(files)) { for (const DeployableFile &file : std::as_const(files)) {
QTC_ASSERT(file.isValid(), continue); QTC_ASSERT(file.isValid(), continue);
statList.append(statTask(storagePtr, file, statEndHandler)); statList.append(statTask(storagePtr, file, statEndHandler));

View File

@@ -46,7 +46,7 @@ public:
LinuxDevice::Ptr m_device; LinuxDevice::Ptr m_device;
TaskTreeRunner m_taskTreeRunner; TaskTreeRunner m_taskTreeRunner;
QStringList m_extraCommands; QStringList m_extraCommands;
QList<GroupItem> m_extraTests; GroupItems m_extraTests;
}; };
QStringList GenericLinuxDeviceTesterPrivate::commandsToTest() const QStringList GenericLinuxDeviceTesterPrivate::commandsToTest() const
@@ -306,7 +306,7 @@ void GenericLinuxDeviceTester::setExtraCommandsToTest(const QStringList &extraCo
d->m_extraCommands = extraCommands; d->m_extraCommands = extraCommands;
} }
void GenericLinuxDeviceTester::setExtraTests(const QList<GroupItem> &extraTests) void GenericLinuxDeviceTester::setExtraTests(const GroupItems &extraTests)
{ {
d->m_extraTests = extraTests; d->m_extraTests = extraTests;
} }

View File

@@ -2735,7 +2735,7 @@ void tst_Tasking::testTree_data()
} }
{ {
const QList<GroupItem> successItems { const GroupItems successItems {
storage, storage,
createSuccessTask(1), createSuccessTask(1),
createSuccessTask(2) createSuccessTask(2)
@@ -2786,7 +2786,7 @@ void tst_Tasking::testTree_data()
{2, Handler::Success} {2, Handler::Success}
}; };
const QList<GroupItem> errorItems { const GroupItems errorItems {
storage, storage,
createSuccessTask(1), createSuccessTask(1),
createFailingTask(2) createFailingTask(2)
@@ -2871,7 +2871,7 @@ void tst_Tasking::testTree_data()
}; };
}; };
const QList<GroupItem> items { const GroupItems items {
storage, storage,
TestTask(onSetupContinue(1), onDone(1)), TestTask(onSetupContinue(1), onDone(1)),
TestTask(onSetupStop(2), onDone(2)) TestTask(onSetupStop(2), onDone(2))
@@ -3982,7 +3982,7 @@ void tst_Tasking::testInThread()
QCOMPARE(result.executeCount, s_loopCount); QCOMPARE(result.executeCount, s_loopCount);
}; };
QList<GroupItem> tasks = { parallel }; GroupItems tasks = { parallel };
for (int i = 0; i < s_threadCount; ++i) for (int i = 0; i < s_threadCount; ++i)
tasks.append(ConcurrentCallTask<TestResult>(onSetup, onDone)); tasks.append(ConcurrentCallTask<TestResult>(onSetup, onDone));