| Index: third_party/protobuf/java/core/src/main/java/com/google/protobuf/GeneratedMessage.java
|
| diff --git a/third_party/protobuf/java/core/src/main/java/com/google/protobuf/GeneratedMessage.java b/third_party/protobuf/java/core/src/main/java/com/google/protobuf/GeneratedMessage.java
|
| index cea0579424f1166909421cb43cc30cd048af61f5..790cb622a7eb84de07af5a1fad1ac5a2cf12d59a 100644
|
| --- a/third_party/protobuf/java/core/src/main/java/com/google/protobuf/GeneratedMessage.java
|
| +++ b/third_party/protobuf/java/core/src/main/java/com/google/protobuf/GeneratedMessage.java
|
| @@ -355,30 +355,31 @@ public abstract class GeneratedMessage extends AbstractMessage
|
| // Noop for messages without extensions.
|
| }
|
|
|
| - /**
|
| - * TODO(xiaofeng): remove this after b/29368482 is fixed. We need to move this
|
| - * interface to AbstractMessage in order to versioning GeneratedMessage but
|
| - * this move breaks binary compatibility for AppEngine. After AppEngine is
|
| - * fixed we can exlude this from google3.
|
| - */
|
| - protected interface BuilderParent extends AbstractMessage.BuilderParent {}
|
| + protected abstract Message.Builder newBuilderForType(BuilderParent parent);
|
|
|
| /**
|
| - * TODO(xiaofeng): remove this together with GeneratedMessage.BuilderParent.
|
| + * Interface for the parent of a Builder that allows the builder to
|
| + * communicate invalidations back to the parent for use when using nested
|
| + * builders.
|
| */
|
| - protected abstract Message.Builder newBuilderForType(BuilderParent parent);
|
| + protected interface BuilderParent {
|
|
|
| - @Override
|
| - protected Message.Builder newBuilderForType(final AbstractMessage.BuilderParent parent) {
|
| - return newBuilderForType(new BuilderParent() {
|
| - @Override
|
| - public void markDirty() {
|
| - parent.markDirty();
|
| - }
|
| - });
|
| + /**
|
| + * A builder becomes dirty whenever a field is modified -- including fields
|
| + * in nested builders -- and becomes clean when build() is called. Thus,
|
| + * when a builder becomes dirty, all its parents become dirty as well, and
|
| + * when it becomes clean, all its children become clean. The dirtiness
|
| + * state is used to invalidate certain cached values.
|
| + * <br>
|
| + * To this end, a builder calls markAsDirty() on its parent whenever it
|
| + * transitions from clean to dirty. The parent must propagate this call to
|
| + * its own parent, unless it was already dirty, in which case the
|
| + * grandparent must necessarily already be dirty as well. The parent can
|
| + * only transition back to "clean" after calling build() on all children.
|
| + */
|
| + void markDirty();
|
| }
|
|
|
| -
|
| @SuppressWarnings("unchecked")
|
| public abstract static class Builder <BuilderType extends Builder<BuilderType>>
|
| extends AbstractMessage.Builder<BuilderType> {
|
| @@ -402,7 +403,6 @@ public abstract class GeneratedMessage extends AbstractMessage
|
| this.builderParent = builderParent;
|
| }
|
|
|
| - @Override
|
| void dispose() {
|
| builderParent = null;
|
| }
|
| @@ -420,7 +420,6 @@ public abstract class GeneratedMessage extends AbstractMessage
|
| * Called by the subclass or a builder to notify us that a message was
|
| * built and may be cached and therefore invalidations are needed.
|
| */
|
| - @Override
|
| protected void markClean() {
|
| this.isClean = true;
|
| }
|
| @@ -756,33 +755,6 @@ public abstract class GeneratedMessage extends AbstractMessage
|
| <Type> Type getExtension(
|
| ExtensionLite<MessageType, List<Type>> extension,
|
| int index);
|
| -
|
| - /** Check if a singular extension is present. */
|
| - <Type> boolean hasExtension(
|
| - Extension<MessageType, Type> extension);
|
| - /** Check if a singular extension is present. */
|
| - <Type> boolean hasExtension(
|
| - GeneratedExtension<MessageType, Type> extension);
|
| - /** Get the number of elements in a repeated extension. */
|
| - <Type> int getExtensionCount(
|
| - Extension<MessageType, List<Type>> extension);
|
| - /** Get the number of elements in a repeated extension. */
|
| - <Type> int getExtensionCount(
|
| - GeneratedExtension<MessageType, List<Type>> extension);
|
| - /** Get the value of an extension. */
|
| - <Type> Type getExtension(
|
| - Extension<MessageType, Type> extension);
|
| - /** Get the value of an extension. */
|
| - <Type> Type getExtension(
|
| - GeneratedExtension<MessageType, Type> extension);
|
| - /** Get one element of a repeated extension. */
|
| - <Type> Type getExtension(
|
| - Extension<MessageType, List<Type>> extension,
|
| - int index);
|
| - /** Get one element of a repeated extension. */
|
| - <Type> Type getExtension(
|
| - GeneratedExtension<MessageType, List<Type>> extension,
|
| - int index);
|
| }
|
|
|
| /**
|
| @@ -909,53 +881,6 @@ public abstract class GeneratedMessage extends AbstractMessage
|
| extensions.getRepeatedField(descriptor, index));
|
| }
|
|
|
| - /** Check if a singular extension is present. */
|
| - @Override
|
| - public final <Type> boolean hasExtension(final Extension<MessageType, Type> extension) {
|
| - return hasExtension((ExtensionLite<MessageType, Type>) extension);
|
| - }
|
| - /** Check if a singular extension is present. */
|
| - @Override
|
| - public final <Type> boolean hasExtension(
|
| - final GeneratedExtension<MessageType, Type> extension) {
|
| - return hasExtension((ExtensionLite<MessageType, Type>) extension);
|
| - }
|
| - /** Get the number of elements in a repeated extension. */
|
| - @Override
|
| - public final <Type> int getExtensionCount(
|
| - final Extension<MessageType, List<Type>> extension) {
|
| - return getExtensionCount((ExtensionLite<MessageType, List<Type>>) extension);
|
| - }
|
| - /** Get the number of elements in a repeated extension. */
|
| - @Override
|
| - public final <Type> int getExtensionCount(
|
| - final GeneratedExtension<MessageType, List<Type>> extension) {
|
| - return getExtensionCount((ExtensionLite<MessageType, List<Type>>) extension);
|
| - }
|
| - /** Get the value of an extension. */
|
| - @Override
|
| - public final <Type> Type getExtension(final Extension<MessageType, Type> extension) {
|
| - return getExtension((ExtensionLite<MessageType, Type>) extension);
|
| - }
|
| - /** Get the value of an extension. */
|
| - @Override
|
| - public final <Type> Type getExtension(
|
| - final GeneratedExtension<MessageType, Type> extension) {
|
| - return getExtension((ExtensionLite<MessageType, Type>) extension);
|
| - }
|
| - /** Get one element of a repeated extension. */
|
| - @Override
|
| - public final <Type> Type getExtension(
|
| - final Extension<MessageType, List<Type>> extension, final int index) {
|
| - return getExtension((ExtensionLite<MessageType, List<Type>>) extension, index);
|
| - }
|
| - /** Get one element of a repeated extension. */
|
| - @Override
|
| - public final <Type> Type getExtension(
|
| - final GeneratedExtension<MessageType, List<Type>> extension, final int index) {
|
| - return getExtension((ExtensionLite<MessageType, List<Type>>) extension, index);
|
| - }
|
| -
|
| /** Called by subclasses to check if all extensions are initialized. */
|
| protected boolean extensionsAreInitialized() {
|
| return extensions.isInitialized();
|
| @@ -1344,95 +1269,6 @@ public abstract class GeneratedMessage extends AbstractMessage
|
| return (BuilderType) this;
|
| }
|
|
|
| - /** Check if a singular extension is present. */
|
| - @Override
|
| - public final <Type> boolean hasExtension(final Extension<MessageType, Type> extension) {
|
| - return hasExtension((ExtensionLite<MessageType, Type>) extension);
|
| - }
|
| - /** Check if a singular extension is present. */
|
| - @Override
|
| - public final <Type> boolean hasExtension(
|
| - final GeneratedExtension<MessageType, Type> extension) {
|
| - return hasExtension((ExtensionLite<MessageType, Type>) extension);
|
| - }
|
| - /** Get the number of elements in a repeated extension. */
|
| - @Override
|
| - public final <Type> int getExtensionCount(
|
| - final Extension<MessageType, List<Type>> extension) {
|
| - return getExtensionCount((ExtensionLite<MessageType, List<Type>>) extension);
|
| - }
|
| - /** Get the number of elements in a repeated extension. */
|
| - @Override
|
| - public final <Type> int getExtensionCount(
|
| - final GeneratedExtension<MessageType, List<Type>> extension) {
|
| - return getExtensionCount((ExtensionLite<MessageType, List<Type>>) extension);
|
| - }
|
| - /** Get the value of an extension. */
|
| - @Override
|
| - public final <Type> Type getExtension(final Extension<MessageType, Type> extension) {
|
| - return getExtension((ExtensionLite<MessageType, Type>) extension);
|
| - }
|
| - /** Get the value of an extension. */
|
| - @Override
|
| - public final <Type> Type getExtension(
|
| - final GeneratedExtension<MessageType, Type> extension) {
|
| - return getExtension((ExtensionLite<MessageType, Type>) extension);
|
| - }
|
| - /** Get the value of an extension. */
|
| - @Override
|
| - public final <Type> Type getExtension(
|
| - final Extension<MessageType, List<Type>> extension, final int index) {
|
| - return getExtension((ExtensionLite<MessageType, List<Type>>) extension, index);
|
| - }
|
| - /** Get the value of an extension. */
|
| - @Override
|
| - public final <Type> Type getExtension(
|
| - final GeneratedExtension<MessageType, List<Type>> extension, final int index) {
|
| - return getExtension((ExtensionLite<MessageType, List<Type>>) extension, index);
|
| - }
|
| - /** Set the value of an extension. */
|
| - public final <Type> BuilderType setExtension(
|
| - final Extension<MessageType, Type> extension, final Type value) {
|
| - return setExtension((ExtensionLite<MessageType, Type>) extension, value);
|
| - }
|
| - /** Set the value of an extension. */
|
| - public <Type> BuilderType setExtension(
|
| - final GeneratedExtension<MessageType, Type> extension, final Type value) {
|
| - return setExtension((ExtensionLite<MessageType, Type>) extension, value);
|
| - }
|
| - /** Set the value of one element of a repeated extension. */
|
| - public final <Type> BuilderType setExtension(
|
| - final Extension<MessageType, List<Type>> extension,
|
| - final int index, final Type value) {
|
| - return setExtension((ExtensionLite<MessageType, List<Type>>) extension, index, value);
|
| - }
|
| - /** Set the value of one element of a repeated extension. */
|
| - public <Type> BuilderType setExtension(
|
| - final GeneratedExtension<MessageType, List<Type>> extension,
|
| - final int index, final Type value) {
|
| - return setExtension((ExtensionLite<MessageType, List<Type>>) extension, index, value);
|
| - }
|
| - /** Append a value to a repeated extension. */
|
| - public final <Type> BuilderType addExtension(
|
| - final Extension<MessageType, List<Type>> extension, final Type value) {
|
| - return addExtension((ExtensionLite<MessageType, List<Type>>) extension, value);
|
| - }
|
| - /** Append a value to a repeated extension. */
|
| - public <Type> BuilderType addExtension(
|
| - final GeneratedExtension<MessageType, List<Type>> extension, final Type value) {
|
| - return addExtension((ExtensionLite<MessageType, List<Type>>) extension, value);
|
| - }
|
| - /** Clear an extension. */
|
| - public final <Type> BuilderType clearExtension(
|
| - final Extension<MessageType, ?> extension) {
|
| - return clearExtension((ExtensionLite<MessageType, ?>) extension);
|
| - }
|
| - /** Clear an extension. */
|
| - public <Type> BuilderType clearExtension(
|
| - final GeneratedExtension<MessageType, ?> extension) {
|
| - return clearExtension((ExtensionLite<MessageType, ?>) extension);
|
| - }
|
| -
|
| /** Called by subclasses to check if all extensions are initialized. */
|
| protected boolean extensionsAreInitialized() {
|
| return extensions.isInitialized();
|
|
|