Skip to content

Commit d295939

Browse files
committed
Merge merge field methods
1 parent aa492a9 commit d295939

File tree

1 file changed

+12
-50
lines changed

1 file changed

+12
-50
lines changed

protobuf/lib/src/protobuf/field_set.dart

+12-50
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)