diff options
Diffstat (limited to 'java/core/src/main/java/com/google/protobuf/SingleFieldBuilder.java')
-rw-r--r-- | java/core/src/main/java/com/google/protobuf/SingleFieldBuilder.java | 92 |
1 files changed, 39 insertions, 53 deletions
diff --git a/java/core/src/main/java/com/google/protobuf/SingleFieldBuilder.java b/java/core/src/main/java/com/google/protobuf/SingleFieldBuilder.java index 941b5def..acdc1de1 100644 --- a/java/core/src/main/java/com/google/protobuf/SingleFieldBuilder.java +++ b/java/core/src/main/java/com/google/protobuf/SingleFieldBuilder.java @@ -30,36 +30,32 @@ package com.google.protobuf; +import static com.google.protobuf.Internal.checkNotNull; + /** - * {@code SingleFieldBuilder} implements a structure that a protocol - * message uses to hold a single field of another protocol message. It supports - * the classical use case of setting an immutable {@link Message} as the value - * of the field and is highly optimized around this. - * <br> - * It also supports the additional use case of setting a {@link Message.Builder} - * as the field and deferring conversion of that {@code Builder} - * to an immutable {@code Message}. In this way, it's possible to maintain - * a tree of {@code Builder}'s that acts as a fully read/write data - * structure. + * {@code SingleFieldBuilder} implements a structure that a protocol message uses to hold a single + * field of another protocol message. It supports the classical use case of setting an immutable + * {@link Message} as the value of the field and is highly optimized around this. + * + * <p>It also supports the additional use case of setting a {@link Message.Builder} as the field and + * deferring conversion of that {@code Builder} to an immutable {@code Message}. In this way, it's + * possible to maintain a tree of {@code Builder}'s that acts as a fully read/write data structure. * <br> - * Logically, one can think of a tree of builders as converting the entire tree - * to messages when build is called on the root or when any method is called - * that desires a Message instead of a Builder. In terms of the implementation, - * the {@code SingleFieldBuilder} and {@code RepeatedFieldBuilder} - * classes cache messages that were created so that messages only need to be - * created when some change occurred in its builder or a builder for one of its - * descendants. + * Logically, one can think of a tree of builders as converting the entire tree to messages when + * build is called on the root or when any method is called that desires a Message instead of a + * Builder. In terms of the implementation, the {@code SingleFieldBuilder} and {@code + * RepeatedFieldBuilder} classes cache messages that were created so that messages only need to be + * created when some change occurred in its builder or a builder for one of its descendants. * * @param <MType> the type of message for the field * @param <BType> the type of builder for the field * @param <IType> the common interface for the message and the builder - * * @author jonp@google.com (Jon Perlow) */ -public class SingleFieldBuilder - <MType extends GeneratedMessage, - BType extends GeneratedMessage.Builder, - IType extends MessageOrBuilder> +public class SingleFieldBuilder< + MType extends GeneratedMessage, + BType extends GeneratedMessage.Builder, + IType extends MessageOrBuilder> implements GeneratedMessage.BuilderParent { // Parent to send changes to. @@ -80,14 +76,8 @@ public class SingleFieldBuilder // to dispatch dirty invalidations. See GeneratedMessage.BuilderListener. private boolean isClean; - public SingleFieldBuilder( - MType message, - GeneratedMessage.BuilderParent parent, - boolean isClean) { - if (message == null) { - throw new NullPointerException(); - } - this.message = message; + public SingleFieldBuilder(MType message, GeneratedMessage.BuilderParent parent, boolean isClean) { + this.message = checkNotNull(message); this.parent = parent; this.isClean = isClean; } @@ -98,10 +88,9 @@ public class SingleFieldBuilder } /** - * Get the message for the field. If the message is currently stored - * as a {@code Builder}, it is converted to a {@code Message} by - * calling {@link Message.Builder#buildPartial} on it. If no message has - * been set, returns the default instance of the message. + * Get the message for the field. If the message is currently stored as a {@code Builder}, it is + * converted to a {@code Message} by calling {@link Message.Builder#buildPartial} on it. If no + * message has been set, returns the default instance of the message. * * @return the message for the field */ @@ -127,8 +116,8 @@ public class SingleFieldBuilder } /** - * Gets a builder for the field. If no builder has been created yet, a - * builder is created on demand by calling {@link Message#toBuilder}. + * Gets a builder for the field. If no builder has been created yet, a builder is created on + * demand by calling {@link Message#toBuilder}. * * @return The builder for the field */ @@ -147,32 +136,28 @@ public class SingleFieldBuilder } /** - * Gets the base class interface for the field. This may either be a builder - * or a message. It will return whatever is more efficient. + * Gets the base class interface for the field. This may either be a builder or a message. It will + * return whatever is more efficient. * * @return the message or builder for the field as the base class interface */ @SuppressWarnings("unchecked") public IType getMessageOrBuilder() { if (builder != null) { - return (IType) builder; + return (IType) builder; } else { return (IType) message; } } /** - * Sets a message for the field replacing any existing value. + * Sets a message for the field replacing any existing value. * * @param message the message to set * @return the builder */ - public SingleFieldBuilder<MType, BType, IType> setMessage( - MType message) { - if (message == null) { - throw new NullPointerException(); - } - this.message = message; + public SingleFieldBuilder<MType, BType, IType> setMessage(MType message) { + this.message = checkNotNull(message); if (builder != null) { builder.dispose(); builder = null; @@ -187,8 +172,7 @@ public class SingleFieldBuilder * @param value the value to merge from * @return the builder */ - public SingleFieldBuilder<MType, BType, IType> mergeFrom( - MType value) { + public SingleFieldBuilder<MType, BType, IType> mergeFrom(MType value) { if (builder == null && message == message.getDefaultInstanceForType()) { message = value; } else { @@ -205,9 +189,11 @@ public class SingleFieldBuilder */ @SuppressWarnings("unchecked") public SingleFieldBuilder<MType, BType, IType> clear() { - message = (MType) (message != null ? - message.getDefaultInstanceForType() : - builder.getDefaultInstanceForType()); + message = + (MType) + (message != null + ? message.getDefaultInstanceForType() + : builder.getDefaultInstanceForType()); if (builder != null) { builder.dispose(); builder = null; @@ -217,8 +203,8 @@ public class SingleFieldBuilder } /** - * Called when a the builder or one of its nested children has changed - * and any parent should be notified of its invalidation. + * Called when a the builder or one of its nested children has changed and any parent should be + * notified of its invalidation. */ private void onChanged() { // If builder is null, this is the case where onChanged is being called |