diff --git a/src/plugins/clangtools/clangselectablefilesdialog.cpp b/src/plugins/clangtools/clangselectablefilesdialog.cpp index e48679aa059..c6ad76ff0a1 100644 --- a/src/plugins/clangtools/clangselectablefilesdialog.cpp +++ b/src/plugins/clangtools/clangselectablefilesdialog.cpp @@ -295,6 +295,7 @@ SelectableFilesDialog::SelectableFilesDialog(const ProjectInfo &projectInfo, CppTools::ClangDiagnosticConfigsSelectionWidget *diagnosticConfigsSelectionWidget = m_ui->clangToolsBasicSettings->ui()->clangDiagnosticConfigsSelectionWidget; QCheckBox *buildBeforeAnalysis = m_ui->clangToolsBasicSettings->ui()->buildBeforeAnalysis; + buildBeforeAnalysis->setToolTip(hintAboutBuildBeforeAnalysis()); ClangToolsProjectSettings *settings = ClangToolsProjectSettingsManager::getSettings(m_project); m_customDiagnosticConfig = diagnosticConfiguration(settings); @@ -337,6 +338,8 @@ SelectableFilesDialog::SelectableFilesDialog(const ProjectInfo &projectInfo, m_customDiagnosticConfig = currentConfigId; }); connect(buildBeforeAnalysis, &QCheckBox::toggled, [this](bool checked) { + if (!checked) + showHintAboutBuildBeforeAnalysis(); if (m_ui->globalOrCustom->currentIndex() == CustomSettings) m_buildBeforeAnalysis = checked; }); diff --git a/src/plugins/clangtools/clangtoolsconfigwidget.cpp b/src/plugins/clangtools/clangtoolsconfigwidget.cpp index ad966ab5180..b634875f979 100644 --- a/src/plugins/clangtools/clangtoolsconfigwidget.cpp +++ b/src/plugins/clangtools/clangtoolsconfigwidget.cpp @@ -56,9 +56,12 @@ ClangToolsConfigWidget::ClangToolsConfigWidget( [settings](int count) { settings->setSimultaneousProcesses(count); }); QCheckBox *buildBeforeAnalysis = m_ui->clangToolsBasicSettings->ui()->buildBeforeAnalysis; + buildBeforeAnalysis->setToolTip(hintAboutBuildBeforeAnalysis()); buildBeforeAnalysis->setCheckState(settings->savedBuildBeforeAnalysis() ? Qt::Checked : Qt::Unchecked); connect(buildBeforeAnalysis, &QCheckBox::toggled, [settings](bool checked) { + if (!checked) + showHintAboutBuildBeforeAnalysis(); settings->setBuildBeforeAnalysis(checked); }); diff --git a/src/plugins/clangtools/clangtoolsutils.cpp b/src/plugins/clangtools/clangtoolsutils.cpp index 3e811500ac9..173d97e31dc 100644 --- a/src/plugins/clangtools/clangtoolsutils.cpp +++ b/src/plugins/clangtools/clangtoolsutils.cpp @@ -25,6 +25,7 @@ #include "clangtoolsutils.h" +#include "clangtool.h" #include "clangtoolsdiagnostic.h" #include "clangtoolssettings.h" @@ -32,8 +33,9 @@ #include -#include +#include #include +#include #include #include @@ -49,5 +51,24 @@ QString createFullLocationString(const Debugger::DiagnosticLocation &location) + QLatin1Char(':') + QString::number(location.column); } +QString hintAboutBuildBeforeAnalysis() +{ + return ClangTool::tr( + "In general, the project should be built before starting the analysis to ensure that the " + "code to analyze is valid.

" + "Building the project might also run code generators that update the source files as " + "necessary."); +} + +void showHintAboutBuildBeforeAnalysis() +{ + Utils::CheckableMessageBox::doNotShowAgainInformation( + Core::ICore::dialogParent(), + ClangTool::tr("Info About Build the Project Before Analysis"), + hintAboutBuildBeforeAnalysis(), + Core::ICore::settings(), + "ClangToolsDisablingBuildBeforeAnalysisHint"); +} + } // namespace Internal } // namespace ClangTools diff --git a/src/plugins/clangtools/clangtoolsutils.h b/src/plugins/clangtools/clangtoolsutils.h index 6d3a7a90caf..05acb953c5a 100644 --- a/src/plugins/clangtools/clangtoolsutils.h +++ b/src/plugins/clangtools/clangtoolsutils.h @@ -41,5 +41,8 @@ namespace Internal { QString createFullLocationString(const Debugger::DiagnosticLocation &location); +QString hintAboutBuildBeforeAnalysis(); +void showHintAboutBuildBeforeAnalysis(); + } // namespace Internal } // namespace ClangTools