| Index: third_party/protobuf/java/util/src/main/java/com/google/protobuf/util/FieldMaskUtil.java
|
| diff --git a/third_party/protobuf/java/util/src/main/java/com/google/protobuf/util/FieldMaskUtil.java b/third_party/protobuf/java/util/src/main/java/com/google/protobuf/util/FieldMaskUtil.java
|
| index 535be0fa359b7e9ccfc962279b2f1921f4ecdc74..969615210c4fceeb265107e1ec0bbd9cb3d2f4fb 100644
|
| --- a/third_party/protobuf/java/util/src/main/java/com/google/protobuf/util/FieldMaskUtil.java
|
| +++ b/third_party/protobuf/java/util/src/main/java/com/google/protobuf/util/FieldMaskUtil.java
|
| @@ -119,7 +119,7 @@ public class FieldMaskUtil {
|
| /**
|
| * Constructs a FieldMask from the passed field numbers.
|
| *
|
| - * @throws IllegalArugmentException if any of the fields are invalid for the message.
|
| + * @throws IllegalArgumentException if any of the fields are invalid for the message.
|
| */
|
| public static FieldMask fromFieldNumbers(Class<? extends Message> type, int... fieldNumbers) {
|
| return fromFieldNumbers(type, Ints.asList(fieldNumbers));
|
| @@ -128,7 +128,7 @@ public class FieldMaskUtil {
|
| /**
|
| * Constructs a FieldMask from the passed field numbers.
|
| *
|
| - * @throws IllegalArugmentException if any of the fields are invalid for the message.
|
| + * @throws IllegalArgumentException if any of the fields are invalid for the message.
|
| */
|
| public static FieldMask fromFieldNumbers(
|
| Class<? extends Message> type, Iterable<Integer> fieldNumbers) {
|
| @@ -211,14 +211,19 @@ public class FieldMaskUtil {
|
| public static FieldMask normalize(FieldMask mask) {
|
| return new FieldMaskTree(mask).toFieldMask();
|
| }
|
| -
|
| +
|
| /**
|
| - * Creates an union of two FieldMasks.
|
| + * Creates a union of two or more FieldMasks.
|
| */
|
| - public static FieldMask union(FieldMask mask1, FieldMask mask2) {
|
| - return new FieldMaskTree(mask1).mergeFromFieldMask(mask2).toFieldMask();
|
| + public static FieldMask union(
|
| + FieldMask firstMask, FieldMask secondMask, FieldMask... otherMasks) {
|
| + FieldMaskTree maskTree = new FieldMaskTree(firstMask).mergeFromFieldMask(secondMask);
|
| + for (FieldMask mask : otherMasks) {
|
| + maskTree.mergeFromFieldMask(mask);
|
| + }
|
| + return maskTree.toFieldMask();
|
| }
|
| -
|
| +
|
| /**
|
| * Calculates the intersection of two FieldMasks.
|
| */
|
| @@ -237,6 +242,9 @@ public class FieldMaskUtil {
|
| public static final class MergeOptions {
|
| private boolean replaceMessageFields = false;
|
| private boolean replaceRepeatedFields = false;
|
| + // TODO(b/28277137): change the default behavior to always replace primitive fields after
|
| + // fixing all failing TAP tests.
|
| + private boolean replacePrimitiveFields = false;
|
|
|
| /**
|
| * Whether to replace message fields (i.e., discard existing content in
|
| @@ -257,7 +265,23 @@ public class FieldMaskUtil {
|
| public boolean replaceRepeatedFields() {
|
| return replaceRepeatedFields;
|
| }
|
| -
|
| +
|
| + /**
|
| + * Whether to replace primitive (non-repeated and non-message) fields in
|
| + * destination message fields with the source primitive fields (i.e., if the
|
| + * field is set in the source, the value is copied to the
|
| + * destination; if the field is unset in the source, the field is cleared
|
| + * from the destination) when merging.
|
| + *
|
| + * <p>Default behavior is to always set the value of the source primitive
|
| + * field to the destination primitive field, and if the source field is
|
| + * unset, the default value of the source field is copied to the
|
| + * destination.
|
| + */
|
| + public boolean replacePrimitiveFields() {
|
| + return replacePrimitiveFields;
|
| + }
|
| +
|
| public void setReplaceMessageFields(boolean value) {
|
| replaceMessageFields = value;
|
| }
|
| @@ -265,10 +289,15 @@ public class FieldMaskUtil {
|
| public void setReplaceRepeatedFields(boolean value) {
|
| replaceRepeatedFields = value;
|
| }
|
| +
|
| + public void setReplacePrimitiveFields(boolean value) {
|
| + replacePrimitiveFields = value;
|
| + }
|
| }
|
| -
|
| +
|
| /**
|
| - * Merges fields specified by a FieldMask from one message to another.
|
| + * Merges fields specified by a FieldMask from one message to another with the
|
| + * specified merge options.
|
| */
|
| public static void merge(FieldMask mask, Message source,
|
| Message.Builder destination, MergeOptions options) {
|
|
|