diff options
Diffstat (limited to 'java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java')
-rw-r--r-- | java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java b/java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java index 4a13fb1d..86f56ad9 100644 --- a/java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java +++ b/java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java @@ -240,7 +240,7 @@ final class FieldMaskTree { "Field \"" + field.getFullName() + "\" is not a " - + "singluar message field and cannot have sub-fields."); + + "singular message field and cannot have sub-fields."); continue; } if (!source.hasField(field) && !destination.hasField(field)) { @@ -249,12 +249,9 @@ final class FieldMaskTree { continue; } String childPath = path.isEmpty() ? entry.getKey() : path + "." + entry.getKey(); - merge( - entry.getValue(), - childPath, - (Message) source.getField(field), - destination.getFieldBuilder(field), - options); + Message.Builder childBuilder = ((Message) destination.getField(field)).toBuilder(); + merge(entry.getValue(), childPath, (Message) source.getField(field), childBuilder, options); + destination.setField(field, childBuilder.buildPartial()); continue; } if (field.isRepeated()) { @@ -275,7 +272,12 @@ final class FieldMaskTree { } } else { if (source.hasField(field)) { - destination.getFieldBuilder(field).mergeFrom((Message) source.getField(field)); + destination.setField( + field, + ((Message) destination.getField(field)) + .toBuilder() + .mergeFrom((Message) source.getField(field)) + .build()); } } } else { |