summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2016-06-21 11:16:39 +0200
committerNikolai Kosjar <nikolai.kosjar@qt.io>2016-06-22 12:22:57 +0000
commit1ea640433736d599a2ec0cb716924db1560f59a3 (patch)
treec19e3d55c5d4200b0aa15a64e0342969fb7d2528 /src/plugins
parentb928a1ce46a810941a54c42b20f4692f2db2ebb0 (diff)
downloadqt-creator-1ea640433736d599a2ec0cb716924db1560f59a3.tar.gz
CppTools: Allow prefering getter names with "get" prefix
We default to "foo()" for e.g. a member variable "m_foo", but other coding styles require "getFoo()". Task-number: QTCREATORBUG-16452 Change-Id: I9ccfdf88e4c469bc1c06fde855ad754faf2bd238 Reviewed-by: André Hartmann <aha_1980@gmx.de>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/cppeditor/cppeditorplugin.h1
-rw-r--r--src/plugins/cppeditor/cppquickfix_test.cpp79
-rw-r--r--src/plugins/cppeditor/cppquickfixes.cpp3
-rw-r--r--src/plugins/cpptools/cppcodestylesettings.cpp64
-rw-r--r--src/plugins/cpptools/cppcodestylesettings.h5
-rw-r--r--src/plugins/cpptools/cppcodestylesettingspage.cpp4
-rw-r--r--src/plugins/cpptools/cppcodestylesettingspage.ui27
7 files changed, 156 insertions, 27 deletions
diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h
index eb59a3a079..35c7fca23e 100644
--- a/src/plugins/cppeditor/cppeditorplugin.h
+++ b/src/plugins/cppeditor/cppeditorplugin.h
@@ -117,6 +117,7 @@ private slots:
void test_quickfix_GenerateGetterSetter_basicGetterWithPrefixAndNamespaceToCpp();
void test_quickfix_GenerateGetterSetter_onlyGetter();
+ void test_quickfix_GenerateGetterSetter_onlyGetter_DontPreferGetterWithGet();
void test_quickfix_GenerateGetterSetter_onlySetter();
void test_quickfix_GenerateGetterSetter_offerGetterWhenSetterPresent();
void test_quickfix_GenerateGetterSetter_offerSetterWhenGetterPresent();
diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp
index ddd2b5097d..742106252a 100644
--- a/src/plugins/cppeditor/cppquickfix_test.cpp
+++ b/src/plugins/cppeditor/cppquickfix_test.cpp
@@ -1890,6 +1890,85 @@ void CppEditorPlugin::test_quickfix_GenerateGetterSetter_onlySetter()
QuickFixOperationTest(testDocuments, &factory, ProjectPartHeaderPaths(), 2);
}
+class CppCodeStyleSettingsChanger {
+public:
+ CppCodeStyleSettingsChanger(const CppCodeStyleSettings &settings);
+ ~CppCodeStyleSettingsChanger(); // Restore original
+
+ static CppCodeStyleSettings currentSettings();
+
+private:
+ void setSettings(const CppCodeStyleSettings &settings);
+
+ CppCodeStyleSettings m_originalSettings;
+};
+
+CppCodeStyleSettingsChanger::CppCodeStyleSettingsChanger(const CppCodeStyleSettings &settings)
+{
+ m_originalSettings = currentSettings();
+ setSettings(settings);
+}
+
+CppCodeStyleSettingsChanger::~CppCodeStyleSettingsChanger()
+{
+ setSettings(m_originalSettings);
+}
+
+void CppCodeStyleSettingsChanger::setSettings(const CppCodeStyleSettings &settings)
+{
+ QVariant variant;
+ variant.setValue(settings);
+
+ CppCodeStylePreferences *preferences = CppToolsSettings::instance()->cppCodeStyle();
+ preferences->currentDelegate()->setValue(variant);
+}
+
+CppCodeStyleSettings CppCodeStyleSettingsChanger::currentSettings()
+{
+ CppCodeStylePreferences *preferences = CppToolsSettings::instance()->cppCodeStyle();
+ return preferences->currentDelegate()->value().value<CppCodeStyleSettings>();
+}
+
+void CppEditorPlugin::test_quickfix_GenerateGetterSetter_onlyGetter_DontPreferGetterWithGet()
+{
+ CppCodeStyleSettings modifiedSettings = CppCodeStyleSettingsChanger::currentSettings();
+ modifiedSettings.preferGetterNameWithoutGetPrefix = false;
+ CppCodeStyleSettingsChanger changer(modifiedSettings);
+
+ QList<QuickFixTestDocument::Ptr> testDocuments;
+ QByteArray original;
+ QByteArray expected;
+
+ // Header File
+ original =
+ "class Foo\n"
+ "{\n"
+ "public:\n"
+ " int m_bar@;\n"
+ "};\n";
+ expected =
+ "class Foo\n"
+ "{\n"
+ "public:\n"
+ " int m_bar@;\n"
+ " int getBar() const;\n"
+ "};\n";
+ testDocuments << QuickFixTestDocument::create("file.h", original, expected);
+
+ // Source File
+ original.resize(0);
+ expected =
+ "\n"
+ "int Foo::getBar() const\n"
+ "{\n"
+ " return m_bar;\n"
+ "}\n";
+ testDocuments << QuickFixTestDocument::create("file.cpp", original, expected);
+
+ GenerateGetterSetter factory;
+ QuickFixOperationTest(testDocuments, &factory, ProjectPartHeaderPaths(), 1);
+}
+
/// Checks: Offer a "generate getter" quick fix if there is a setter
void CppEditorPlugin::test_quickfix_GenerateGetterSetter_offerGetterWhenSetterPresent()
{
diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp
index 604243d6d3..cb9df1eb31 100644
--- a/src/plugins/cppeditor/cppquickfixes.cpp
+++ b/src/plugins/cppeditor/cppquickfixes.cpp
@@ -5967,9 +5967,10 @@ void GenerateGetterSetterOperation::determineGetterSetterNames()
m_baseName = QLatin1String("value");
// Getter Name
+ const CppCodeStyleSettings settings = CppCodeStyleSettings::currentProjectCodeStyle();
const bool hasValidBaseName = m_baseName != m_variableString;
const bool getPrefixIsAlreadyUsed = hasClassMemberWithGetPrefix(m_classSpecifier->symbol);
- if (hasValidBaseName && !getPrefixIsAlreadyUsed) {
+ if (settings.preferGetterNameWithoutGetPrefix && hasValidBaseName && !getPrefixIsAlreadyUsed) {
m_getterName = m_baseName;
} else {
const QString baseNameWithCapital = m_baseName.left(1).toUpper() + m_baseName.mid(1);
diff --git a/src/plugins/cpptools/cppcodestylesettings.cpp b/src/plugins/cpptools/cppcodestylesettings.cpp
index a0d618225c..06d396e59c 100644
--- a/src/plugins/cpptools/cppcodestylesettings.cpp
+++ b/src/plugins/cpptools/cppcodestylesettings.cpp
@@ -59,6 +59,7 @@ static const char bindStarToLeftSpecifierKey[] = "BindStarToLeftSpecifier";
static const char bindStarToRightSpecifierKey[] = "BindStarToRightSpecifier";
static const char extraPaddingForConditionsIfConfusingAlignKey[] = "ExtraPaddingForConditionsIfConfusingAlign";
static const char alignAssignmentsKey[] = "AlignAssignments";
+static const char shortGetterNameKey[] = "ShortGetterName";
using namespace CppTools;
@@ -85,6 +86,7 @@ CppCodeStyleSettings::CppCodeStyleSettings() :
, bindStarToRightSpecifier(false)
, extraPaddingForConditionsIfConfusingAlign(true)
, alignAssignments(false)
+ , preferGetterNameWithoutGetPrefix(true)
{
}
@@ -121,6 +123,7 @@ void CppCodeStyleSettings::toMap(const QString &prefix, QVariantMap *map) const
map->insert(prefix + QLatin1String(bindStarToRightSpecifierKey), bindStarToRightSpecifier);
map->insert(prefix + QLatin1String(extraPaddingForConditionsIfConfusingAlignKey), extraPaddingForConditionsIfConfusingAlign);
map->insert(prefix + QLatin1String(alignAssignmentsKey), alignAssignments);
+ map->insert(prefix + QLatin1String(shortGetterNameKey), preferGetterNameWithoutGetPrefix);
}
void CppCodeStyleSettings::fromMap(const QString &prefix, const QVariantMap &map)
@@ -165,6 +168,8 @@ void CppCodeStyleSettings::fromMap(const QString &prefix, const QVariantMap &map
extraPaddingForConditionsIfConfusingAlign).toBool();
alignAssignments = map.value(prefix + QLatin1String(alignAssignmentsKey),
alignAssignments).toBool();
+ preferGetterNameWithoutGetPrefix = map.value(prefix + QLatin1String(shortGetterNameKey),
+ preferGetterNameWithoutGetPrefix).toBool();
}
bool CppCodeStyleSettings::equals(const CppCodeStyleSettings &rhs) const
@@ -188,7 +193,37 @@ bool CppCodeStyleSettings::equals(const CppCodeStyleSettings &rhs) const
&& bindStarToLeftSpecifier == rhs.bindStarToLeftSpecifier
&& bindStarToRightSpecifier == rhs.bindStarToRightSpecifier
&& extraPaddingForConditionsIfConfusingAlign == rhs.extraPaddingForConditionsIfConfusingAlign
- && alignAssignments == rhs.alignAssignments;
+ && alignAssignments == rhs.alignAssignments
+ && preferGetterNameWithoutGetPrefix == rhs.preferGetterNameWithoutGetPrefix
+ ;
+}
+
+CppCodeStyleSettings CppCodeStyleSettings::currentProjectCodeStyle()
+{
+ ProjectExplorer::Project *project = ProjectExplorer::ProjectTree::currentProject();
+ if (!project)
+ return currentGlobalCodeStyle();
+
+ ProjectExplorer::EditorConfiguration *editorConfiguration = project->editorConfiguration();
+ QTC_ASSERT(editorConfiguration, return currentGlobalCodeStyle());
+
+ TextEditor::ICodeStylePreferences *codeStylePreferences
+ = editorConfiguration->codeStyle(Constants::CPP_SETTINGS_ID);
+ QTC_ASSERT(codeStylePreferences, return currentGlobalCodeStyle());
+
+ CppCodeStylePreferences *cppCodeStylePreferences
+ = dynamic_cast<CppCodeStylePreferences *>(codeStylePreferences);
+ QTC_ASSERT(cppCodeStylePreferences, return currentGlobalCodeStyle());
+
+ return cppCodeStylePreferences->currentCodeStyleSettings();
+}
+
+CppCodeStyleSettings CppCodeStyleSettings::currentGlobalCodeStyle()
+{
+ CppCodeStylePreferences *cppCodeStylePreferences = CppToolsSettings::instance()->cppCodeStyle();
+ QTC_ASSERT(cppCodeStylePreferences, return CppCodeStyleSettings());
+
+ return cppCodeStylePreferences->currentCodeStyleSettings();
}
static void configureOverviewWithCodeStyleSettings(CPlusPlus::Overview &overview,
@@ -207,37 +242,14 @@ static void configureOverviewWithCodeStyleSettings(CPlusPlus::Overview &overview
CPlusPlus::Overview CppCodeStyleSettings::currentProjectCodeStyleOverview()
{
- ProjectExplorer::Project *project = ProjectExplorer::ProjectTree::currentProject();
- if (!project)
- return currentGlobalCodeStyleOverview();
-
- ProjectExplorer::EditorConfiguration *editorConfiguration = project->editorConfiguration();
- QTC_ASSERT(editorConfiguration, return currentGlobalCodeStyleOverview());
-
- TextEditor::ICodeStylePreferences *codeStylePreferences
- = editorConfiguration->codeStyle(Constants::CPP_SETTINGS_ID);
- QTC_ASSERT(codeStylePreferences, return currentGlobalCodeStyleOverview());
-
- CppCodeStylePreferences *cppCodeStylePreferences
- = dynamic_cast<CppCodeStylePreferences *>(codeStylePreferences);
- QTC_ASSERT(cppCodeStylePreferences, return currentGlobalCodeStyleOverview());
-
- CppCodeStyleSettings settings = cppCodeStylePreferences->currentCodeStyleSettings();
-
CPlusPlus::Overview overview;
- configureOverviewWithCodeStyleSettings(overview, settings);
+ configureOverviewWithCodeStyleSettings(overview, currentProjectCodeStyle());
return overview;
}
CPlusPlus::Overview CppCodeStyleSettings::currentGlobalCodeStyleOverview()
{
CPlusPlus::Overview overview;
-
- CppCodeStylePreferences *cppCodeStylePreferences = CppToolsSettings::instance()->cppCodeStyle();
- QTC_ASSERT(cppCodeStylePreferences, return overview);
-
- CppCodeStyleSettings settings = cppCodeStylePreferences->currentCodeStyleSettings();
-
- configureOverviewWithCodeStyleSettings(overview, settings);
+ configureOverviewWithCodeStyleSettings(overview, currentGlobalCodeStyle());
return overview;
}
diff --git a/src/plugins/cpptools/cppcodestylesettings.h b/src/plugins/cpptools/cppcodestylesettings.h
index 60dcc2fbf6..f69d72d0ab 100644
--- a/src/plugins/cpptools/cppcodestylesettings.h
+++ b/src/plugins/cpptools/cppcodestylesettings.h
@@ -80,6 +80,8 @@ public:
// b
bool alignAssignments;
+ bool preferGetterNameWithoutGetPrefix;
+
void toSettings(const QString &category, QSettings *s) const;
void fromSettings(const QString &category, const QSettings *s);
@@ -90,6 +92,9 @@ public:
bool operator==(const CppCodeStyleSettings &s) const { return equals(s); }
bool operator!=(const CppCodeStyleSettings &s) const { return !equals(s); }
+ static CppCodeStyleSettings currentProjectCodeStyle();
+ static CppCodeStyleSettings currentGlobalCodeStyle();
+
/*! Returns an Overview configured by the current project's code style.
If no current project is available or an error occurs when getting the
diff --git a/src/plugins/cpptools/cppcodestylesettingspage.cpp b/src/plugins/cpptools/cppcodestylesettingspage.cpp
index 8af93ff100..46d6ee6985 100644
--- a/src/plugins/cpptools/cppcodestylesettingspage.cpp
+++ b/src/plugins/cpptools/cppcodestylesettingspage.cpp
@@ -321,6 +321,8 @@ CppCodeStylePreferencesWidget::CppCodeStylePreferencesWidget(QWidget *parent)
this, &CppCodeStylePreferencesWidget::slotCodeStyleSettingsChanged);
connect(m_ui->bindStarToRightSpecifier, &QCheckBox::toggled,
this, &CppCodeStylePreferencesWidget::slotCodeStyleSettingsChanged);
+ connect(m_ui->preferGetterNamesWithoutGet, &QCheckBox::toggled,
+ this, &CppCodeStylePreferencesWidget::slotCodeStyleSettingsChanged);
m_ui->categoryTab->setCurrentIndex(0);
@@ -380,6 +382,7 @@ CppCodeStyleSettings CppCodeStylePreferencesWidget::cppCodeStyleSettings() const
set.bindStarToRightSpecifier = m_ui->bindStarToRightSpecifier->isChecked();
set.extraPaddingForConditionsIfConfusingAlign = m_ui->extraPaddingConditions->isChecked();
set.alignAssignments = m_ui->alignAssignments->isChecked();
+ set.preferGetterNameWithoutGetPrefix = m_ui->preferGetterNamesWithoutGet->isChecked();
return set;
}
@@ -413,6 +416,7 @@ void CppCodeStylePreferencesWidget::setCodeStyleSettings(const CppCodeStyleSetti
m_ui->bindStarToRightSpecifier->setChecked(s.bindStarToRightSpecifier);
m_ui->extraPaddingConditions->setChecked(s.extraPaddingForConditionsIfConfusingAlign);
m_ui->alignAssignments->setChecked(s.alignAssignments);
+ m_ui->preferGetterNamesWithoutGet->setChecked(s.preferGetterNameWithoutGetPrefix);
m_blockUpdates = wasBlocked;
if (preview)
updatePreview();
diff --git a/src/plugins/cpptools/cppcodestylesettingspage.ui b/src/plugins/cpptools/cppcodestylesettingspage.ui
index 0206b96549..9934259608 100644
--- a/src/plugins/cpptools/cppcodestylesettingspage.ui
+++ b/src/plugins/cpptools/cppcodestylesettingspage.ui
@@ -484,6 +484,33 @@ if they would align to the next line</string>
</item>
</layout>
</widget>
+ <widget class="QWidget" name="getterSetterTab">
+ <attribute name="title">
+ <string>Getter and Setter</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_7">
+ <item>
+ <widget class="QCheckBox" name="preferGetterNamesWithoutGet">
+ <property name="text">
+ <string>Prefer getter names without &quot;get&quot;</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_7">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
</widget>
</item>
</layout>