summaryrefslogtreecommitdiffstats
path: root/src/tools/moc/moc.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@qt.io>2020-04-29 15:08:53 +0200
committerFabian Kosmale <fabian.kosmale@qt.io>2020-06-18 17:26:11 +0200
commitb0f445a1526fa43563522d865c5ad1546201003c (patch)
tree2b5756a39eaabfa507b3052da9b21fce3cb9ba88 /src/tools/moc/moc.cpp
parent31d2804e7a777fa4a41e8011bae3279601b08ff3 (diff)
Add support for QNotifiedProperty to the moc
Change the meaning of Q_PRIVATE_QPROPERTY to imply that the property is implemented using a QNotifiedProperty. That requires passing the owner object instance to the value and binding setters. Similarly, detect QNotifiedProperty members like QProperty. Change-Id: If49bbb04c8ccd4a661973888c50d2d556c25034f Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/tools/moc/moc.cpp')
-rw-r--r--src/tools/moc/moc.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp
index 82059e340f..20ff739121 100644
--- a/src/tools/moc/moc.cpp
+++ b/src/tools/moc/moc.cpp
@@ -582,8 +582,12 @@ bool Moc::parseMaybeQProperty(ClassDef *def)
if (!test(IDENTIFIER))
return false;
- if (lexem() != "QProperty")
+ bool hasNotifier = false;
+ if (lexem() == "QNotifiedProperty") {
+ hasNotifier = true;
+ } else if (lexem() != "QProperty") {
return false;
+ }
if (!test(LANGLE))
return false;
@@ -596,7 +600,7 @@ bool Moc::parseMaybeQProperty(ClassDef *def)
if (!test(SEMIC))
return false;
- def->qPropertyMembers.insert(propName);
+ def->qPropertyMembersMaybeWithNotifier.insert(propName, hasNotifier);
return true;
}
@@ -1525,6 +1529,7 @@ void Moc::parsePrivateQProperty(ClassDef *def)
propDef.read = name + ".value";
propDef.write = name + ".setValue";
propDef.isQProperty = true;
+ propDef.isQPropertyWithNotifier = true;
propDef.inPrivateClass = accessor;
propDef.designable = propDef.scriptable = propDef.stored = "true";
propDef.user = "false";
@@ -1868,7 +1873,10 @@ void Moc::checkProperties(ClassDef *cdef)
}
if (p.read.isEmpty() && p.member.isEmpty()) {
- if (!cdef->qPropertyMembers.contains(p.name) && !p.isQProperty) {
+
+ auto qPropertyMemberIt = cdef->qPropertyMembersMaybeWithNotifier.constFind(p.name);
+ const bool knownQPropertyMember = qPropertyMemberIt != cdef->qPropertyMembersMaybeWithNotifier.constEnd();
+ if (!knownQPropertyMember && !p.isQProperty) {
const int rewind = index;
if (p.location >= 0)
index = p.location;
@@ -1885,6 +1893,8 @@ void Moc::checkProperties(ClassDef *cdef)
p.read = p.name + ".value";
p.write = p.name + ".setValue";
p.isQProperty = true;
+ const bool hasNotifier = knownQPropertyMember && qPropertyMemberIt.value();
+ p.isQPropertyWithNotifier = hasNotifier;
p.designable = p.scriptable = p.stored = "true";
p.user = "false";
}