@@ -248,6 +248,16 @@ void MessageDeclarationPrinter::printProperties()
248248 }
249249 }
250250
251+ for (int i = 0 ; i < mDescriptor ->field_count (); i++) {
252+ const FieldDescriptor *field = mDescriptor ->field (i);
253+
254+ if (!field->is_optional ()) {
255+ continue ;
256+ }
257+
258+ mPrinter ->Print (common::produceOptionalPropertyMap (field, mDescriptor ), Templates::ReadOnlyPropertyTemplate);
259+ }
260+
251261 Outdent ();
252262}
253263
@@ -263,6 +273,12 @@ void MessageDeclarationPrinter::printGetters()
263273 mPrinter ->Print (propertyMap, Templates::GetterTemplate);
264274 }
265275
276+ if (field->is_optional ()) {
277+ auto optionalMap = common::produceOptionalPropertyMap (field, mDescriptor );
278+
279+ mPrinter ->Print (optionalMap, Templates::GetterTemplate);
280+ }
281+
266282 if (field->is_repeated ()) {
267283 mPrinter ->Print (propertyMap, Templates::GetterContainerExtraTemplate);
268284 if (field->type () == FieldDescriptor::TYPE_MESSAGE && !field->is_map ()
@@ -292,6 +308,11 @@ void MessageDeclarationPrinter::printSetters()
292308 break ;
293309 default :
294310 mPrinter ->Print (propertyMap, Templates::SetterTemplate);
311+ if (field->is_optional ()) {
312+ mPrinter ->Print (propertyMap, Templates::EndOptionalSetterTemplate);
313+ } else {
314+ mPrinter ->Print (propertyMap, Templates::EndSetterTemplate);
315+ }
295316 break ;
296317 }
297318 });
@@ -324,7 +345,12 @@ void MessageDeclarationPrinter::printSignals()
324345{
325346 Indent ();
326347 for (int i = 0 ; i < mDescriptor ->field_count (); i++) {
327- mPrinter ->Print (common::producePropertyMap (mDescriptor ->field (i), mDescriptor ), Templates::SignalTemplate);
348+ const auto field = mDescriptor ->field (i);
349+ mPrinter ->Print (common::producePropertyMap (field, mDescriptor ), Templates::SignalTemplate);
350+
351+ if (field->is_optional ()) {
352+ mPrinter ->Print (common::produceOptionalPropertyMap (field, mDescriptor ), Templates::SignalTemplate);
353+ }
328354 }
329355 Outdent ();
330356}
@@ -337,6 +363,11 @@ void MessageDeclarationPrinter::printPrivateMethods()
337363 if (common::hasQmlAlias (field)) {
338364 mPrinter ->Print (propertyMap, Templates::NonScriptableGetterTemplate);
339365 mPrinter ->Print (propertyMap, Templates::NonScriptableSetterTemplate);
366+ if (field->is_optional ()) {
367+ mPrinter ->Print (propertyMap, Templates::EndOptionalSetterTemplate);
368+ } else {
369+ mPrinter ->Print (propertyMap, Templates::EndSetterTemplate);
370+ }
340371 }
341372 });
342373 Outdent ();
@@ -434,6 +465,9 @@ void MessageDeclarationPrinter::printClassMembers()
434465 } else {
435466 mPrinter ->Print (propertyMap, Templates::MemberTemplate);
436467 }
468+ if (field->is_optional ()) {
469+ mPrinter ->Print (common::produceOptionalPropertyMap (field, mDescriptor ), Templates::MemberTemplate);
470+ }
437471 });
438472 Outdent ();
439473}
0 commit comments