@@ -242,6 +242,16 @@ void MessageDeclarationPrinter::printProperties()
242242 }
243243 }
244244
245+ for (int i = 0 ; i < mDescriptor ->field_count (); i++) {
246+ const FieldDescriptor *field = mDescriptor ->field (i);
247+
248+ if (!field->is_optional ()) {
249+ continue ;
250+ }
251+
252+ mPrinter ->Print (common::produceOptionalPropertyMap (field, mDescriptor ), Templates::ReadOnlyPropertyTemplate);
253+ }
254+
245255 Outdent ();
246256}
247257
@@ -257,6 +267,12 @@ void MessageDeclarationPrinter::printGetters()
257267 mPrinter ->Print (propertyMap, Templates::GetterTemplate);
258268 }
259269
270+ if (field->is_optional ()) {
271+ auto optionalMap = common::produceOptionalPropertyMap (field, mDescriptor );
272+
273+ mPrinter ->Print (optionalMap, Templates::GetterTemplate);
274+ }
275+
260276 if (field->is_repeated ()) {
261277 mPrinter ->Print (propertyMap, Templates::GetterContainerExtraTemplate);
262278 if (field->type () == FieldDescriptor::TYPE_MESSAGE && !field->is_map ()
@@ -286,6 +302,11 @@ void MessageDeclarationPrinter::printSetters()
286302 break ;
287303 default :
288304 mPrinter ->Print (propertyMap, Templates::SetterTemplate);
305+ if (field->is_optional ()) {
306+ mPrinter ->Print (propertyMap, Templates::EndOptionalSetterTemplate);
307+ } else {
308+ mPrinter ->Print (propertyMap, Templates::EndSetterTemplate);
309+ }
289310 break ;
290311 }
291312 });
@@ -318,7 +339,12 @@ void MessageDeclarationPrinter::printSignals()
318339{
319340 Indent ();
320341 for (int i = 0 ; i < mDescriptor ->field_count (); i++) {
321- mPrinter ->Print (common::producePropertyMap (mDescriptor ->field (i), mDescriptor ), Templates::SignalTemplate);
342+ const auto field = mDescriptor ->field (i);
343+ mPrinter ->Print (common::producePropertyMap (field, mDescriptor ), Templates::SignalTemplate);
344+
345+ if (field->is_optional ()) {
346+ mPrinter ->Print (common::produceOptionalPropertyMap (field, mDescriptor ), Templates::SignalTemplate);
347+ }
322348 }
323349 Outdent ();
324350}
@@ -331,6 +357,11 @@ void MessageDeclarationPrinter::printPrivateMethods()
331357 if (common::hasQmlAlias (field)) {
332358 mPrinter ->Print (propertyMap, Templates::NonScriptableGetterTemplate);
333359 mPrinter ->Print (propertyMap, Templates::NonScriptableSetterTemplate);
360+ if (field->is_optional ()) {
361+ mPrinter ->Print (propertyMap, Templates::EndOptionalSetterTemplate);
362+ } else {
363+ mPrinter ->Print (propertyMap, Templates::EndSetterTemplate);
364+ }
334365 }
335366 });
336367 Outdent ();
@@ -428,6 +459,9 @@ void MessageDeclarationPrinter::printClassMembers()
428459 } else {
429460 mPrinter ->Print (propertyMap, Templates::MemberTemplate);
430461 }
462+ if (field->is_optional ()) {
463+ mPrinter ->Print (common::produceOptionalPropertyMap (field, mDescriptor ), Templates::MemberTemplate);
464+ }
431465 });
432466 Outdent ();
433467}
0 commit comments