forked from qt-creator/qt-creator
CppEditor: Mark generated setter as slot only for QObject-derived class
Fixes: QTCREATORBUG-25789 Change-Id: I79174bcd617eb54540009491031cfae380383c41 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -3236,6 +3236,8 @@ void QuickfixTest::testGenerateGetterSetterOnlySetter()
|
|||||||
QList<TestDocumentPtr> testDocuments;
|
QList<TestDocumentPtr> testDocuments;
|
||||||
QByteArray original;
|
QByteArray original;
|
||||||
QByteArray expected;
|
QByteArray expected;
|
||||||
|
QuickFixSettings s;
|
||||||
|
s->setterAsSlot = true; // To be ignored, as we don't have QObjects here.
|
||||||
|
|
||||||
// Header File
|
// Header File
|
||||||
original =
|
original =
|
||||||
@@ -3263,7 +3265,6 @@ void QuickfixTest::testGenerateGetterSetterOnlySetter()
|
|||||||
"}\n";
|
"}\n";
|
||||||
testDocuments << CppTestDocument::create("file.cpp", original, expected);
|
testDocuments << CppTestDocument::create("file.cpp", original, expected);
|
||||||
|
|
||||||
QuickFixSettings s;
|
|
||||||
s->setterInCppFileFrom = 1;
|
s->setterInCppFileFrom = 1;
|
||||||
s->setterParameterNameTemplate = "value";
|
s->setterParameterNameTemplate = "value";
|
||||||
|
|
||||||
@@ -3547,10 +3548,12 @@ void QuickfixTest::testInsertQtPropertyMembers_data()
|
|||||||
QTest::addColumn<QByteArray>("expected");
|
QTest::addColumn<QByteArray>("expected");
|
||||||
|
|
||||||
QTest::newRow("InsertQtPropertyMembers")
|
QTest::newRow("InsertQtPropertyMembers")
|
||||||
<< _("struct XmarksTheSpot {\n"
|
<< _("struct QObject { void connect(); }\n"
|
||||||
|
"struct XmarksTheSpot : public QObject {\n"
|
||||||
" @Q_PROPERTY(int it READ getIt WRITE setIt RESET resetIt NOTIFY itChanged)\n"
|
" @Q_PROPERTY(int it READ getIt WRITE setIt RESET resetIt NOTIFY itChanged)\n"
|
||||||
"};\n")
|
"};\n")
|
||||||
<< _("struct XmarksTheSpot {\n"
|
<< _("struct QObject { void connect(); }\n"
|
||||||
|
"struct XmarksTheSpot : public QObject {\n"
|
||||||
" Q_PROPERTY(int it READ getIt WRITE setIt RESET resetIt NOTIFY itChanged)\n"
|
" Q_PROPERTY(int it READ getIt WRITE setIt RESET resetIt NOTIFY itChanged)\n"
|
||||||
"\n"
|
"\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
@@ -3582,10 +3585,12 @@ void QuickfixTest::testInsertQtPropertyMembers_data()
|
|||||||
"}\n");
|
"}\n");
|
||||||
|
|
||||||
QTest::newRow("InsertQtPropertyMembersResetWithoutSet")
|
QTest::newRow("InsertQtPropertyMembersResetWithoutSet")
|
||||||
<< _("struct XmarksTheSpot {\n"
|
<< _("struct QObject { void connect(); }\n"
|
||||||
|
"struct XmarksTheSpot : public QObject {\n"
|
||||||
" @Q_PROPERTY(int it READ getIt RESET resetIt NOTIFY itChanged)\n"
|
" @Q_PROPERTY(int it READ getIt RESET resetIt NOTIFY itChanged)\n"
|
||||||
"};\n")
|
"};\n")
|
||||||
<< _("struct XmarksTheSpot {\n"
|
<< _("struct QObject { void connect(); }\n"
|
||||||
|
"struct XmarksTheSpot : public QObject {\n"
|
||||||
" Q_PROPERTY(int it READ getIt RESET resetIt NOTIFY itChanged)\n"
|
" Q_PROPERTY(int it READ getIt RESET resetIt NOTIFY itChanged)\n"
|
||||||
"\n"
|
"\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
@@ -3615,10 +3620,12 @@ void QuickfixTest::testInsertQtPropertyMembers_data()
|
|||||||
"}\n");
|
"}\n");
|
||||||
|
|
||||||
QTest::newRow("InsertQtPropertyMembersResetWithoutSetAndNotify")
|
QTest::newRow("InsertQtPropertyMembersResetWithoutSetAndNotify")
|
||||||
<< _("struct XmarksTheSpot {\n"
|
<< _("struct QObject { void connect(); }\n"
|
||||||
|
"struct XmarksTheSpot : public QObject {\n"
|
||||||
" @Q_PROPERTY(int it READ getIt RESET resetIt)\n"
|
" @Q_PROPERTY(int it READ getIt RESET resetIt)\n"
|
||||||
"};\n")
|
"};\n")
|
||||||
<< _("struct XmarksTheSpot {\n"
|
<< _("struct QObject { void connect(); }\n"
|
||||||
|
"struct XmarksTheSpot : public QObject {\n"
|
||||||
" Q_PROPERTY(int it READ getIt RESET resetIt)\n"
|
" Q_PROPERTY(int it READ getIt RESET resetIt)\n"
|
||||||
"\n"
|
"\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
@@ -3642,13 +3649,15 @@ void QuickfixTest::testInsertQtPropertyMembers_data()
|
|||||||
"}\n");
|
"}\n");
|
||||||
|
|
||||||
QTest::newRow("InsertQtPropertyMembersPrivateBeforePublic")
|
QTest::newRow("InsertQtPropertyMembersPrivateBeforePublic")
|
||||||
<< _("class XmarksTheSpot {\n"
|
<< _("struct QObject { void connect(); }\n"
|
||||||
|
"class XmarksTheSpot : public QObject {\n"
|
||||||
"private:\n"
|
"private:\n"
|
||||||
" @Q_PROPERTY(int it READ getIt WRITE setIt NOTIFY itChanged)\n"
|
" @Q_PROPERTY(int it READ getIt WRITE setIt NOTIFY itChanged)\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" void find();\n"
|
" void find();\n"
|
||||||
"};\n")
|
"};\n")
|
||||||
<< _("class XmarksTheSpot {\n"
|
<< _("struct QObject { void connect(); }\n"
|
||||||
|
"class XmarksTheSpot : public QObject {\n"
|
||||||
"private:\n"
|
"private:\n"
|
||||||
" Q_PROPERTY(int it READ getIt WRITE setIt NOTIFY itChanged)\n"
|
" Q_PROPERTY(int it READ getIt WRITE setIt NOTIFY itChanged)\n"
|
||||||
" int m_it;\n"
|
" int m_it;\n"
|
||||||
|
@@ -3971,9 +3971,20 @@ void GetterSetterRefactoringHelper::performGeneration(ExistingGetterSetterData d
|
|||||||
}
|
}
|
||||||
|
|
||||||
// setter declaration
|
// setter declaration
|
||||||
const InsertionPointLocator::AccessSpec setterAccessSpec = m_settings->setterAsSlot
|
InsertionPointLocator::AccessSpec setterAccessSpec = InsertionPointLocator::Public;
|
||||||
? InsertionPointLocator::PublicSlot
|
if (m_settings->setterAsSlot) {
|
||||||
: InsertionPointLocator::Public;
|
const QByteArray connectName = "connect";
|
||||||
|
const Identifier connectId(connectName.data(), connectName.size());
|
||||||
|
const QList<LookupItem> items = m_operation->context().lookup(&connectId, data.clazz);
|
||||||
|
for (const LookupItem &item : items) {
|
||||||
|
if (item.declaration() && item.declaration()->enclosingClass()
|
||||||
|
&& overview.prettyName(item.declaration()->enclosingClass()->name())
|
||||||
|
== "QObject") {
|
||||||
|
setterAccessSpec = InsertionPointLocator::PublicSlot;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
const auto createSetterBodyWithSignal = [this, &getSetTemplate, &data] {
|
const auto createSetterBodyWithSignal = [this, &getSetTemplate, &data] {
|
||||||
QString body;
|
QString body;
|
||||||
QTextStream setter(&body);
|
QTextStream setter(&body);
|
||||||
|
Reference in New Issue
Block a user