| Index: third_party/protobuf/java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java
|
| diff --git a/third_party/protobuf/java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java b/third_party/protobuf/java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java
|
| index 668d65ab169e006a2c74df064f1c0dfaf19be84f..b192b53edf5ab5562fc80457364c349a0c1ab6d7 100644
|
| --- a/third_party/protobuf/java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java
|
| +++ b/third_party/protobuf/java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java
|
| @@ -38,6 +38,7 @@ import com.google.protobuf.Message;
|
| import java.util.ArrayList;
|
| import java.util.List;
|
| import java.util.Map.Entry;
|
| +import java.util.SortedMap;
|
| import java.util.TreeMap;
|
| import java.util.logging.Logger;
|
|
|
| @@ -59,22 +60,26 @@ import java.util.logging.Logger;
|
| * intersection to two FieldMasks and traverse all fields specified by the
|
| * FieldMask in a message tree.
|
| */
|
| -class FieldMaskTree {
|
| +final class FieldMaskTree {
|
| private static final Logger logger = Logger.getLogger(FieldMaskTree.class.getName());
|
|
|
| private static final String FIELD_PATH_SEPARATOR_REGEX = "\\.";
|
|
|
| - private static class Node {
|
| - public TreeMap<String, Node> children = new TreeMap<String, Node>();
|
| + private static final class Node {
|
| + final SortedMap<String, Node> children = new TreeMap<String, Node>();
|
| }
|
|
|
| private final Node root = new Node();
|
|
|
| - /** Creates an empty FieldMaskTree. */
|
| - public FieldMaskTree() {}
|
| + /**
|
| + * Creates an empty FieldMaskTree.
|
| + */
|
| + FieldMaskTree() {}
|
|
|
| - /** Creates a FieldMaskTree for a given FieldMask. */
|
| - public FieldMaskTree(FieldMask mask) {
|
| + /**
|
| + * Creates a FieldMaskTree for a given FieldMask.
|
| + */
|
| + FieldMaskTree(FieldMask mask) {
|
| mergeFromFieldMask(mask);
|
| }
|
|
|
| @@ -93,7 +98,7 @@ class FieldMaskTree {
|
| * Likewise, if the field path to add is a sub-path of an existing leaf node,
|
| * nothing will be changed in the tree.
|
| */
|
| - public FieldMaskTree addFieldPath(String path) {
|
| + FieldMaskTree addFieldPath(String path) {
|
| String[] parts = path.split(FIELD_PATH_SEPARATOR_REGEX);
|
| if (parts.length == 0) {
|
| return this;
|
| @@ -124,15 +129,17 @@ class FieldMaskTree {
|
| /**
|
| * Merges all field paths in a FieldMask into this tree.
|
| */
|
| - public FieldMaskTree mergeFromFieldMask(FieldMask mask) {
|
| + FieldMaskTree mergeFromFieldMask(FieldMask mask) {
|
| for (String path : mask.getPathsList()) {
|
| addFieldPath(path);
|
| }
|
| return this;
|
| }
|
|
|
| - /** Converts this tree to a FieldMask. */
|
| - public FieldMask toFieldMask() {
|
| + /**
|
| + * Converts this tree to a FieldMask.
|
| + */
|
| + FieldMask toFieldMask() {
|
| if (root.children.isEmpty()) {
|
| return FieldMask.getDefaultInstance();
|
| }
|
| @@ -141,7 +148,9 @@ class FieldMaskTree {
|
| return FieldMask.newBuilder().addAllPaths(paths).build();
|
| }
|
|
|
| - /** Gathers all field paths in a sub-tree. */
|
| + /**
|
| + * Gathers all field paths in a sub-tree.
|
| + */
|
| private void getFieldPaths(Node node, String path, List<String> paths) {
|
| if (node.children.isEmpty()) {
|
| paths.add(path);
|
| @@ -154,10 +163,9 @@ class FieldMaskTree {
|
| }
|
|
|
| /**
|
| - * Adds the intersection of this tree with the given {@code path} to
|
| - * {@code output}.
|
| + * Adds the intersection of this tree with the given {@code path} to {@code output}.
|
| */
|
| - public void intersectFieldPath(String path, FieldMaskTree output) {
|
| + void intersectFieldPath(String path, FieldMaskTree output) {
|
| if (root.children.isEmpty()) {
|
| return;
|
| }
|
| @@ -188,11 +196,9 @@ class FieldMaskTree {
|
| }
|
|
|
| /**
|
| - * Merges all fields specified by this FieldMaskTree from {@code source} to
|
| - * {@code destination}.
|
| + * Merges all fields specified by this FieldMaskTree from {@code source} to {@code destination}.
|
| */
|
| - public void merge(
|
| - Message source, Message.Builder destination, FieldMaskUtil.MergeOptions options) {
|
| + void merge(Message source, Message.Builder destination, FieldMaskUtil.MergeOptions options) {
|
| if (source.getDescriptorForType() != destination.getDescriptorForType()) {
|
| throw new IllegalArgumentException("Cannot merge messages of different types.");
|
| }
|
| @@ -202,8 +208,8 @@ class FieldMaskTree {
|
| merge(root, "", source, destination, options);
|
| }
|
|
|
| - /** Merges all fields specified by a sub-tree from {@code source} to
|
| - * {@code destination}.
|
| + /**
|
| + * Merges all fields specified by a sub-tree from {@code source} to {@code destination}.
|
| */
|
| private void merge(
|
| Node node,
|
| @@ -211,7 +217,12 @@ class FieldMaskTree {
|
| Message source,
|
| Message.Builder destination,
|
| FieldMaskUtil.MergeOptions options) {
|
| - assert source.getDescriptorForType() == destination.getDescriptorForType();
|
| + if (source.getDescriptorForType() != destination.getDescriptorForType()) {
|
| + throw new IllegalArgumentException(
|
| + String.format(
|
| + "source (%s) and destination (%s) descriptor must be equal",
|
| + source.getDescriptorForType(), destination.getDescriptorForType()));
|
| + }
|
|
|
| Descriptor descriptor = source.getDescriptorForType();
|
| for (Entry<String, Node> entry : node.children.entrySet()) {
|
|
|