diff options
author | Lars Knoll <lars.knoll@qt.io> | 2020-08-21 13:00:02 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2020-09-02 22:44:27 +0200 |
commit | e6988d4d0bef2c3f474576250cb305a2f00a688b (patch) | |
tree | 9412573d07041918349dc2542673467739be73ce /src/tools/moc/generator.cpp | |
parent | e638e8a28d74af8129aaaf6b67fabbb5dbdf31e4 (diff) |
Remove QNotifiedProperty and Q_PRIVATE_QPROPERTY
And all related functionality. This is being replaced by
Q_BINDABLE_PROPERTY and Q_OBJECT_BINDABLE_PROPERTY in the
next few commits. The new infrastructure coming will play
nicer along with the existing property system.
Commented out some autotests, that will get reimplemented
with the updated infrastructure.
Change-Id: I50c30bd4d5c6c6b6471f8eb93870e27d86f5a009
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/tools/moc/generator.cpp')
-rw-r--r-- | src/tools/moc/generator.cpp | 318 |
1 files changed, 29 insertions, 289 deletions
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp index c36e01a79a..1d2fa5d1d7 100644 --- a/src/tools/moc/generator.cpp +++ b/src/tools/moc/generator.cpp @@ -671,11 +671,6 @@ void Generator::generateCode() generateSignal(&cdef->signalList[signalindex], signalindex); // -// Generate QProperty forwarding API -// - generateQPropertyApi(); - -// // Generate plugin meta data // generatePluginMetaData(); @@ -1317,46 +1312,21 @@ void Generator::generateStaticMetacall() prefix += p.inPrivateClass + "->"; } - if (!p.qpropertyname.isEmpty() && p.stored != "true") { - // nullptr checks needed. - fprintf(out, " case %d:\n", propindex); - if (p.gspec == PropertyDef::PointerSpec || p.gspec == PropertyDef::ReferenceSpec) { - fprintf(out, " if (auto *source = %s%s)\n", prefix.constData(), p.qpropertyname.constData()); - fprintf(out, " _a[0] = const_cast<void*>(reinterpret_cast<const void*>(%ssource->value()));\n", p.gspec == PropertyDef::ReferenceSpec ? "&" : ""); - fprintf(out, " else\n"); - fprintf(out, " _a[0] = nullptr;\n"); - } else if (cdef->enumDeclarations.value(p.type, false)) { - fprintf(out, " if (auto *source = %s%s)\n", prefix.constData(), p.qpropertyname.constData()); - fprintf(out, " *reinterpret_cast<int*>(_v) = QFlag(source->value()));\n"); - fprintf(out, " else\n"); - fprintf(out, " *reinterpret_cast<int*>(_v) = QFlag(%s())\n;", p.type.constData()); - } else if (!p.read.isEmpty()) { - fprintf(out, " if (auto *source = %s%s)\n", prefix.constData(), p.qpropertyname.constData()); - fprintf(out, " *reinterpret_cast<%s*>(_v) = source->value();\n", p.type.constData()); - fprintf(out, " else\n"); - fprintf(out, " *reinterpret_cast<%s*>(_v) = %s()\n;", p.type.constData(), p.type.constData()); - } else { - fprintf(out, " *reinterpret_cast< %s*>(_v) = %s%s;\n", - p.type.constData(), prefix.constData(), p.member.constData()); - } - fprintf(out, " break;\n"); - } else { - if (p.gspec == PropertyDef::PointerSpec) - fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(%s%s())); break;\n", - propindex, prefix.constData(), p.read.constData()); - else if (p.gspec == PropertyDef::ReferenceSpec) - fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(&%s%s())); break;\n", - propindex, prefix.constData(), p.read.constData()); - else if (cdef->enumDeclarations.value(p.type, false)) - fprintf(out, " case %d: *reinterpret_cast<int*>(_v) = QFlag(%s%s()); break;\n", - propindex, prefix.constData(), p.read.constData()); - else if (!p.read.isEmpty()) - fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s(); break;\n", - propindex, p.type.constData(), prefix.constData(), p.read.constData()); - else - fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s; break;\n", - propindex, p.type.constData(), prefix.constData(), p.member.constData()); - } + if (p.gspec == PropertyDef::PointerSpec) + fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(%s%s())); break;\n", + propindex, prefix.constData(), p.read.constData()); + else if (p.gspec == PropertyDef::ReferenceSpec) + fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(&%s%s())); break;\n", + propindex, prefix.constData(), p.read.constData()); + else if (cdef->enumDeclarations.value(p.type, false)) + fprintf(out, " case %d: *reinterpret_cast<int*>(_v) = QFlag(%s%s()); break;\n", + propindex, prefix.constData(), p.read.constData()); + else if (!p.read.isEmpty()) + fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s(); break;\n", + propindex, p.type.constData(), prefix.constData(), p.read.constData()); + else + fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s; break;\n", + propindex, p.type.constData(), prefix.constData(), p.member.constData()); } fprintf(out, " default: break;\n"); fprintf(out, " }\n"); @@ -1382,35 +1352,11 @@ void Generator::generateStaticMetacall() prefix += p.inPrivateClass + "->"; } if (cdef->enumDeclarations.value(p.type, false)) { - if (!p.qpropertyname.isEmpty() && p.stored != "true") { - fprintf(out, " case %d:\n", propindex); - fprintf(out, " if (auto *destination = %s%s)\n", prefix.constData(), p.qpropertyname.constData()); - fprintf(out, " destination->setValue(QFlag(*reinterpret_cast<int*>(_v)));"); - fprintf(out, " break;"); - } else { - fprintf(out, " case %d: %s%s(QFlag(*reinterpret_cast<int*>(_v))); break;\n", - propindex, prefix.constData(), p.write.constData()); - } + fprintf(out, " case %d: %s%s(QFlag(*reinterpret_cast<int*>(_v))); break;\n", + propindex, prefix.constData(), p.write.constData()); } else if (!p.write.isEmpty()) { - QByteArray optionalQPropertyOwner; - if (p.isQPropertyWithNotifier) { - optionalQPropertyOwner = "_t"; - if (p.inPrivateClass.size()) { - optionalQPropertyOwner += "->"; - optionalQPropertyOwner += p.inPrivateClass; - } - optionalQPropertyOwner += ", "; - } - - if (!p.qpropertyname.isEmpty() && p.stored != "true") { - fprintf(out, " case %d:\n", propindex); - fprintf(out, " if (auto *destination = %s%s)\n", prefix.constData(), p.qpropertyname.constData()); - fprintf(out, " destination->setValue(%s*reinterpret_cast<%s*>(_v));\n", optionalQPropertyOwner.constData(), p.type.constData()); - fprintf(out, " break;\n"); - } else { - fprintf(out, " case %d: %s%s(%s*reinterpret_cast< %s*>(_v)); break;\n", - propindex, prefix.constData(), p.write.constData(), optionalQPropertyOwner.constData(), p.type.constData()); - } + fprintf(out, " case %d: %s%s(*reinterpret_cast< %s*>(_v)); break;\n", + propindex, prefix.constData(), p.write.constData(), p.type.constData()); } else { fprintf(out, " case %d:\n", propindex); fprintf(out, " if (%s%s != *reinterpret_cast< %s*>(_v)) {\n", @@ -1458,6 +1404,7 @@ void Generator::generateStaticMetacall() } fprintf(out, " }"); +#if 0 fprintf(out, " else "); fprintf(out, "if (_c == QMetaObject::RegisterQPropertyObserver) {\n"); if (haveQProperties) { @@ -1469,16 +1416,12 @@ void Generator::generateStaticMetacall() if (!p.isQProperty) continue; QByteArray prefix = "_t->"; - if (p.inPrivateClass.size()) { - prefix += p.inPrivateClass + "->"; - } if (p.qpropertyname.isEmpty() || p.stored == "true") { fprintf(out, " case %d: observer->setSource(%s%s); break;\n", - propindex, prefix.constData(), - p.qpropertyname.isEmpty() ? p.name.constData() : p.qpropertyname.constData()); + propindex, prefix.constData(), p.bindingAccessor.constData()); } else { fprintf(out, " case %d: if (auto *source = %s%s) observer->setSource(*source); break; \n", - propindex, prefix.constData(), p.qpropertyname.constData()); + propindex, prefix.constData(), p.bindingAccessor.constData()); } } fprintf(out, " default: break;\n"); @@ -1496,26 +1439,16 @@ void Generator::generateStaticMetacall() if (!p.isQProperty) continue; QByteArray prefix = "_t->"; - QByteArray objectAccessor = "_t"; - if (p.inPrivateClass.size()) { - prefix += p.inPrivateClass + "->"; - objectAccessor += "->"; - objectAccessor += p.inPrivateClass; - } - if (p.isQPropertyWithNotifier) - objectAccessor += ", "; - else - objectAccessor.clear(); if (p.qpropertyname.isEmpty() || p.stored == "true") { - fprintf(out, " case %d: %s%s.setBinding(%s*reinterpret_cast<QPropertyBinding<%s> *>(_a[0])); break;\n", + fprintf(out, " case %d: %s%s.setBinding(*reinterpret_cast<QPropertyBinding<%s> *>(_a[0])); break;\n", propindex, prefix.constData(), - p.qpropertyname.isEmpty() ? p.name.constData() : p.qpropertyname.constData(), - objectAccessor.constData(), p.type.constData()); + p.bindingAccessor.constData(), + p.type.constData()); } else { - fprintf(out, " case %d: if (auto *source = %s%s) source->setBinding(%s*reinterpret_cast<QPropertyBinding<%s> *>(_a[0])); break;\n", - propindex, prefix.constData(), p.qpropertyname.constData(), - objectAccessor.constData(), p.type.constData()); + fprintf(out, " case %d: if (auto *source = %s%s) source->setBinding(*reinterpret_cast<QPropertyBinding<%s> *>(_a[0])); break;\n", + propindex, prefix.constData(), p.bindingAccessor.constData(), + p.type.constData()); } } @@ -1523,7 +1456,7 @@ void Generator::generateStaticMetacall() fprintf(out, " }\n"); } fprintf(out, " }"); - +#endif fprintf(out, "\n#endif // QT_NO_PROPERTIES"); needElse = true; } @@ -1608,199 +1541,6 @@ void Generator::generateSignal(FunctionDef *def,int index) fprintf(out, "}\n"); } -void Generator::generateQPropertyApi() -{ - for (const PrivateQPropertyDef &property: cdef->privateQProperties) { - auto printAccessor = [this, property](bool constAccessor = false) { - const char *constOrNot = constAccessor ? "const " : " "; - fprintf(out, " const size_t propertyMemberOffset = Q_OFFSETOF(%s, %s);\n", cdef->qualified.constData(), property.name.constData()); - fprintf(out, " %sauto *thisPtr = reinterpret_cast<%s%s *>(reinterpret_cast<%schar *>(this) - propertyMemberOffset);\n", constOrNot, constOrNot, cdef->qualified.constData(), constOrNot); - }; - - const bool stored = (property.name == property.storage); - const bool isNotifiedProperty = property.isNotifiedProperty; - - // property accessor - fprintf(out, "\n%s %s::_qt_property_api_%s::value() const\n{\n", - property.type.name.constData(), - cdef->qualified.constData(), - property.name.constData()); - printAccessor(/*const*/true); - if (stored) { - fprintf(out, " return thisPtr->%s->%s.value();\n", property.accessor.constData(), property.storage.constData()); - } else { - fprintf(out, " if (auto *source = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData()); - fprintf(out, " return source->value();\n"); - fprintf(out, " else\n"); - fprintf(out, " return %s();\n", property.type.name.constData()); - } - fprintf(out, "}\n"); - - // property value setter - fprintf(out, "\nvoid %s::_qt_property_api_%s::setValue(%s const &value)\n{\n", - cdef->qualified.constData(), - property.name.constData(), - property.type.name.constData()); - printAccessor(); - if (stored) { - if (isNotifiedProperty) - fprintf(out, " thisPtr->%s->%s.setValue(thisPtr->%s, value);\n", property.accessor.constData(), property.storage.constData(), property.accessor.constData()); - else - fprintf(out, " thisPtr->%s->%s.setValue(value);\n", property.accessor.constData(), property.storage.constData()); - } else { - fprintf(out, " if (auto *target = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData()); - if (isNotifiedProperty) - fprintf(out, " target->setValue(thisPtr->%s, value);\n", property.accessor.constData()); - else - fprintf(out, " target->setValue(value);\n"); - } - fprintf(out, "}\n"); - - // property value move setter - fprintf(out, "\nvoid %s::_qt_property_api_%s::setValue(%s &&value)\n{\n", - cdef->qualified.constData(), - property.name.constData(), - property.type.name.constData()); - printAccessor(); - if (stored) { - if (isNotifiedProperty) - fprintf(out, " thisPtr->%s->%s.setValue(thisPtr->%s, std::move(value));\n", property.accessor.constData(), property.storage.constData(), property.accessor.constData()); - else - fprintf(out, " thisPtr->%s->%s.setValue(std::move(value));\n", property.accessor.constData(), property.storage.constData()); - } else { - fprintf(out, " if (auto *target = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData()); - if (isNotifiedProperty) - fprintf(out, " target->setValue(thisPtr->%s, std::move(value));\n", property.accessor.constData()); - else - fprintf(out, " target->setValue(std::move(value));\n"); - } - fprintf(out, "}\n"); - - // binding setter - fprintf(out, "\nQPropertyBinding<%s> %s::_qt_property_api_%s::setBinding(const QPropertyBinding<%s> &binding)\n{\n", - property.type.name.constData(), - cdef->qualified.constData(), - property.name.constData(), - property.type.name.constData()); - printAccessor(); - if (stored) { - if (isNotifiedProperty) - fprintf(out, " return thisPtr->%s->%s.setBinding(thisPtr->%s, binding);\n", property.accessor.constData(), property.storage.constData(), property.accessor.constData()); - else - fprintf(out, " return thisPtr->%s->%s.setBinding(binding);\n", property.accessor.constData(), property.storage.constData()); - } else { - fprintf(out, " if (auto *target = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData()); - if (isNotifiedProperty) - fprintf(out, " return target->setBinding(thisPtr->%s, binding);\n", property.accessor.constData()); - else - fprintf(out, " return target->setBinding(binding);\n"); - fprintf(out, " else\n"); - fprintf(out, " return QPropertyBinding<%s>();\n", property.type.name.constData()); - } - fprintf(out, "}\n"); - - // binding move setter - fprintf(out, "\nQPropertyBinding<%s> %s::_qt_property_api_%s::setBinding(QPropertyBinding<%s> &&binding)\n{\n", - property.type.name.constData(), - cdef->qualified.constData(), - property.name.constData(), - property.type.name.constData()); - printAccessor(); - if (stored) { - if (isNotifiedProperty) - fprintf(out, " return thisPtr->%s->%s.setBinding(thisPtr->%s, std::move(binding));\n", property.accessor.constData(), property.storage.constData(), property.accessor.constData()); - else - fprintf(out, " return thisPtr->%s->%s.setBinding(std::move(binding));\n", property.accessor.constData(), property.storage.constData()); - } else { - fprintf(out, " if (auto *target = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData()); - if (isNotifiedProperty) - fprintf(out, " return target->setBinding(thisPtr->%s, std::move(binding));\n", property.accessor.constData()); - else - fprintf(out, " return target->setBinding(std::move(binding));\n"); - fprintf(out, " else\n"); - fprintf(out, " return QPropertyBinding<%s>();\n", property.type.name.constData()); - } - fprintf(out, "}\n"); - - // untyped binding setter - fprintf(out, "\nbool %s::_qt_property_api_%s::setBinding(const QUntypedPropertyBinding &binding)\n{\n", - cdef->qualified.constData(), - property.name.constData()); - printAccessor(); - if (stored) { - if (isNotifiedProperty) - fprintf(out, " return thisPtr->%s->%s.setBinding(thisPtr->%s, binding);\n", property.accessor.constData(), property.storage.constData(), property.accessor.constData()); - else - fprintf(out, " return thisPtr->%s->%s.setBinding(binding);\n", property.accessor.constData(), property.storage.constData()); - } else { - fprintf(out, " if (auto *target = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData()); - if (isNotifiedProperty) - fprintf(out, " return target->setBinding(thisPtr->%s, binding);\n", property.accessor.constData()); - else - fprintf(out, " return target->setBinding(binding);\n"); - fprintf(out, " else\n"); - fprintf(out, " return false;\n"); - } - - fprintf(out, "}\n"); - - // binding bool getter - fprintf(out, "\nbool %s::_qt_property_api_%s::hasBinding() const\n{\n", - cdef->qualified.constData(), - property.name.constData()); - printAccessor(/*const*/true); - if (stored) { - fprintf(out, " return thisPtr->%s->%s.hasBinding();\n", property.accessor.constData(), property.storage.constData()); - } else { - fprintf(out, " if (auto *source = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData()); - fprintf(out, " return source->hasBinding();\n"); - fprintf(out, " else\n"); - fprintf(out, " return false;\n"); - } - fprintf(out, "}\n"); - - // binding getter - fprintf(out, "\nQPropertyBinding<%s> %s::_qt_property_api_%s::binding() const\n{\n", - property.type.name.constData(), - cdef->qualified.constData(), - property.name.constData()); - printAccessor(/*const*/true); - if (stored) { - fprintf(out, " return thisPtr->%s->%s.binding();\n", property.accessor.constData(), property.storage.constData()); - } else { - fprintf(out, " if (auto *source = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData()); - fprintf(out, " return source->binding();\n"); - fprintf(out, " else\n"); - fprintf(out, " return QPropertyBinding<%s>();\n", property.type.name.constData()); - } - fprintf(out, "}\n"); - - // binding taker - fprintf(out, "\nQPropertyBinding<%s> %s::_qt_property_api_%s::takeBinding()\n{\n", - property.type.name.constData(), - cdef->qualified.constData(), - property.name.constData()); - printAccessor(); - if (stored) { - fprintf(out, " return thisPtr->%s->%s.takeBinding();\n", property.accessor.constData(), property.storage.constData()); - } else { - fprintf(out, " if (auto *source = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData()); - fprintf(out, " return source->takeBinding();\n"); - fprintf(out, " else\n"); - fprintf(out, " return QPropertyBinding<%s>();\n", property.type.name.constData()); - } - fprintf(out, "}\n"); - - // property setter function - fprintf(out, "\nvoid %s::%s(%s const& value)\n{\n", - cdef->qualified.constData(), - property.setter.constData(), - property.type.name.constData()); - fprintf(out, " this->%s.setValue(value);\n", property.name.constData()); - fprintf(out, "}\n\n"); - } -} - static CborError jsonValueToCbor(CborEncoder *parent, const QJsonValue &v); static CborError jsonObjectToCbor(CborEncoder *parent, const QJsonObject &o) { |