aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp
diff options
context:
space:
mode:
authorIvan Donchevskii <[email protected]>2017-05-23 09:49:22 +0200
committerIvan Donchevskii <[email protected]>2017-06-08 10:53:31 +0000
commit78db7d7ed24625cee373fb80b689bd3a7208d6e4 (patch)
tree4467a3873a0170cc728a4c8e0c45f0af35b14667 /src/plugins/clangcodemodel/clangprojectsettingswidget.cpp
parent0784dd20fe3d4d31b89d8f1a7d4ad81ce09b6b67 (diff)
Clang: turn off delayed template parsing
Fix templates highlight and completion on Windows Add UI to turn on/off delayed parsing (off by default) Task-number: QTCREATORBUG-17222 Change-Id: I0cd5e0bcfff2789cd938e4096829f777ff15957a Reviewed-by: Nikolai Kosjar <[email protected]>
Diffstat (limited to 'src/plugins/clangcodemodel/clangprojectsettingswidget.cpp')
-rw-r--r--src/plugins/clangcodemodel/clangprojectsettingswidget.cpp121
1 files changed, 64 insertions, 57 deletions
diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp b/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp
index b44408f26f1..d8148a158da 100644
--- a/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp
+++ b/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp
@@ -34,60 +34,21 @@
#include <cpptools/cppcodemodelsettings.h>
#include <cpptools/cpptoolsreuse.h>
-static const char GLOBAL_PROXY_CONFIG_ID[] = "globalProxyConfig";
+#include <utils/hostosinfo.h>
namespace ClangCodeModel {
namespace Internal {
-static CppTools::ClangDiagnosticConfig
-createConfigRepresentingGlobalSetting(const CppTools::ClangDiagnosticConfig &baseConfig)
+static Core::Id configIdForProject(ClangProjectSettings &projectSettings)
{
- CppTools::ClangDiagnosticConfig config = baseConfig;
- config.setId(GLOBAL_PROXY_CONFIG_ID);
-
- QString displayName = config.displayName();
- if (config.isReadOnly())
- displayName = CppTools::ClangDiagnosticConfigsModel::displayNameWithBuiltinIndication(config);
- displayName = ClangProjectSettingsWidget::tr("Global setting (%1)").arg(displayName);
-
- config.setDisplayName(displayName);
- config.setIsReadOnly(true);
-
- return config;
-}
-
-static Core::Id globalConfigId(const CppTools::CppCodeModelSettings &settings,
- const CppTools::ClangDiagnosticConfigsModel &model)
-{
- const Core::Id configId = settings.clangDiagnosticConfigId();
-
- if (model.hasConfigWithId(configId))
- return configId;
-
- return model.at(0).id(); // Config saved in the settings was removed, fallback to first.
-}
-
-static CppTools::ClangDiagnosticConfigsModel
-createConfigsModelWithGlobalProxyConfig(const CppTools::CppCodeModelSettings &settings)
-{
- using namespace CppTools;
- ClangDiagnosticConfigsModel configsModel(settings.clangCustomDiagnosticConfigs());
-
- const Core::Id globalId = globalConfigId(settings, configsModel);
- const ClangDiagnosticConfig globalConfig = configsModel.configWithId(globalId);
- const ClangDiagnosticConfig globalProxy
- = createConfigRepresentingGlobalSetting(globalConfig);
-
- configsModel.prepend(globalProxy);
-
- return configsModel;
-}
-
-static Core::Id configIdForProject(const ClangProjectSettings &projectSettings)
-{
- return projectSettings.useGlobalWarningConfig()
- ? Core::Id(GLOBAL_PROXY_CONFIG_ID)
- : projectSettings.warningConfigId();
+ if (projectSettings.useGlobalConfig())
+ return CppTools::codeModelSettings()->clangDiagnosticConfigId();
+ Core::Id configId = projectSettings.warningConfigId();
+ if (!configId.isValid()) {
+ configId = CppTools::codeModelSettings()->clangDiagnosticConfigId();
+ projectSettings.setWarningConfigId(configId);
+ }
+ return configId;
}
ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project *project)
@@ -98,24 +59,33 @@ ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project
using namespace CppTools;
m_diagnosticConfigWidget = new ClangDiagnosticConfigsWidget;
- m_diagnosticConfigWidget->setConfigWithUndecoratedDisplayName(Core::Id(GLOBAL_PROXY_CONFIG_ID));
refreshDiagnosticConfigsWidgetFromSettings();
+
+ m_ui.generalConfigurationGroupBox->setVisible(Utils::HostOsInfo::isWindowsHost());
+
+ m_ui.clangSettings->setCurrentIndex(m_projectSettings.useGlobalConfig() ? 0 : 1);
+ syncOtherWidgetsToComboBox();
+
connectToCppCodeModelSettingsChanged();
connect(m_diagnosticConfigWidget.data(), &ClangDiagnosticConfigsWidget::currentConfigChanged,
this, &ClangProjectSettingsWidget::onCurrentWarningConfigChanged);
connect(m_diagnosticConfigWidget.data(), &ClangDiagnosticConfigsWidget::customConfigsChanged,
this, &ClangProjectSettingsWidget::onCustomWarningConfigsChanged);
+ connect(m_ui.delayedTemplateParse, &QCheckBox::toggled,
+ this, &ClangProjectSettingsWidget::onDelayedTemplateParseClicked);
+ connect(m_ui.clangSettings,
+ static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+ this, &ClangProjectSettingsWidget::onClangSettingsChanged);
m_ui.diagnosticConfigurationGroupBox->layout()->addWidget(m_diagnosticConfigWidget);
}
void ClangProjectSettingsWidget::onCurrentWarningConfigChanged(const Core::Id &currentConfigId)
{
- const bool useGlobalConfig = currentConfigId == Core::Id(GLOBAL_PROXY_CONFIG_ID);
-
- m_projectSettings.setUseGlobalWarningConfig(useGlobalConfig);
+ // Don't save it when we reset the global config in code
+ if (m_projectSettings.useGlobalConfig())
+ return;
m_projectSettings.setWarningConfigId(currentConfigId);
-
m_projectSettings.store();
}
@@ -132,11 +102,48 @@ void ClangProjectSettingsWidget::onCustomWarningConfigsChanged(
connectToCppCodeModelSettingsChanged();
}
+void ClangProjectSettingsWidget::onDelayedTemplateParseClicked(bool checked)
+{
+ // Don't save it when we reset the global config in code
+ if (m_projectSettings.useGlobalConfig())
+ return;
+
+ const QLatin1String extraFlag{checked ? ClangProjectSettings::DelayedTemplateParsing
+ : ClangProjectSettings::NoDelayedTemplateParsing};
+ QStringList options = m_projectSettings.commandLineOptions();
+ options.removeAll(QLatin1String{ClangProjectSettings::DelayedTemplateParsing});
+ options.removeAll(QLatin1String{ClangProjectSettings::NoDelayedTemplateParsing});
+ options.append(extraFlag);
+ m_projectSettings.setCommandLineOptions(options);
+ m_projectSettings.store();
+}
+
+void ClangProjectSettingsWidget::onClangSettingsChanged(int index)
+{
+ m_projectSettings.setUseGlobalConfig(index == 0 ? true : false);
+ m_projectSettings.store();
+ syncOtherWidgetsToComboBox();
+}
+
+void ClangProjectSettingsWidget::syncOtherWidgetsToComboBox()
+{
+ const QStringList options = m_projectSettings.commandLineOptions();
+ m_ui.delayedTemplateParse->setChecked(
+ options.contains(QLatin1String{ClangProjectSettings::DelayedTemplateParsing}));
+
+ const bool isCustom = !m_projectSettings.useGlobalConfig();
+ m_ui.generalConfigurationGroupBox->setEnabled(isCustom);
+ m_ui.diagnosticConfigurationGroupBox->setEnabled(isCustom);
+
+ refreshDiagnosticConfigsWidgetFromSettings();
+}
+
void ClangProjectSettingsWidget::refreshDiagnosticConfigsWidgetFromSettings()
{
- m_diagnosticConfigWidget->refresh(
- createConfigsModelWithGlobalProxyConfig(*CppTools::codeModelSettings()),
- configIdForProject(m_projectSettings));
+ CppTools::ClangDiagnosticConfigsModel configsModel(
+ CppTools::codeModelSettings()->clangCustomDiagnosticConfigs());
+ m_diagnosticConfigWidget->refresh(configsModel,
+ configIdForProject(m_projectSettings));
}
void ClangProjectSettingsWidget::connectToCppCodeModelSettingsChanged()