@@ -733,7 +733,7 @@ class _FieldSet {
733733 for (var fi in other._infosSortedByTag) {
734734 var value = other._values[fi.index! ];
735735 if (value != null ) {
736- _mergeNonExtensionField (fi, value);
736+ _mergeField (fi, value, isExtension : false );
737737 }
738738 }
739739
@@ -743,7 +743,7 @@ class _FieldSet {
743743 var extension = otherExtensions._getInfoOrNull (tagNumber)! ;
744744 var value = otherExtensions._getFieldOrNull (extension );
745745 if (value != null ) {
746- _mergeExtensionField (extension , value);
746+ _mergeField (extension , value, isExtension : true );
747747 }
748748 }
749749 }
@@ -754,7 +754,7 @@ class _FieldSet {
754754 }
755755 }
756756
757- void _mergeNonExtensionField (FieldInfo fi, dynamic fieldValue) {
757+ void _mergeField (FieldInfo fi, fieldValue, { required bool isExtension} ) {
758758 if (fi.isMapField) {
759759 final MapFieldInfo <dynamic , dynamic > mapInfo = fi as dynamic ;
760760 final map = mapInfo._ensureMapField (_meta, this );
@@ -785,52 +785,9 @@ class _FieldSet {
785785 }
786786
787787 if (fi.isGroupOrMessage) {
788- final currentFieldValue = _values[fi.index! ];
789- final GeneratedMessage msg = fieldValue;
790- if (currentFieldValue == null ) {
791- fieldValue = msg.deepCopy ();
792- } else {
793- final GeneratedMessage currentMsg = currentFieldValue;
794- fieldValue = currentMsg..mergeFromMessage (msg);
795- }
796- }
797-
798- _setNonExtensionFieldUnchecked (_meta, fi, fieldValue);
799- }
800-
801- void _mergeExtensionField (FieldInfo fi, fieldValue) {
802- if (fi.isMapField) {
803- final MapFieldInfo <dynamic , dynamic > mapInfo = fi as dynamic ;
804- final map = mapInfo._ensureMapField (_meta, this );
805- if (_isGroupOrMessage (mapInfo.valueFieldType)) {
806- final Map fieldValueMap = fieldValue;
807- for (final entry in fieldValueMap.entries) {
808- final GeneratedMessage value = entry.value;
809- map[entry.key] = value.deepCopy ();
810- }
811- } else {
812- map.addAll (fieldValue);
813- }
814- return ;
815- }
816-
817- if (fi.isRepeated) {
818- if (_isGroupOrMessage (fi.type)) {
819- final List <GeneratedMessage > list = fieldValue;
820- final repeatedFields = fi._ensureRepeatedField (_meta, this );
821- for (var i = 0 ; i < list.length; ++ i) {
822- repeatedFields.add (list[i].deepCopy ());
823- }
824- } else {
825- final List list = fieldValue;
826- fi._ensureRepeatedField (_meta, this ).addAll (list);
827- }
828- return ;
829- }
830-
831- if (fi.isGroupOrMessage) {
832- final currentFieldValue =
833- _ensureExtensions ()._getFieldOrNull (fi as Extension <dynamic >);
788+ final currentFieldValue = isExtension
789+ ? _ensureExtensions ()._getFieldOrNull (fi as Extension <dynamic >)
790+ : _values[fi.index! ];
834791
835792 final GeneratedMessage msg = fieldValue;
836793 if (currentFieldValue == null ) {
@@ -841,7 +798,12 @@ class _FieldSet {
841798 }
842799 }
843800
844- _ensureExtensions ()._setFieldAndInfo (fi as Extension <dynamic >, fieldValue);
801+ if (isExtension) {
802+ _ensureExtensions ()
803+ ._setFieldAndInfo (fi as Extension <dynamic >, fieldValue);
804+ } else {
805+ _setNonExtensionFieldUnchecked (_meta, fi, fieldValue);
806+ }
845807 }
846808
847809 // Error-checking
0 commit comments