From 45c001601e448a4c3f06576894561f4fee7fa62c Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 15 Jan 2025 11:49:02 +0100 Subject: [PATCH] ClangTools: Support ClangTool re-running Change-Id: I9862db88e5dd0ca342eec77435ae074830b2c95c Reviewed-by: hjk --- src/plugins/clangtools/clangtool.cpp | 23 +++++++++------------- src/plugins/projectexplorer/runcontrol.cpp | 14 ++++++------- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp index 9c23b4cf63b..5ca9f0816a6 100644 --- a/src/plugins/clangtools/clangtool.cpp +++ b/src/plugins/clangtools/clangtool.cpp @@ -686,7 +686,8 @@ Group ClangTool::runRecipe(const RunSettings &runSettings, if (buildBeforeAnalysis) { QPointer runControl(m_runControl); - const auto onSetup = [runControl](QPointer &buildRunControl) { + const auto onSetup = [this, runControl](QPointer &buildRunControl) { + m_infoBarWidget->setInfoText("Waiting for build to finish..."); buildRunControl = runControl; }; const auto onError = [this] { @@ -861,15 +862,11 @@ void ClangTool::startTool(FileSelection fileSelection, const RunSettings &runSet if (fileInfos.empty()) return; - // Reset - reset(); - // Run control m_runControl = new RunControl(Constants::CLANGTIDYCLAZY_RUN_MODE); m_runControl->setDisplayName(m_name); m_runControl->setIcon(ProjectExplorer::Icons::ANALYZER_START_SMALL_TOOLBAR); m_runControl->setTarget(project->activeTarget()); - m_runControl->setSupportsReRunning(false); m_stopAction->disconnect(); connect(m_stopAction, &QAction::triggered, m_runControl, [this] { m_runControl->postMessage(Tr::tr("%1 tool stopped by user.").arg(m_name), @@ -882,6 +879,13 @@ void ClangTool::startTool(FileSelection fileSelection, const RunSettings &runSet setState(State::AnalyzerFinished); emit finished(m_infoBarWidget->errorText()); }); + connect(m_runControl, &RunControl::aboutToStart, this, [this, project] { + TaskHub::clearTasks(taskCategory()); + reset(); + m_diagnosticFilterModel->setProject(project); + m_perspective.select(); + setState(State::PreparationStarted); + }); const bool preventBuild = std::holds_alternative(fileSelection) || std::get(fileSelection) @@ -889,13 +893,6 @@ void ClangTool::startTool(FileSelection fileSelection, const RunSettings &runSet const bool buildBeforeAnalysis = !preventBuild && runSettings.buildBeforeAnalysis(); m_runControl->setRunRecipe(runRecipe(runSettings, diagnosticConfig, fileInfos, buildBeforeAnalysis)); - // More init and UI update - m_diagnosticFilterModel->setProject(project); - m_perspective.select(); - if (buildBeforeAnalysis) - m_infoBarWidget->setInfoText("Waiting for build to finish..."); - setState(State::PreparationStarted); - m_runControl->start(); } @@ -1028,9 +1025,7 @@ void ClangTool::reset() m_infoBarWidget->reset(); m_state = State::Initial; - m_runControl = nullptr; - m_filesCount = 0; m_filesSucceeded = 0; m_filesFailed = 0; } diff --git a/src/plugins/projectexplorer/runcontrol.cpp b/src/plugins/projectexplorer/runcontrol.cpp index 7a93e136007..9354e3b0100 100644 --- a/src/plugins/projectexplorer/runcontrol.cpp +++ b/src/plugins/projectexplorer/runcontrol.cpp @@ -485,22 +485,20 @@ void RunControl::setRunRecipe(const Group &group) void RunControl::initiateStart() { - if (d->isUsingTaskTree()) { + emit aboutToStart(); + if (d->isUsingTaskTree()) d->startTaskTree(); - } else { - emit aboutToStart(); + else d->initiateStart(); - } } void RunControl::initiateReStart() { - if (d->isUsingTaskTree()) { + emit aboutToStart(); + if (d->isUsingTaskTree()) d->startTaskTree(); - } else { - emit aboutToStart(); + else d->initiateReStart(); - } } void RunControl::initiateStop()