@@ -268,12 +268,12 @@ jspb.Message.prototype.messageId_;
268268
269269
270270/**
271- * Repeated float or double fields which have been converted to include only
272- * numbers and not strings holding "NaN", "Infinity" and "-Infinity".
271+ * Repeated fields that have been converted to their proper type. This is used
272+ * for numbers stored as strings (typically "NaN", "Infinity" and "-Infinity")
273+ * and for booleans stored as numbers (0 or 1).
273274 * @private {!Object<number,boolean>|undefined}
274275 */
275- jspb . Message . prototype . convertedFloatingPointFields_ ;
276-
276+ jspb . Message . prototype . convertedPrimitiveFields_ ;
277277
278278/**
279279 * Repeated fields numbers.
@@ -368,7 +368,7 @@ jspb.Message.initialize = function(
368368 msg . arrayIndexOffset_ = messageId === 0 ? - 1 : 0 ;
369369 msg . array = data ;
370370 jspb . Message . initPivotAndExtensionObject_ ( msg , suggestedPivot ) ;
371- msg . convertedFloatingPointFields_ = { } ;
371+ msg . convertedPrimitiveFields_ = { } ;
372372
373373 if ( ! jspb . Message . SERIALIZE_EMPTY_TRAILING_FIELDS ) {
374374 // TODO(jakubvrana): This is same for all instances, move to prototype.
@@ -718,6 +718,20 @@ jspb.Message.getOptionalFloatingPointField = function(msg, fieldNumber) {
718718} ;
719719
720720
721+ /**
722+ * Gets the value of an optional boolean field.
723+ * @param {!jspb.Message } msg A jspb proto.
724+ * @param {number } fieldNumber The field number.
725+ * @return {?boolean|undefined } The field's value.
726+ * @protected
727+ */
728+ jspb . Message . getBooleanField = function ( msg , fieldNumber ) {
729+ var value = jspb . Message . getField ( msg , fieldNumber ) ;
730+ // TODO(b/122673075): always return null when the value is null-ish.
731+ return value == null ? ( value ) : ! ! value ;
732+ } ;
733+
734+
721735/**
722736 * Gets the value of a repeated float or double field.
723737 * @param {!jspb.Message } msg A jspb proto.
@@ -727,20 +741,42 @@ jspb.Message.getOptionalFloatingPointField = function(msg, fieldNumber) {
727741 */
728742jspb . Message . getRepeatedFloatingPointField = function ( msg , fieldNumber ) {
729743 var values = jspb . Message . getRepeatedField ( msg , fieldNumber ) ;
730- if ( ! msg . convertedFloatingPointFields_ ) {
731- msg . convertedFloatingPointFields_ = { } ;
744+ if ( ! msg . convertedPrimitiveFields_ ) {
745+ msg . convertedPrimitiveFields_ = { } ;
732746 }
733- if ( ! msg . convertedFloatingPointFields_ [ fieldNumber ] ) {
747+ if ( ! msg . convertedPrimitiveFields_ [ fieldNumber ] ) {
734748 for ( var i = 0 ; i < values . length ; i ++ ) {
735749 // Converts "NaN", "Infinity" and "-Infinity" to their corresponding
736750 // numbers.
737751 values [ i ] = + values [ i ] ;
738752 }
739- msg . convertedFloatingPointFields_ [ fieldNumber ] = true ;
753+ msg . convertedPrimitiveFields_ [ fieldNumber ] = true ;
740754 }
741755 return /** @type {!Array<number> } */ ( values ) ;
742756} ;
743757
758+ /**
759+ * Gets the value of a repeated boolean field.
760+ * @param {!jspb.Message } msg A jspb proto.
761+ * @param {number } fieldNumber The field number.
762+ * @return {!Array<boolean> } The field's value.
763+ * @protected
764+ */
765+ jspb . Message . getRepeatedBooleanField = function ( msg , fieldNumber ) {
766+ var values = jspb . Message . getRepeatedField ( msg , fieldNumber ) ;
767+ if ( ! msg . convertedPrimitiveFields_ ) {
768+ msg . convertedPrimitiveFields_ = { } ;
769+ }
770+ if ( ! msg . convertedPrimitiveFields_ [ fieldNumber ] ) {
771+ for ( var i = 0 ; i < values . length ; i ++ ) {
772+ // Converts 0 and 1 to their corresponding booleans.
773+ values [ i ] = ! ! values [ i ] ;
774+ }
775+ msg . convertedPrimitiveFields_ [ fieldNumber ] = true ;
776+ }
777+ return /** @type {!Array<boolean> } */ ( values ) ;
778+ } ;
779+
744780
745781/**
746782 * Coerce a 'bytes' field to a base 64 string.
@@ -849,6 +885,49 @@ jspb.Message.getFieldWithDefault = function(msg, fieldNumber, defaultValue) {
849885} ;
850886
851887
888+ /**
889+ * Gets the value of a boolean field, with proto3 (non-nullable primitives)
890+ * semantics. Returns `defaultValue` if the field is not otherwise set.
891+ * @template T
892+ * @param {!jspb.Message } msg A jspb proto.
893+ * @param {number } fieldNumber The field number.
894+ * @param {boolean } defaultValue The default value.
895+ * @return {boolean } The field's value.
896+ * @protected
897+ */
898+ jspb . Message . getBooleanFieldWithDefault = function (
899+ msg , fieldNumber , defaultValue ) {
900+ var value = jspb . Message . getBooleanField ( msg , fieldNumber ) ;
901+ if ( value == null ) {
902+ return defaultValue ;
903+ } else {
904+ return value ;
905+ }
906+ } ;
907+
908+
909+ /**
910+ * Gets the value of a floating point field, with proto3 (non-nullable
911+ * primitives) semantics. Returns `defaultValue` if the field is not otherwise
912+ * set.
913+ * @template T
914+ * @param {!jspb.Message } msg A jspb proto.
915+ * @param {number } fieldNumber The field number.
916+ * @param {number } defaultValue The default value.
917+ * @return {number } The field's value.
918+ * @protected
919+ */
920+ jspb . Message . getFloatingPointFieldWithDefault = function (
921+ msg , fieldNumber , defaultValue ) {
922+ var value = jspb . Message . getOptionalFloatingPointField ( msg , fieldNumber ) ;
923+ if ( value == null ) {
924+ return defaultValue ;
925+ } else {
926+ return value ;
927+ }
928+ } ;
929+
930+
852931/**
853932 * Alias for getFieldWithDefault used by older generated code.
854933 * @template T
0 commit comments