moc: Allow anonymous properties

This is private for now. It's very handy to have anonymous properties
for the QML model/delegate adaptors. There are models with only
"singular" model data that doesn't have any sub-properties. Such model
data should be available from the model object via an empty string as
role. This way we can get rid of a lot of special casing.

Task-number: QTBUG-104752
Change-Id: I229e355a7cab064ee1c9f89557bc0244a5d0c90a
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
bb10
Ulf Hermann 2023-03-06 12:04:15 +01:00
parent cac1abb012
commit 566e5e1acf
7 changed files with 315 additions and 190 deletions

View File

@ -30,6 +30,14 @@
QT_BEGIN_NAMESPACE
#ifdef Q_MOC_RUN
#define QT_ANONYMOUS_PROPERTY(text) QT_ANONYMOUS_PROPERTY(text)
#define QT_ANONYMOUS_PRIVATE_PROPERTY(d, text) QT_ANONYMOUS_PRIVATE_PROPERTY(d, text)
#elif !defined QT_NO_META_MACROS
#define QT_ANONYMOUS_PROPERTY(...) QT_ANNOTATE_CLASS(qt_anonymous_property, __VA_ARGS__)
#define QT_ANONYMOUS_PRIVATE_PROPERTY(d, text) QT_ANNOTATE_CLASS2(qt_anonymous_private_property, d, text)
#endif
class QVariant;
class QThreadData;
class QObjectConnectionListVector;

View File

