diff --git a/src/plugins/cppeditor/cppeditorconstants.h b/src/plugins/cppeditor/cppeditorconstants.h index 86a6c218099..6eb24c688b1 100644 --- a/src/plugins/cppeditor/cppeditorconstants.h +++ b/src/plugins/cppeditor/cppeditorconstants.h @@ -49,6 +49,7 @@ const char QUICK_FIX_SETTING_SETTER_PARAMETER_NAME[] = "SetterParameterName"; const char QUICK_FIX_SETTING_CPP_FILE_NAMESPACE_HANDLING[] = "CppFileNamespaceHandling"; const char QUICK_FIX_SETTING_MEMBER_VARIABEL_NAME_TEMPLATE[] = "MemberVariableNameTemplate"; const char QUICK_FIX_SETTING_VALUE_TYPES[] = "ValueTypes"; +const char QUICK_FIX_SETTING_RETURN_BY_CONST_REF[] = "ReturnNonValueTypesByConstRef"; const char QUICK_FIX_SETTING_CUSTOM_TEMPLATES[] = "CustomTemplate"; const char QUICK_FIX_SETTING_CUSTOM_TEMPLATE_TYPES[] = "Types"; const char QUICK_FIX_SETTING_CUSTOM_TEMPLATE_COMPARISON[] = "Comparison"; diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index 2dc4812c719..0e5ad70b8e0 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -2722,6 +2722,7 @@ void QuickfixTest::testGenerateGetterSetterValueTypes() s->getterInCppFileFrom = 0; s->getterNameTemplate = "get"; s->valueTypes << "Value"; + s->returnByConstRef = true; GenerateGetterSetter factory; QuickFixOperationTest(testDocuments, &factory, ProjectExplorer::HeaderPaths(), operation); @@ -3434,6 +3435,7 @@ public: s->getterOutsideClassFrom = 0; s->getterInCppFileFrom = 0; s->getterNameTemplate = "get"; + s->returnByConstRef = true; GenerateGetterSetter factory; QuickFixOperationTest(testDocuments, &factory, ProjectExplorer::HeaderPaths(), 1); @@ -3615,6 +3617,7 @@ void QuickfixTest::testGenerateGettersSetters() s->setterParameterNameTemplate = "value"; s->setterOutsideClassFrom = 1; s->getterOutsideClassFrom = 1; + s->returnByConstRef = true; TestFactory factory; QuickFixOperationTest({CppTestDocument::create("file.h", original, expected)}, &factory); diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index c2c91acec70..b1273e53366 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -3881,7 +3881,7 @@ void GetterSetterRefactoringHelper::performGeneration(ExistingGetterSetterData d } const FullySpecifiedType returnTypeHeader = [&] { if (!getSetTemplate.returnTypeTemplate.has_value()) - return parameterType; + return m_settings->returnByConstRef ? parameterType : memberVariableType; QString typeTemplate = getSetTemplate.returnTypeTemplate.value(); if (returnTypeTemplateParameter.has_value()) typeTemplate.replace(Pattern::TEMPLATE_PARAMETER_PATTERN, @@ -3947,7 +3947,7 @@ void GetterSetterRefactoringHelper::performGeneration(ExistingGetterSetterData d data.clazz, targetFile, targetLoc); - if (!isValueType) + if (m_settings->returnByConstRef && !isValueType) return makeConstRef(returnType); return returnType; } diff --git a/src/plugins/cppeditor/cppquickfixsettings.cpp b/src/plugins/cppeditor/cppquickfixsettings.cpp index 372efd5dcd0..e435607f019 100644 --- a/src/plugins/cppeditor/cppquickfixsettings.cpp +++ b/src/plugins/cppeditor/cppquickfixsettings.cpp @@ -79,6 +79,8 @@ void CppQuickFixSettings::loadSettingsFrom(QSettings *s) def.memberVariableNameTemplate) .toString(); valueTypes = s->value(Constants::QUICK_FIX_SETTING_VALUE_TYPES, def.valueTypes).toStringList(); + returnByConstRef = s->value(Constants::QUICK_FIX_SETTING_RETURN_BY_CONST_REF, + def.returnByConstRef).toBool(); customTemplates = def.customTemplates; int size = s->beginReadArray(Constants::QUICK_FIX_SETTING_CUSTOM_TEMPLATES); if (size > 0) @@ -171,6 +173,10 @@ void CppQuickFixSettings::saveSettingsTo(QSettings *s) Constants::QUICK_FIX_SETTING_VALUE_TYPES, valueTypes, def.valueTypes); + QtcSettings::setValueWithDefault(s, + Constants::QUICK_FIX_SETTING_RETURN_BY_CONST_REF, + returnByConstRef, + def.returnByConstRef); if (customTemplates == def.customTemplates) { s->remove(Constants::QUICK_FIX_SETTING_CUSTOM_TEMPLATES); } else { diff --git a/src/plugins/cppeditor/cppquickfixsettings.h b/src/plugins/cppeditor/cppquickfixsettings.h index 0ac2ed91f86..ea16c870fb9 100644 --- a/src/plugins/cppeditor/cppquickfixsettings.h +++ b/src/plugins/cppeditor/cppquickfixsettings.h @@ -129,6 +129,7 @@ public: MissingNamespaceHandling cppFileNamespaceHandling = MissingNamespaceHandling::CreateMissing; QString memberVariableNameTemplate = "m_"; QStringList valueTypes; // if contains use value. Ignores namespaces and template parameters + bool returnByConstRef = false; std::vector customTemplates; }; } // namespace CppEditor diff --git a/src/plugins/cppeditor/cppquickfixsettingswidget.cpp b/src/plugins/cppeditor/cppquickfixsettingswidget.cpp index 4ac63724d7e..9314444c8d1 100644 --- a/src/plugins/cppeditor/cppquickfixsettingswidget.cpp +++ b/src/plugins/cppeditor/cppquickfixsettingswidget.cpp @@ -79,6 +79,7 @@ e.g. name = "m_test_foo_": QObject::connect(this->ui->pushButton_addValueType, &QPushButton::clicked, then); QObject::connect(this->ui->pushButton_removeValueType, &QPushButton::clicked, then); QObject::connect(this->ui->valueTypes, &QListWidget::itemChanged, then); + QObject::connect(this->ui->returnByConstRefCheckBox, &QCheckBox::clicked, then); QObject::connect(this->ui->lineEdit_customTemplateAssignment, &QLineEdit::textEdited, then); QObject::connect(this->ui->lineEdit_customTemplateComparison, &QLineEdit::textEdited, then); QObject::connect(this->ui->lineEdit_customTemplateReturnExpression, &QLineEdit::textEdited, then); @@ -142,6 +143,7 @@ void CppQuickFixSettingsWidget::loadSettings(CppQuickFixSettings *settings) item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemNeverHasChildren); } + ui->returnByConstRefCheckBox->setChecked(settings->returnByConstRef); ui->listWidget_customTemplates->clear(); for (const auto &customTemplate : settings->customTemplates) { auto item = new QListWidgetItem(customTemplate.types.join(", "), @@ -201,6 +203,7 @@ void CppQuickFixSettingsWidget::saveSettings(CppQuickFixSettings *settings) for (int i = 0; i < ui->valueTypes->count(); ++i) { settings->valueTypes << ui->valueTypes->item(i)->text(); } + settings->returnByConstRef = ui->returnByConstRefCheckBox->isChecked(); settings->customTemplates.clear(); for (int i = 0; i < ui->listWidget_customTemplates->count(); ++i) { auto item = ui->listWidget_customTemplates->item(i); diff --git a/src/plugins/cppeditor/cppquickfixsettingswidget.ui b/src/plugins/cppeditor/cppquickfixsettingswidget.ui index 44ad80f9180..692eddda9bc 100644 --- a/src/plugins/cppeditor/cppquickfixsettingswidget.ui +++ b/src/plugins/cppeditor/cppquickfixsettingswidget.ui @@ -7,7 +7,7 @@ 0 0 641 - 1074 + 1141 @@ -25,9 +25,6 @@ Default - - Qt::AlignCenter - @@ -329,9 +326,6 @@ Default - - Qt::AlignCenter - @@ -350,9 +344,6 @@ Generate Getters - - Qt::AlignCenter - @@ -371,9 +362,6 @@ Generate Setters - - Qt::AlignCenter - @@ -886,6 +874,16 @@ + + + + Return non-value types by const reference + + + false + + +