aboutsummaryrefslogtreecommitdiff
path: root/java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java
diff options
context:
space:
mode:
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.java18
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 {