@ -5,12 +5,12 @@
// DO NOT EDIT.
static const short keyword_trans[][128] = {
{0,0,0,0,0,0,0,0,0,586,583,0,0,0,0,0,
{0,0,0,0,0,0,0,0,0,618,615,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
586,252,584,587,8,38,239,585,25,26,236,234,30,235,27,237,
618,252,616,619,8,38,239,617,25,26,236,234,30,235,27,237,
22,22,22,22,22,22,22,22,22,22,34,41,23,39,24,43,
0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
8,21,8,8,8,8,8,8,8,8,8,31,589,32,238,8,
8,21,8,8,8,8,8,8,8,8,8,31,621,32,238,8,
0,1,2,3,4,5,6,7,8,9,8,8,10,11,12,13,
14,8,15,16,17,18,19,20,8,8,8,36,245,37,248,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -91,7 +91,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,290,222,0,0,504,0,0,0,
0,0,0,0,0,0,0,0,290,222,0,0,524,0,0,0,
0,0,0,0,55,0,0,330,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -130,7 +130,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,528,0,0,0,0,0,0,0,0,0,0,357,
0,0,0,0,401,0,0,0,0,0,0,0,0,0,0,357,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -152,7 +152,7 @@ static const short keyword_trans[][128] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,42,0,0,0,28,0,
592,592,592,592,592,592,592,592,592,592,0,0,0,0,0,0,
624,624,624,624,624,624,624,624,624,624,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -311,7 +311,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,591,0,0,0,0,590,
0,0,0,0,0,0,0,0,0,0,623,0,0,0,0,622,
0,0,0,0,0,0,0,0,0,0,0,0,0,258,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -347,21 +347,21 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,501,0,0,0,300,0,0,0,0,0,0,0,0,0,0,
0,521,0,0,0,300,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,482,431,415,423,380,0,491,0,0,0,572,364,358,
393,0,564,479,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,502,451,435,443,380,0,511,0,0,0,604,364,358,
393,0,596,499,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,401,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,421,0,0,0,
0,0,394,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
@ -369,7 +369,23 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,518,0,0,0,0,0,395,
0,0,0,0,0,0,0,0,0,538,0,0,0,0,0,395,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,403,0,0,0,0,0,0,0,0,0,0,0,548,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,582,0,0,0,0,0,415,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
@ -378,7 +394,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,419,0,0,0,0,0,0,0,0,0,0,0,420,
0,0,0,439,0,0,0,0,0,0,0,0,0,0,0,440,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -386,14 +402,14 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,428,
0,0,0,447,0,0,0,0,0,0,0,0,0,0,0,448,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,461,439,0,0,444,0,0,0,453,0,0,
0,0,0,0,0,481,459,0,0,464,0,0,0,473,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
@ -401,7 +417,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,547,0,480,0,0,0,508,0,0,514,0,0,0,
0,0,0,565,0,500,0,0,0,528,0,0,534,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
@ -410,7 +426,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,493,0,540,0,0,0,0,0,0,0,0,0,
0,0,0,0,513,0,558,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -418,7 +434,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
556,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0,
574,0,0,544,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
@ -832,193 +848,225 @@ static const struct
{CHARACTER, 0, 84, 399, CHARACTER},
{CHARACTER, 0, 89, 400, CHARACTER},
{Q_PROPERTY_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 85, 402, CHARACTER},
{CHARACTER, 0, 71, 403, CHARACTER},
{CHARACTER, 0, 73, 404, CHARACTER},
{CHARACTER, 0, 78, 405, CHARACTER},
{CHARACTER, 0, 95, 406, CHARACTER},
{CHARACTER, 0, 77, 407, CHARACTER},
{CHARACTER, 0, 69, 408, CHARACTER},
{CHARACTER, 0, 84, 409, CHARACTER},
{CHARACTER, 0, 65, 410, CHARACTER},
{CHARACTER, 0, 68, 411, CHARACTER},
{CHARACTER, 0, 65, 412, CHARACTER},
{CHARACTER, 0, 84, 413, CHARACTER},
{CHARACTER, 0, 65, 414, CHARACTER},
{CHARACTER, 0, 95, 402, CHARACTER},
{CHARACTER, 46, 0, 0, CHARACTER},
{CHARACTER, 0, 78, 404, CHARACTER},
{CHARACTER, 0, 79, 405, CHARACTER},
{CHARACTER, 0, 78, 406, CHARACTER},
{CHARACTER, 0, 89, 407, CHARACTER},
{CHARACTER, 0, 77, 408, CHARACTER},
{CHARACTER, 0, 79, 409, CHARACTER},
{CHARACTER, 0, 85, 410, CHARACTER},
{CHARACTER, 0, 83, 411, CHARACTER},
{CHARACTER, 0, 95, 412, CHARACTER},
{CHARACTER, 0, 80, 413, CHARACTER},
{CHARACTER, 0, 82, 414, CHARACTER},
{CHARACTER, 47, 0, 0, CHARACTER},
{CHARACTER, 0, 80, 416, CHARACTER},
{CHARACTER, 0, 69, 417, CHARACTER},
{CHARACTER, 0, 82, 418, CHARACTER},
{CHARACTER, 0, 84, 419, CHARACTER},
{CHARACTER, 0, 89, 420, CHARACTER},
{QT_ANONYMOUS_PROPERTY_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 85, 422, CHARACTER},
{CHARACTER, 0, 71, 423, CHARACTER},
{CHARACTER, 0, 73, 424, CHARACTER},
{CHARACTER, 0, 78, 425, CHARACTER},
{CHARACTER, 0, 95, 426, CHARACTER},
{CHARACTER, 0, 77, 427, CHARACTER},
{CHARACTER, 0, 69, 428, CHARACTER},
{CHARACTER, 0, 84, 429, CHARACTER},
{CHARACTER, 0, 65, 430, CHARACTER},
{CHARACTER, 0, 68, 431, CHARACTER},
{CHARACTER, 0, 65, 432, CHARACTER},
{CHARACTER, 0, 84, 433, CHARACTER},
{CHARACTER, 0, 65, 434, CHARACTER},
{Q_PLUGIN_METADATA_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 78, 416, CHARACTER},
{CHARACTER, 0, 85, 417, CHARACTER},
{CHARACTER, 0, 77, 418, CHARACTER},
{Q_ENUM_TOKEN, 46, 0, 0, CHARACTER},
{CHARACTER, 0, 78, 436, CHARACTER},
{CHARACTER, 0, 85, 437, CHARACTER},
{CHARACTER, 0, 77, 438, CHARACTER},
{Q_ENUM_TOKEN, 48, 0, 0, CHARACTER},
{Q_ENUMS_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 78, 421, CHARACTER},
{CHARACTER, 0, 83, 422, CHARACTER},
{CHARACTER, 0, 78, 441, CHARACTER},
{CHARACTER, 0, 83, 442, CHARACTER},
{Q_ENUM_NS_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 76, 424, CHARACTER},
{CHARACTER, 0, 65, 425, CHARACTER},
{CHARACTER, 0, 71, 426, CHARACTER},
{Q_FLAG_TOKEN, 47, 0, 0, CHARACTER},
{CHARACTER, 0, 76, 444, CHARACTER},
{CHARACTER, 0, 65, 445, CHARACTER},
{CHARACTER, 0, 71, 446, CHARACTER},
{Q_FLAG_TOKEN, 49, 0, 0, CHARACTER},
{Q_FLAGS_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 78, 429, CHARACTER},
{CHARACTER, 0, 83, 430, CHARACTER},
{CHARACTER, 0, 78, 449, CHARACTER},
{CHARACTER, 0, 83, 450, CHARACTER},
{Q_FLAG_NS_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 69, 432, CHARACTER},
{CHARACTER, 0, 67, 433, CHARACTER},
{CHARACTER, 0, 76, 434, CHARACTER},
{CHARACTER, 0, 65, 435, CHARACTER},
{CHARACTER, 0, 82, 436, CHARACTER},
{CHARACTER, 0, 69, 437, CHARACTER},
{CHARACTER, 0, 95, 438, CHARACTER},
{CHARACTER, 48, 0, 0, CHARACTER},
{CHARACTER, 0, 76, 440, CHARACTER},
{CHARACTER, 0, 65, 441, CHARACTER},
{CHARACTER, 0, 71, 442, CHARACTER},
{CHARACTER, 0, 83, 443, CHARACTER},
{CHARACTER, 0, 69, 452, CHARACTER},
{CHARACTER, 0, 67, 453, CHARACTER},
{CHARACTER, 0, 76, 454, CHARACTER},
{CHARACTER, 0, 65, 455, CHARACTER},
{CHARACTER, 0, 82, 456, CHARACTER},
{CHARACTER, 0, 69, 457, CHARACTER},
{CHARACTER, 0, 95, 458, CHARACTER},
{CHARACTER, 50, 0, 0, CHARACTER},
{CHARACTER, 0, 76, 460, CHARACTER},
{CHARACTER, 0, 65, 461, CHARACTER},
{CHARACTER, 0, 71, 462, CHARACTER},
{CHARACTER, 0, 83, 463, CHARACTER},
{Q_DECLARE_FLAGS_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 78, 445, CHARACTER},
{CHARACTER, 0, 84, 446, CHARACTER},
{CHARACTER, 0, 69, 447, CHARACTER},
{CHARACTER, 0, 82, 448, CHARACTER},
{CHARACTER, 0, 70, 449, CHARACTER},
{CHARACTER, 0, 65, 450, CHARACTER},
{CHARACTER, 0, 67, 451, CHARACTER},
{CHARACTER, 0, 69, 452, CHARACTER},
{Q_DECLARE_INTERFACE_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 69, 454, CHARACTER},
{CHARACTER, 0, 84, 455, CHARACTER},
{CHARACTER, 0, 65, 456, CHARACTER},
{CHARACTER, 0, 84, 457, CHARACTER},
{CHARACTER, 0, 89, 458, CHARACTER},
{CHARACTER, 0, 80, 459, CHARACTER},
{CHARACTER, 0, 69, 460, CHARACTER},
{Q_DECLARE_METATYPE_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 88, 462, CHARACTER},
{CHARACTER, 0, 84, 463, CHARACTER},
{CHARACTER, 0, 69, 464, CHARACTER},
{CHARACTER, 0, 78, 465, CHARACTER},
{CHARACTER, 0, 83, 466, CHARACTER},
{CHARACTER, 0, 73, 467, CHARACTER},
{CHARACTER, 0, 79, 468, CHARACTER},
{CHARACTER, 0, 78, 469, CHARACTER},
{CHARACTER, 0, 95, 470, CHARACTER},
{CHARACTER, 0, 73, 471, CHARACTER},
{CHARACTER, 0, 78, 472, CHARACTER},
{CHARACTER, 0, 84, 473, CHARACTER},
{CHARACTER, 0, 84, 466, CHARACTER},
{CHARACTER, 0, 69, 467, CHARACTER},
{CHARACTER, 0, 82, 468, CHARACTER},
{CHARACTER, 0, 70, 469, CHARACTER},
{CHARACTER, 0, 65, 470, CHARACTER},
{CHARACTER, 0, 67, 471, CHARACTER},
{CHARACTER, 0, 69, 472, CHARACTER},
{Q_DECLARE_INTERFACE_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 69, 474, CHARACTER},
{CHARACTER, 0, 82, 475, CHARACTER},
{CHARACTER, 0, 70, 476, CHARACTER},
{CHARACTER, 0, 65, 477, CHARACTER},
{CHARACTER, 0, 67, 478, CHARACTER},
{CHARACTER, 0, 69, 452, CHARACTER},
{CHARACTER, 49, 0, 0, CHARACTER},
{CHARACTER, 0, 84, 481, CHARACTER},
{CHARACTER, 0, 83, 427, CHARACTER},
{CHARACTER, 0, 76, 483, CHARACTER},
{CHARACTER, 0, 65, 484, CHARACTER},
{CHARACTER, 0, 83, 485, CHARACTER},
{CHARACTER, 0, 84, 475, CHARACTER},
{CHARACTER, 0, 65, 476, CHARACTER},
{CHARACTER, 0, 84, 477, CHARACTER},
{CHARACTER, 0, 89, 478, CHARACTER},
{CHARACTER, 0, 80, 479, CHARACTER},
{CHARACTER, 0, 69, 480, CHARACTER},
{Q_DECLARE_METATYPE_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 88, 482, CHARACTER},
{CHARACTER, 0, 84, 483, CHARACTER},
{CHARACTER, 0, 69, 484, CHARACTER},
{CHARACTER, 0, 78, 485, CHARACTER},
{CHARACTER, 0, 83, 486, CHARACTER},
{CHARACTER, 0, 73, 487, CHARACTER},
{CHARACTER, 0, 78, 488, CHARACTER},
{CHARACTER, 0, 70, 489, CHARACTER},
{CHARACTER, 0, 79, 490, CHARACTER},
{Q_CLASSINFO_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 79, 488, CHARACTER},
{CHARACTER, 0, 78, 489, CHARACTER},
{CHARACTER, 0, 95, 490, CHARACTER},
{CHARACTER, 0, 73, 491, CHARACTER},
{CHARACTER, 0, 78, 492, CHARACTER},
{CHARACTER, 50, 0, 0, CHARACTER},
{CHARACTER, 0, 84, 493, CHARACTER},
{CHARACTER, 0, 69, 494, CHARACTER},
{CHARACTER, 0, 82, 495, CHARACTER},
{CHARACTER, 0, 70, 496, CHARACTER},
{CHARACTER, 0, 65, 497, CHARACTER},
{CHARACTER, 0, 67, 498, CHARACTER},
{CHARACTER, 0, 69, 499, CHARACTER},
{CHARACTER, 0, 83, 500, CHARACTER},
{Q_INTERFACES_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 108, 502, CHARACTER},
{CHARACTER, 0, 115, 503, CHARACTER},
{SIGNALS, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 111, 505, CHARACTER},
{CHARACTER, 0, 116, 506, CHARACTER},
{CHARACTER, 0, 115, 507, CHARACTER},
{SLOTS, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 71, 509, CHARACTER},
{CHARACTER, 0, 78, 510, CHARACTER},
{CHARACTER, 0, 65, 511, CHARACTER},
{CHARACTER, 0, 76, 512, CHARACTER},
{Q_SIGNAL_TOKEN, 0, 83, 513, CHARACTER},
{Q_SIGNALS_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 79, 515, CHARACTER},
{CHARACTER, 0, 84, 516, CHARACTER},
{Q_SLOT_TOKEN, 0, 83, 517, CHARACTER},
{Q_SLOTS_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 86, 519, CHARACTER},
{CHARACTER, 0, 65, 520, CHARACTER},
{CHARACTER, 0, 84, 521, CHARACTER},
{CHARACTER, 0, 69, 522, CHARACTER},
{CHARACTER, 0, 95, 523, CHARACTER},
{CHARACTER, 0, 69, 472, CHARACTER},
{CHARACTER, 51, 0, 0, CHARACTER},
{CHARACTER, 0, 76, 525, CHARACTER},
{CHARACTER, 0, 79, 526, CHARACTER},
{CHARACTER, 0, 84, 527, CHARACTER},
{Q_PRIVATE_SLOT_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 95, 529, CHARACTER},
{CHARACTER, 0, 77, 530, CHARACTER},
{CHARACTER, 0, 79, 531, CHARACTER},
{CHARACTER, 0, 67, 532, CHARACTER},
{CHARACTER, 0, 95, 533, CHARACTER},
{CHARACTER, 0, 67, 534, CHARACTER},
{CHARACTER, 0, 84, 501, CHARACTER},
{CHARACTER, 0, 83, 447, CHARACTER},
{CHARACTER, 0, 76, 503, CHARACTER},
{CHARACTER, 0, 65, 504, CHARACTER},
{CHARACTER, 0, 83, 505, CHARACTER},
{CHARACTER, 0, 83, 506, CHARACTER},
{CHARACTER, 0, 73, 507, CHARACTER},
{CHARACTER, 0, 78, 508, CHARACTER},
{CHARACTER, 0, 70, 509, CHARACTER},
{CHARACTER, 0, 79, 510, CHARACTER},
{Q_CLASSINFO_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 78, 512, CHARACTER},
{CHARACTER, 52, 0, 0, CHARACTER},
{CHARACTER, 0, 69, 514, CHARACTER},
{CHARACTER, 0, 82, 515, CHARACTER},
{CHARACTER, 0, 70, 516, CHARACTER},
{CHARACTER, 0, 65, 517, CHARACTER},
{CHARACTER, 0, 67, 518, CHARACTER},
{CHARACTER, 0, 69, 519, CHARACTER},
{CHARACTER, 0, 83, 520, CHARACTER},
{Q_INTERFACES_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 108, 522, CHARACTER},
{CHARACTER, 0, 115, 523, CHARACTER},
{SIGNALS, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 111, 525, CHARACTER},
{CHARACTER, 0, 116, 526, CHARACTER},
{CHARACTER, 0, 115, 527, CHARACTER},
{SLOTS, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 71, 529, CHARACTER},
{CHARACTER, 0, 78, 530, CHARACTER},
{CHARACTER, 0, 65, 531, CHARACTER},
{CHARACTER, 0, 76, 532, CHARACTER},
{Q_SIGNAL_TOKEN, 0, 83, 533, CHARACTER},
{Q_SIGNALS_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 79, 535, CHARACTER},
{CHARACTER, 0, 77, 536, CHARACTER},
{CHARACTER, 0, 80, 537, CHARACTER},
{CHARACTER, 0, 65, 538, CHARACTER},
{CHARACTER, 0, 84, 539, CHARACTER},
{Q_MOC_COMPAT_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 79, 541, CHARACTER},
{CHARACTER, 0, 75, 542, CHARACTER},
{CHARACTER, 0, 65, 543, CHARACTER},
{CHARACTER, 0, 66, 544, CHARACTER},
{CHARACTER, 0, 84, 536, CHARACTER},
{Q_SLOT_TOKEN, 0, 83, 537, CHARACTER},
{Q_SLOTS_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 86, 539, CHARACTER},
{CHARACTER, 0, 65, 540, CHARACTER},
{CHARACTER, 0, 84, 541, CHARACTER},
{CHARACTER, 0, 69, 542, CHARACTER},
{CHARACTER, 0, 95, 543, CHARACTER},
{CHARACTER, 53, 0, 0, CHARACTER},
{CHARACTER, 0, 76, 545, CHARACTER},
{CHARACTER, 0, 69, 546, CHARACTER},
{CHARACTER, 0, 79, 546, CHARACTER},
{CHARACTER, 0, 84, 547, CHARACTER},
{Q_PRIVATE_SLOT_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 79, 549, CHARACTER},
{CHARACTER, 0, 67, 550, CHARACTER},
{CHARACTER, 0, 95, 551, CHARACTER},
{CHARACTER, 0, 67, 552, CHARACTER},
{CHARACTER, 0, 79, 553, CHARACTER},
{CHARACTER, 0, 77, 554, CHARACTER},
{CHARACTER, 0, 80, 555, CHARACTER},
{CHARACTER, 0, 65, 556, CHARACTER},
{CHARACTER, 0, 84, 557, CHARACTER},
{Q_MOC_COMPAT_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 79, 559, CHARACTER},
{CHARACTER, 0, 75, 560, CHARACTER},
{CHARACTER, 0, 65, 561, CHARACTER},
{CHARACTER, 0, 66, 562, CHARACTER},
{CHARACTER, 0, 76, 563, CHARACTER},
{CHARACTER, 0, 69, 564, CHARACTER},
{Q_INVOKABLE_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 82, 548, CHARACTER},
{CHARACTER, 0, 73, 549, CHARACTER},
{CHARACTER, 0, 80, 550, CHARACTER},
{CHARACTER, 0, 84, 551, CHARACTER},
{CHARACTER, 0, 65, 552, CHARACTER},
{CHARACTER, 0, 66, 553, CHARACTER},
{CHARACTER, 0, 76, 554, CHARACTER},
{CHARACTER, 0, 69, 555, CHARACTER},
{Q_SCRIPTABLE_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 82, 557, CHARACTER},
{CHARACTER, 0, 79, 558, CHARACTER},
{CHARACTER, 0, 80, 559, CHARACTER},
{CHARACTER, 0, 69, 560, CHARACTER},
{CHARACTER, 0, 82, 561, CHARACTER},
{CHARACTER, 0, 84, 562, CHARACTER},
{CHARACTER, 0, 89, 563, CHARACTER},
{Q_PRIVATE_PROPERTY_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 69, 565, CHARACTER},
{CHARACTER, 0, 86, 566, CHARACTER},
{CHARACTER, 0, 82, 566, CHARACTER},
{CHARACTER, 0, 73, 567, CHARACTER},
{CHARACTER, 0, 83, 568, CHARACTER},
{CHARACTER, 0, 73, 569, CHARACTER},
{CHARACTER, 0, 79, 570, CHARACTER},
{CHARACTER, 0, 78, 571, CHARACTER},
{CHARACTER, 0, 80, 568, CHARACTER},
{CHARACTER, 0, 84, 569, CHARACTER},
{CHARACTER, 0, 65, 570, CHARACTER},
{CHARACTER, 0, 66, 571, CHARACTER},
{CHARACTER, 0, 76, 572, CHARACTER},
{CHARACTER, 0, 69, 573, CHARACTER},
{Q_SCRIPTABLE_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 82, 575, CHARACTER},
{CHARACTER, 0, 79, 576, CHARACTER},
{CHARACTER, 0, 80, 577, CHARACTER},
{CHARACTER, 0, 69, 578, CHARACTER},
{CHARACTER, 0, 82, 579, CHARACTER},
{CHARACTER, 0, 84, 580, CHARACTER},
{CHARACTER, 0, 89, 581, CHARACTER},
{Q_PRIVATE_PROPERTY_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 86, 583, CHARACTER},
{CHARACTER, 0, 65, 584, CHARACTER},
{CHARACTER, 0, 84, 585, CHARACTER},
{CHARACTER, 0, 69, 586, CHARACTER},
{CHARACTER, 0, 95, 587, CHARACTER},
{CHARACTER, 0, 80, 588, CHARACTER},
{CHARACTER, 0, 82, 589, CHARACTER},
{CHARACTER, 0, 79, 590, CHARACTER},
{CHARACTER, 0, 80, 591, CHARACTER},
{CHARACTER, 0, 69, 592, CHARACTER},
{CHARACTER, 0, 82, 593, CHARACTER},
{CHARACTER, 0, 84, 594, CHARACTER},
{CHARACTER, 0, 89, 595, CHARACTER},
{QT_ANONYMOUS_PRIVATE_PROPERTY_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 69, 597, CHARACTER},
{CHARACTER, 0, 86, 598, CHARACTER},
{CHARACTER, 0, 73, 599, CHARACTER},
{CHARACTER, 0, 83, 600, CHARACTER},
{CHARACTER, 0, 73, 601, CHARACTER},
{CHARACTER, 0, 79, 602, CHARACTER},
{CHARACTER, 0, 78, 603, CHARACTER},
{Q_REVISION_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 79, 573, CHARACTER},
{CHARACTER, 0, 67, 574, CHARACTER},
{CHARACTER, 0, 95, 575, CHARACTER},
{CHARACTER, 0, 73, 576, CHARACTER},
{CHARACTER, 0, 78, 577, CHARACTER},
{CHARACTER, 0, 67, 578, CHARACTER},
{CHARACTER, 0, 76, 579, CHARACTER},
{CHARACTER, 0, 85, 580, CHARACTER},
{CHARACTER, 0, 68, 581, CHARACTER},
{CHARACTER, 0, 69, 582, CHARACTER},
{CHARACTER, 0, 79, 605, CHARACTER},
{CHARACTER, 0, 67, 606, CHARACTER},
{CHARACTER, 0, 95, 607, CHARACTER},
{CHARACTER, 0, 73, 608, CHARACTER},
{CHARACTER, 0, 78, 609, CHARACTER},
{CHARACTER, 0, 67, 610, CHARACTER},
{CHARACTER, 0, 76, 611, CHARACTER},
{CHARACTER, 0, 85, 612, CHARACTER},
{CHARACTER, 0, 68, 613, CHARACTER},
{CHARACTER, 0, 69, 614, CHARACTER},
{Q_MOC_INCLUDE_TOKEN, 0, 0, 0, CHARACTER},
{NEWLINE, 0, 0, 0, NOTOKEN},
{QUOTE, 0, 0, 0, NOTOKEN},
{SINGLEQUOTE, 0, 0, 0, NOTOKEN},
{WHITESPACE, 0, 0, 0, NOTOKEN},
{HASH, 0, 35, 588, HASH},
{HASH, 0, 35, 620, HASH},
{PP_HASHHASH, 0, 0, 0, NOTOKEN},
{BACKSLASH, 0, 0, 0, NOTOKEN},
{CPP_COMMENT, 0, 0, 0, NOTOKEN},

View File

@ -862,7 +862,10 @@ void Moc::parse()
error("Template classes not supported by Q_GADGET");
break;
case Q_PROPERTY_TOKEN:
parseProperty(&def);
parseProperty(&def, Named);
break;
case QT_ANONYMOUS_PROPERTY_TOKEN:
parseProperty(&def, Anonymous);
break;
case Q_PLUGIN_METADATA_TOKEN:
parsePluginData(&def);
@ -897,7 +900,10 @@ void Moc::parse()
parseSlotInPrivate(&def, access);
break;
case Q_PRIVATE_PROPERTY_TOKEN:
parsePrivateProperty(&def);
parsePrivateProperty(&def, Named);
break;
case QT_ANONYMOUS_PRIVATE_PROPERTY_TOKEN:
parsePrivateProperty(&def, Anonymous);
break;
case ENUM: {
EnumDef enumDef;
@ -1244,7 +1250,7 @@ void Moc::parseSignals(ClassDef *def)
}
}
void Moc::createPropertyDef(PropertyDef &propDef, int propertyIndex)
void Moc::createPropertyDef(PropertyDef &propDef, int propertyIndex, Moc::PropertyMode mode)
{
propDef.location = index;
propDef.relativeIndex = propertyIndex;
@ -1274,8 +1280,10 @@ void Moc::createPropertyDef(PropertyDef &propDef, int propertyIndex)
propDef.type = type;
next();
propDef.name = lexem();
if (mode == Moc::Named) {
next();
propDef.name = lexem();
}
parsePropertyAttributes(propDef);
}
@ -1416,11 +1424,11 @@ void Moc::parsePropertyAttributes(PropertyDef &propDef)
}
}
void Moc::parseProperty(ClassDef *def)
void Moc::parseProperty(ClassDef *def, Moc::PropertyMode mode)
{
next(LPAREN);
PropertyDef propDef;
createPropertyDef(propDef, int(def->propertyList.size()));
createPropertyDef(propDef, int(def->propertyList.size()), mode);
next(RPAREN);
def->propertyList += propDef;
@ -1506,7 +1514,7 @@ QByteArray Moc::parsePropertyAccessor()
return accessor;
}
void Moc::parsePrivateProperty(ClassDef *def)
void Moc::parsePrivateProperty(ClassDef *def, Moc::PropertyMode mode)
{
next(LPAREN);
PropertyDef propDef;
@ -1514,7 +1522,7 @@ void Moc::parsePrivateProperty(ClassDef *def)
next(COMMA);
createPropertyDef(propDef, int(def->propertyList.size()));
createPropertyDef(propDef, int(def->propertyList.size()), mode);
def->propertyList += propDef;
}

