summaryrefslogtreecommitdiff
path: root/src/plugins/clangtools
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2019-06-28 12:50:03 +0200
committerEike Ziller <eike.ziller@qt.io>2019-06-28 12:50:03 +0200
commit10098b2508abe6e8df59b7e27ea64e9483f1f8be (patch)
treeb73815f1e8ca7aa12c347706b410050e3eb22caa /src/plugins/clangtools
parent5dbfd46bcfe177b8308c70a66f7d404429249f6b (diff)
parenta111f251261159b50e92d6866f2058c66b43e390 (diff)
downloadqt-creator-10098b2508abe6e8df59b7e27ea64e9483f1f8be.tar.gz
Merge remote-tracking branch 'origin/4.10'
Conflicts: CMakeLists.txt tests/unit/unittest/unittest.pro Change-Id: I64296ad31502d9b35012da129a28e9277e9fcf8e
Diffstat (limited to 'src/plugins/clangtools')
-rw-r--r--src/plugins/clangtools/clangselectablefilesdialog.cpp3
-rw-r--r--src/plugins/clangtools/clangtoolruncontrol.cpp10
-rw-r--r--src/plugins/clangtools/clangtoolsconfigwidget.cpp3
-rw-r--r--src/plugins/clangtools/clangtoolsprojectsettings.cpp4
-rw-r--r--src/plugins/clangtools/clangtoolsutils.cpp23
-rw-r--r--src/plugins/clangtools/clangtoolsutils.h3
6 files changed, 44 insertions, 2 deletions
diff --git a/src/plugins/clangtools/clangselectablefilesdialog.cpp b/src/plugins/clangtools/clangselectablefilesdialog.cpp
index e48679aa05..c6ad76ff0a 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/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp
index b1572b0010..0c2ca841e6 100644
--- a/src/plugins/clangtools/clangtoolruncontrol.cpp
+++ b/src/plugins/clangtools/clangtoolruncontrol.cpp
@@ -477,6 +477,16 @@ void ClangToolRunControl::finalize()
if (m_filesNotAnalyzed != 0) {
QString msg = tr("%1: Not all files could be analyzed.").arg(toolName);
TaskHub::addTask(Task::Error, msg, Debugger::Constants::ANALYZERTASK_ID);
+ if (m_target && !m_target->activeBuildConfiguration()->buildDirectory().exists()
+ && !ClangToolsProjectSettingsManager::getSettings(m_target->project())
+ ->buildBeforeAnalysis()) {
+ msg = tr("%1: You might need to build the project to generate or update source "
+ "files. To build automatically, enable \"Build the project before starting "
+ "analysis\".")
+ .arg(toolName);
+ TaskHub::addTask(Task::Error, msg, Debugger::Constants::ANALYZERTASK_ID);
+ }
+
TaskHub::requestPopup();
}
diff --git a/src/plugins/clangtools/clangtoolsconfigwidget.cpp b/src/plugins/clangtools/clangtoolsconfigwidget.cpp
index ad966ab518..b634875f97 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/clangtoolsprojectsettings.cpp b/src/plugins/clangtools/clangtoolsprojectsettings.cpp
index bc8a3cabb6..55573c8ee6 100644
--- a/src/plugins/clangtools/clangtoolsprojectsettings.cpp
+++ b/src/plugins/clangtools/clangtoolsprojectsettings.cpp
@@ -87,7 +87,9 @@ void ClangToolsProjectSettings::load()
m_useGlobalSettings = useGlobalVariant.isValid() ? useGlobalVariant.toBool() : true;
m_diagnosticConfig = Core::Id::fromSetting(
m_project->namedSettings(SETTINGS_KEY_DIAGNOSTIC_CONFIG));
- m_buildBeforeAnalysis = m_project->namedSettings(SETTINGS_KEY_BUILD_BEFORE_ANALYSIS).toBool();
+
+ const QVariant value = m_project->namedSettings(SETTINGS_KEY_BUILD_BEFORE_ANALYSIS);
+ m_buildBeforeAnalysis = value.isValid() ? value.toBool() : true;
auto toFileName = [](const QString &s) { return Utils::FilePath::fromString(s); };
diff --git a/src/plugins/clangtools/clangtoolsutils.cpp b/src/plugins/clangtools/clangtoolsutils.cpp
index 3e811500ac..173d97e31d 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 <projectexplorer/projectexplorerconstants.h>
-#include <utils/hostosinfo.h>
+#include <utils/checkablemessagebox.h>
#include <utils/environment.h>
+#include <utils/hostosinfo.h>
#include <utils/synchronousprocess.h>
#include <QCoreApplication>
@@ -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.<br/><br/>"
+ "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 6d3a7a90ca..05acb953c5 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