Show the status message also while running.

So users can see how many issues were found before the analyzer has
finished, as well as browse them.

Change-Id: I82452441168ecb370e7b2aac137961ebb5b8bfc3
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Christian Kandeler
2015-03-02 15:35:10 +01:00
parent 5b1a7f3756
commit 26abab90ca
2 changed files with 38 additions and 16 deletions

View File

@@ -82,6 +82,17 @@ QWidget *ClangStaticAnalyzerTool::createWidgets()
m_diagnosticView->setAutoScroll(false);
m_diagnosticView->setObjectName(QLatin1String("ClangStaticAnalyzerIssuesView"));
m_diagnosticView->setWindowTitle(tr("Clang Static Analyzer Issues"));
foreach (auto * const model,
QList<QAbstractItemModel *>() << m_diagnosticModel << m_diagnosticFilterModel) {
connect(model, &QAbstractItemModel::rowsInserted,
this, &ClangStaticAnalyzerTool::handleStateUpdate);
connect(model, &QAbstractItemModel::rowsRemoved,
this, &ClangStaticAnalyzerTool::handleStateUpdate);
connect(model, &QAbstractItemModel::modelReset,
this, &ClangStaticAnalyzerTool::handleStateUpdate);
connect(model, &QAbstractItemModel::layoutChanged, // For QSortFilterProxyModel::invalidate()
this, &ClangStaticAnalyzerTool::handleStateUpdate);
}
QDockWidget *issuesDock = AnalyzerManager::createDockWidget(ClangStaticAnalyzerToolId,
m_diagnosticView);
@@ -198,7 +209,6 @@ void ClangStaticAnalyzerTool::startTool()
if (dontStartAfterHintForDebugMode())
return;
AnalyzerManager::showPermanentStatusMessage(QString());
m_diagnosticModel->clear();
setBusyCursor(true);
Project *project = SessionManager::startupProject();
@@ -207,6 +217,7 @@ void ClangStaticAnalyzerTool::startTool()
m_projectInfoBeforeBuild = CppTools::CppModelManager::instance()->projectInfo(project);
QTC_ASSERT(m_projectInfoBeforeBuild.isValid(), return);
m_running = true;
handleStateUpdate();
ProjectExplorerPlugin::runProject(project, ProjectExplorer::ClangStaticAnalyzerMode);
}
@@ -239,23 +250,9 @@ void ClangStaticAnalyzerTool::onNewDiagnosticsAvailable(const QList<Diagnostic>
void ClangStaticAnalyzerTool::onEngineFinished()
{
QTC_ASSERT(m_goBack, return);
QTC_ASSERT(m_goNext, return);
QTC_ASSERT(m_diagnosticModel, return);
QTC_ASSERT(m_diagnosticFilterModel, return);
resetCursorAndProjectInfoBeforeBuild();
const int issuesFound = m_diagnosticModel->rowCount();
const int issuesVisible = m_diagnosticFilterModel->rowCount();
m_goBack->setEnabled(issuesVisible > 1);
m_goNext->setEnabled(issuesVisible > 1);
AnalyzerManager::showPermanentStatusMessage(issuesFound > 0
? AnalyzerManager::tr("Clang Static Analyzer finished, %n issues were found (%1 suppressed).",
0, issuesFound).arg(issuesFound - issuesVisible)
: AnalyzerManager::tr("Clang Static Analyzer finished, no issues were found."));
m_running = false;
handleStateUpdate();
emit finished();
}
@@ -266,5 +263,29 @@ void ClangStaticAnalyzerTool::setBusyCursor(bool busy)
m_diagnosticView->setCursor(cursor);
}
void ClangStaticAnalyzerTool::handleStateUpdate()
{
QTC_ASSERT(m_goBack, return);
QTC_ASSERT(m_goNext, return);
QTC_ASSERT(m_diagnosticModel, return);
QTC_ASSERT(m_diagnosticFilterModel, return);
const int issuesFound = m_diagnosticModel->rowCount();
const int issuesVisible = m_diagnosticFilterModel->rowCount();
m_goBack->setEnabled(issuesVisible > 1);
m_goNext->setEnabled(issuesVisible > 1);
QString message = m_running ? tr("Clang Static Analyzer running.")
: tr("Clang Static Analyzer finished.");
message += QLatin1Char(' ');
if (issuesFound == 0) {
message += tr("No issues found.");
} else {
message += tr("%n issues found (%1 suppressed).", 0, issuesFound)
.arg(issuesFound - issuesVisible);
}
AnalyzerManager::showPermanentStatusMessage(message);
}
} // namespace Internal
} // namespace ClangStaticAnalyzer

View File

@@ -61,6 +61,7 @@ private:
void onEngineFinished();
void setBusyCursor(bool busy);
void handleStateUpdate();
private:
CppTools::ProjectInfo m_projectInfoBeforeBuild;