View File

@ -102,6 +102,8 @@ Q_DECLARE_TYPEINFO(FunctionDef, Q_RELOCATABLE_TYPE);
struct PropertyDef
{
bool stdCppSet() const {
if (name.isEmpty())
return false;
QByteArray s("set");
s += QtMiscUtils::toAsciiUpper(name[0]);
s += name.mid(1);
@ -197,6 +199,8 @@ Q_DECLARE_TYPEINFO(NamespaceDef, Q_RELOCATABLE_TYPE);
class Moc : public Parser
{
public:
enum PropertyMode { Named, Anonymous };
Moc()
: noInclude(false), mustIncludeQPluginH(false), requireCompleteTypes(false)
{}
@ -238,9 +242,11 @@ public:
void parseSlots(ClassDef *def, FunctionDef::Access access);
void parseSignals(ClassDef *def);
void parseProperty(ClassDef *def);
void parseProperty(ClassDef *def, PropertyMode mode);
void parsePluginData(ClassDef *def);
void createPropertyDef(PropertyDef &def, int propertyIndex);
void createPropertyDef(PropertyDef &def, int propertyIndex, PropertyMode mode);
void parsePropertyAttributes(PropertyDef &propDef);
void parseEnumOrFlag(BaseDef *def, bool isFlag);
void parseFlag(BaseDef *def);
@ -253,7 +259,7 @@ public:
void parseMocInclude();
void parseSlotInPrivate(ClassDef *def, FunctionDef::Access access);
QByteArray parsePropertyAccessor();
void parsePrivateProperty(ClassDef *def);
void parsePrivateProperty(ClassDef *def, PropertyMode mode);
void parseFunctionArguments(FunctionDef *def);

View File

@ -133,6 +133,7 @@ QT_BEGIN_NAMESPACE
F(Q_NAMESPACE_TOKEN) \
F(Q_NAMESPACE_EXPORT_TOKEN) \
F(Q_PROPERTY_TOKEN) \
F(QT_ANONYMOUS_PROPERTY_TOKEN) \
F(Q_PLUGIN_METADATA_TOKEN) \
F(Q_ENUMS_TOKEN) \
F(Q_ENUM_TOKEN) \
@ -154,6 +155,7 @@ QT_BEGIN_NAMESPACE
F(Q_INVOKABLE_TOKEN) \
F(Q_SCRIPTABLE_TOKEN) \
F(Q_PRIVATE_PROPERTY_TOKEN) \
F(QT_ANONYMOUS_PRIVATE_PROPERTY_TOKEN) \
F(Q_REVISION_TOKEN) \
F(Q_MOC_INCLUDE_TOKEN) \
F(SPECIAL_TREATMENT_MARK) \

View File

@ -193,6 +193,7 @@ static const Keyword keywords[] = {
{ "Q_GADGET", "Q_GADGET_TOKEN" },
{ "Q_GADGET_EXPORT", "Q_GADGET_EXPORT_TOKEN" },
{ "Q_PROPERTY", "Q_PROPERTY_TOKEN" },
{ "QT_ANONYMOUS_PROPERTY", "QT_ANONYMOUS_PROPERTY_TOKEN" },
{ "Q_PLUGIN_METADATA", "Q_PLUGIN_METADATA_TOKEN" },
{ "Q_ENUMS", "Q_ENUMS_TOKEN" },
{ "Q_ENUM", "Q_ENUM_TOKEN" },
@ -218,6 +219,7 @@ static const Keyword keywords[] = {
{ "Q_SLOT", "Q_SLOT_TOKEN" },
{ "Q_SCRIPTABLE", "Q_SCRIPTABLE_TOKEN" },
{ "Q_PRIVATE_PROPERTY", "Q_PRIVATE_PROPERTY_TOKEN" },
{ "QT_ANONYMOUS_PRIVATE_PROPERTY", "QT_ANONYMOUS_PRIVATE_PROPERTY_TOKEN" },
{ "Q_REVISION", "Q_REVISION_TOKEN" },
{ "Q_MOC_INCLUDE", "Q_MOC_INCLUDE_TOKEN" },
{ "\n", "NEWLINE" },

View File

@ -11,6 +11,8 @@
#include <qversionnumber.h>
#include <qregularexpression.h>
#include <private/qobject_p.h>
#include "using-namespaces.h"
#include "assign-namespace.h"
#include "no-keywords.h"
@ -704,6 +706,7 @@ private slots:
void templateGtGt();
void qprivateslots();
void qprivateproperties();
void anonymousProperties();
void warnOnPropertyWithoutREAD();
void constructors();
void typenameWithUnsigned();
@ -1642,6 +1645,54 @@ void tst_Moc::qprivateproperties()
QVERIFY(zapBindable.isBindable());
}
class AnonymousPropertyTest1 : public QObject
{
Q_OBJECT
QT_ANONYMOUS_PROPERTY(int READ foo WRITE setFoo)
public:
int foo() { return mFoo ; }
void setFoo(int value) { mFoo = value; }
private:
int mFoo = 0;
};
class AnonymousPropertyTest2 : public QObject
{
Q_OBJECT
QT_ANONYMOUS_PRIVATE_PROPERTY(d, int READ bar WRITE setBar)
class MyDPointer {
public:
int bar() { return mBar ; }
void setBar(int value) { mBar = value; }
private:
int mBar = 0;
};
public:
AnonymousPropertyTest2(QObject *parent = nullptr) : QObject(parent), d (new MyDPointer) {}
MyDPointer *d_func() {return d.data();}
const MyDPointer *d_func() const {return d.data();}
private:
QScopedPointer<MyDPointer> d;
};
void tst_Moc::anonymousProperties()
{
AnonymousPropertyTest1 test1;
test1.setProperty("", 17);
QCOMPARE(test1.property(""), QVariant::fromValue(17));
AnonymousPropertyTest2 test2;
test2.setProperty("", 27);
QCOMPARE(test2.property(""), QVariant::fromValue(27));
}
void tst_Moc::warnOnPropertyWithoutREAD()
{
#ifdef MOC_CROSS_COMPILED