C++ editor: Make generated Q_PROPERTYs FINAL by default

It's bad style to omit the FINAL because such properties can be
shadowed, causing problems in QML.

Change-Id: I9083c69128f6335f584f0a1d28f1fe1e54a02eaf
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
Ulf Hermann
2023-04-19 11:15:33 +02:00
parent e73aaa044e
commit 1c60f57340
4 changed files with 15 additions and 15 deletions

View File

@@ -204,5 +204,5 @@ case $value$:
default: default:
break; break;
}</snippet> }</snippet>
<snippet group="C++" trigger="Q_PROPERTY" id="cpp_q_property" complement="(type name READ name WRITE setName NOTIFY nameChanged)">Q_PROPERTY($type$ $name$ READ $name$ WRITE set$name:c$ NOTIFY $name$Changed)</snippet> <snippet group="C++" trigger="Q_PROPERTY" id="cpp_q_property" complement="(type name READ name WRITE setName NOTIFY nameChanged FINAL)">Q_PROPERTY($type$ $name$ READ $name$ WRITE set$name:c$ NOTIFY $name$Changed FINAL)</snippet>
</snippets> </snippets>

View File

@@ -2315,7 +2315,7 @@ signals:
void newFooBarTestValue(); void newFooBarTestValue();
private: private:
Q_PROPERTY(int fooBar_test READ give_me_foo_bar_test WRITE Seet_FooBar_test RESET set_fooBarTest_toDefault NOTIFY newFooBarTestValue) Q_PROPERTY(int fooBar_test READ give_me_foo_bar_test WRITE Seet_FooBar_test RESET set_fooBarTest_toDefault NOTIFY newFooBarTestValue FINAL)
}; };
)-"; )-";
QTest::addRow("create right names") << QByteArrayList{originalSource, expectedSource} << 4; QTest::addRow("create right names") << QByteArrayList{originalSource, expectedSource} << 4;
@@ -2346,7 +2346,7 @@ signals:
void newFooBarTestValue(); void newFooBarTestValue();
private: private:
Q_PROPERTY(int fooBar_test READ give_me_foo_bar_test WRITE Seet_FooBar_test RESET set_fooBarTest_toDefault NOTIFY newFooBarTestValue) Q_PROPERTY(int fooBar_test READ give_me_foo_bar_test WRITE Seet_FooBar_test RESET set_fooBarTest_toDefault NOTIFY newFooBarTestValue FINAL)
}; };
)-"; )-";
expectedSource = ""; expectedSource = "";
@@ -2355,7 +2355,7 @@ private:
// create from Q_PROPERTY with custom names // create from Q_PROPERTY with custom names
originalSource = R"-( originalSource = R"-(
class Test { class Test {
Q_PROPER@TY(int fooBar_test READ give_me_foo_bar_test WRITE Seet_FooBar_test RESET set_fooBarTest_toDefault NOTIFY newFooBarTestValue) Q_PROPER@TY(int fooBar_test READ give_me_foo_bar_test WRITE Seet_FooBar_test RESET set_fooBarTest_toDefault NOTIFY newFooBarTestValue FINAL)
public: public:
int give_me_foo_bar_test() const int give_me_foo_bar_test() const
@@ -2380,7 +2380,7 @@ signals:
)-"; )-";
expectedSource = R"-( expectedSource = R"-(
class Test { class Test {
Q_PROPERTY(int fooBar_test READ give_me_foo_bar_test WRITE Seet_FooBar_test RESET set_fooBarTest_toDefault NOTIFY newFooBarTestValue) Q_PROPERTY(int fooBar_test READ give_me_foo_bar_test WRITE Seet_FooBar_test RESET set_fooBarTest_toDefault NOTIFY newFooBarTestValue FINAL)
public: public:
int give_me_foo_bar_test() const int give_me_foo_bar_test() const
@@ -2411,14 +2411,14 @@ private:
// create from Q_PROPERTY with custom names // create from Q_PROPERTY with custom names
originalSource = R"-( originalSource = R"-(
class Test { class Test {
Q_PROPE@RTY(int fooBar_test READ give_me_foo_bar_test WRITE Seet_FooBar_test RESET set_fooBarTest_toDefault NOTIFY newFooBarTestValue) Q_PROPE@RTY(int fooBar_test READ give_me_foo_bar_test WRITE Seet_FooBar_test RESET set_fooBarTest_toDefault NOTIFY newFooBarTestValue FINAL)
int mem_fooBar_test; int mem_fooBar_test;
public: public:
}; };
)-"; )-";
expectedSource = R"-( expectedSource = R"-(
class Test { class Test {
Q_PROPERTY(int fooBar_test READ give_me_foo_bar_test WRITE Seet_FooBar_test RESET set_fooBarTest_toDefault NOTIFY newFooBarTestValue) Q_PROPERTY(int fooBar_test READ give_me_foo_bar_test WRITE Seet_FooBar_test RESET set_fooBarTest_toDefault NOTIFY newFooBarTestValue FINAL)
int mem_fooBar_test; int mem_fooBar_test;
public: public:
int give_me_foo_bar_test() const int give_me_foo_bar_test() const
@@ -2766,7 +2766,7 @@ public:
signals: signals:
void barChanged(N2::test *bar); void barChanged(N2::test *bar);
private: private:
Q_PROPERTY(N2::test *bar READ getBar NOTIFY barChanged) Q_PROPERTY(N2::test *bar READ getBar NOTIFY barChanged FINAL)
}; };
})--"; })--";
testDocuments << CppTestDocument::create("file.h", original, expected); testDocuments << CppTestDocument::create("file.h", original, expected);
@@ -3303,7 +3303,7 @@ void QuickfixTest::testGenerateGetterSetterAnonymousClass()
void fooChanged(); void fooChanged();
private: private:
Q_PROPERTY(int foo READ foo WRITE setFoo RESET resetFoo NOTIFY fooChanged) Q_PROPERTY(int foo READ foo WRITE setFoo RESET resetFoo NOTIFY fooChanged FINAL)
} bar; } bar;
)"; )";
testDocuments << CppTestDocument::create("file.h", original, expected); testDocuments << CppTestDocument::create("file.h", original, expected);
@@ -3334,7 +3334,7 @@ public:
signals: signals:
void barChanged(); void barChanged();
private: private:
Q_PROPERTY(int bar READ getBar WRITE setBar RESET resetBar NOTIFY barChanged) Q_PROPERTY(int bar READ getBar WRITE setBar RESET resetBar NOTIFY barChanged FINAL)
}; };
inline int Foo::getBar() const inline int Foo::getBar() const
@@ -3560,8 +3560,8 @@ private:
int m_bar; int m_bar;
int bar2_; int bar2_;
QString bar3; QString bar3;
Q_PROPERTY(int bar2 READ getBar2 WRITE setBar2 RESET resetBar2 NOTIFY bar2Changed) Q_PROPERTY(int bar2 READ getBar2 WRITE setBar2 RESET resetBar2 NOTIFY bar2Changed FINAL)
Q_PROPERTY(QString bar3 READ getBar3 WRITE setBar3 RESET resetBar3 NOTIFY bar3Changed) Q_PROPERTY(QString bar3 READ getBar3 WRITE setBar3 RESET resetBar3 NOTIFY bar3Changed FINAL)
}; };
inline void Foo::resetBar() inline void Foo::resetBar()
{ {

View File

@@ -4182,7 +4182,7 @@ void GetterSetterRefactoringHelper::performGeneration(ExistingGetterSetterData d
propertyDeclaration.append(QLatin1String(" NOTIFY ")).append(data.signalName); propertyDeclaration.append(QLatin1String(" NOTIFY ")).append(data.signalName);
} }
propertyDeclaration.append(QLatin1String(")\n")); propertyDeclaration.append(QLatin1String(" FINAL)\n"));
addHeaderCode(InsertionPointLocator::Private, propertyDeclaration); addHeaderCode(InsertionPointLocator::Private, propertyDeclaration);
} }
} }

