@@ -733,7 +733,7 @@ class _FieldSet {
733
733
for (var fi in other._infosSortedByTag) {
734
734
var value = other._values[fi.index! ];
735
735
if (value != null ) {
736
- _mergeNonExtensionField (fi, value);
736
+ _mergeField (fi, value, isExtension : false );
737
737
}
738
738
}
739
739
@@ -743,7 +743,7 @@ class _FieldSet {
743
743
var extension = otherExtensions._getInfoOrNull (tagNumber)! ;
744
744
var value = otherExtensions._getFieldOrNull (extension );
745
745
if (value != null ) {
746
- _mergeExtensionField (extension , value);
746
+ _mergeField (extension , value, isExtension : true );
747
747
}
748
748
}
749
749
}
@@ -754,7 +754,7 @@ class _FieldSet {
754
754
}
755
755
}
756
756
757
- void _mergeNonExtensionField (FieldInfo fi, dynamic fieldValue) {
757
+ void _mergeField (FieldInfo fi, fieldValue, { required bool isExtension} ) {
758
758
if (fi.isMapField) {
759
759
final MapFieldInfo <dynamic , dynamic > mapInfo = fi as dynamic ;
760
760
final map = mapInfo._ensureMapField (_meta, this );
@@ -785,52 +785,9 @@ class _FieldSet {
785
785
}
786
786
787
787
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! ];
834
791
835
792
final GeneratedMessage msg = fieldValue;
836
793
if (currentFieldValue == null ) {
@@ -841,7 +798,12 @@ class _FieldSet {
841
798
}
842
799
}
843
800
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
+ }
845
807
}
846
808
847
809
// Error-checking
0 commit comments