forked from qt-creator/qt-creator
CppEditor: Make value vs const ref return type configurable
... in the quickfix settings. Also change the default: With mandatory RVO and move semantics, value return types are the right choice most of the time. Fixes: QTCREATORBUG-25790 Change-Id: I68fc6c616358478ba893101b3e04aa6bbbe79348 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Christian Stenger <christian.stenger@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
This commit is contained in:
@@ -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";
|
||||
|
@@ -2722,6 +2722,7 @@ void QuickfixTest::testGenerateGetterSetterValueTypes()
|
||||
s->getterInCppFileFrom = 0;
|
||||
s->getterNameTemplate = "get<Name>";
|
||||
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<Name>";
|
||||
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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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 {
|
||||
|
@@ -129,6 +129,7 @@ public:
|
||||
MissingNamespaceHandling cppFileNamespaceHandling = MissingNamespaceHandling::CreateMissing;
|
||||
QString memberVariableNameTemplate = "m_<name>";
|
||||
QStringList valueTypes; // if contains use value. Ignores namespaces and template parameters
|
||||
bool returnByConstRef = false;
|
||||
std::vector<CustomTemplate> customTemplates;
|
||||
};
|
||||
} // namespace CppEditor
|
||||
|
@@ -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);
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>641</width>
|
||||
<height>1074</height>
|
||||
<height>1141</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
@@ -25,9 +25,6 @@
|
||||
<property name="text">
|
||||
<string>Default</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1" alignment="Qt::AlignHCenter">
|
||||
@@ -329,9 +326,6 @@
|
||||
<property name="text">
|
||||
<string>Default</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
@@ -350,9 +344,6 @@
|
||||
<property name="text">
|
||||
<string>Generate Getters</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
@@ -371,9 +362,6 @@
|
||||
<property name="text">
|
||||
<string>Generate Setters</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
@@ -886,6 +874,16 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="returnByConstRefCheckBox">
|
||||
<property name="text">
|
||||
<string>Return non-value types by const reference</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
Reference in New Issue
Block a user