View File

@@ -330,7 +330,7 @@ void Internal::TextEditorPlugin::testSnippetParsing_data()
<< QString::fromLatin1("\\\\$test\\\\\\\\$\\\\") << false << Parts(); << QString::fromLatin1("\\\\$test\\\\\\\\$\\\\") << false << Parts();
QTest::newRow("Q_PROPERTY") << QString( QTest::newRow("Q_PROPERTY") << QString(
"Q_PROPERTY($type$ $name$ READ $name$ WRITE set$name:c$ NOTIFY $name$Changed)") "Q_PROPERTY($type$ $name$ READ $name$ WRITE set$name:c$ NOTIFY $name$Changed FINAL)")
<< true << true
<< Parts{SnippetPart("Q_PROPERTY("), << Parts{SnippetPart("Q_PROPERTY("),
SnippetPart("type", 0), SnippetPart("type", 0),
@@ -342,7 +342,7 @@ void Internal::TextEditorPlugin::testSnippetParsing_data()
SnippetPart("name", 1, TCMANGLER_ID), SnippetPart("name", 1, TCMANGLER_ID),
SnippetPart(" NOTIFY "), SnippetPart(" NOTIFY "),
SnippetPart("name", 1), SnippetPart("name", 1),
SnippetPart("Changed)")}; SnippetPart("Changed FINAL)")};
QTest::newRow("open identifier") << QString("$test") << false << Parts(); QTest::newRow("open identifier") << QString("$test") << false << Parts();
QTest::newRow("wrong mangler") << QString("$test:X$") << false << Parts(); QTest::newRow("wrong mangler") << QString("$test:X$") << false << Parts();