ClangTools: Support ClangTool re-running

Change-Id: I9862db88e5dd0ca342eec77435ae074830b2c95c
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2025-01-15 11:49:02 +01:00
parent a3b22a6673
commit 45c001601e
2 changed files with 15 additions and 22 deletions

View File

@@ -686,7 +686,8 @@ Group ClangTool::runRecipe(const RunSettings &runSettings,
if (buildBeforeAnalysis) { if (buildBeforeAnalysis) {
QPointer<RunControl> runControl(m_runControl); QPointer<RunControl> runControl(m_runControl);
const auto onSetup = [runControl](QPointer<RunControl> &buildRunControl) { const auto onSetup = [this, runControl](QPointer<RunControl> &buildRunControl) {
m_infoBarWidget->setInfoText("Waiting for build to finish...");
buildRunControl = runControl; buildRunControl = runControl;
}; };
const auto onError = [this] { const auto onError = [this] {
@@ -861,15 +862,11 @@ void ClangTool::startTool(FileSelection fileSelection, const RunSettings &runSet
if (fileInfos.empty()) if (fileInfos.empty())
return; return;
// Reset
reset();
// Run control // Run control
m_runControl = new RunControl(Constants::CLANGTIDYCLAZY_RUN_MODE); m_runControl = new RunControl(Constants::CLANGTIDYCLAZY_RUN_MODE);
m_runControl->setDisplayName(m_name); m_runControl->setDisplayName(m_name);
m_runControl->setIcon(ProjectExplorer::Icons::ANALYZER_START_SMALL_TOOLBAR); m_runControl->setIcon(ProjectExplorer::Icons::ANALYZER_START_SMALL_TOOLBAR);
m_runControl->setTarget(project->activeTarget()); m_runControl->setTarget(project->activeTarget());
m_runControl->setSupportsReRunning(false);
m_stopAction->disconnect(); m_stopAction->disconnect();
connect(m_stopAction, &QAction::triggered, m_runControl, [this] { connect(m_stopAction, &QAction::triggered, m_runControl, [this] {
m_runControl->postMessage(Tr::tr("%1 tool stopped by user.").arg(m_name), 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); setState(State::AnalyzerFinished);
emit finished(m_infoBarWidget->errorText()); 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<FilePath>(fileSelection) const bool preventBuild = std::holds_alternative<FilePath>(fileSelection)
|| std::get<FileSelectionType>(fileSelection) || std::get<FileSelectionType>(fileSelection)
@@ -889,13 +893,6 @@ void ClangTool::startTool(FileSelection fileSelection, const RunSettings &runSet
const bool buildBeforeAnalysis = !preventBuild && runSettings.buildBeforeAnalysis(); const bool buildBeforeAnalysis = !preventBuild && runSettings.buildBeforeAnalysis();
m_runControl->setRunRecipe(runRecipe(runSettings, diagnosticConfig, fileInfos, m_runControl->setRunRecipe(runRecipe(runSettings, diagnosticConfig, fileInfos,
buildBeforeAnalysis)); 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(); m_runControl->start();
} }
@@ -1028,9 +1025,7 @@ void ClangTool::reset()
m_infoBarWidget->reset(); m_infoBarWidget->reset();
m_state = State::Initial; m_state = State::Initial;
m_runControl = nullptr;
m_filesCount = 0;
m_filesSucceeded = 0; m_filesSucceeded = 0;
m_filesFailed = 0; m_filesFailed = 0;
} }

View File

@@ -485,22 +485,20 @@ void RunControl::setRunRecipe(const Group &group)
void RunControl::initiateStart() void RunControl::initiateStart()
{ {
if (d->isUsingTaskTree()) { emit aboutToStart();
if (d->isUsingTaskTree())
d->startTaskTree(); d->startTaskTree();
} else { else
emit aboutToStart();
d->initiateStart(); d->initiateStart();
}
} }
void RunControl::initiateReStart() void RunControl::initiateReStart()
{ {
if (d->isUsingTaskTree()) { emit aboutToStart();
if (d->isUsingTaskTree())
d->startTaskTree(); d->startTaskTree();
} else { else
emit aboutToStart();
d->initiateReStart(); d->initiateReStart();
}
} }
void RunControl::initiateStop() void RunControl::initiateStop()