Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(183)

Unified Diff: third_party/protobuf/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java

Issue 2590803003: Revert "third_party/protobuf: Update to HEAD (83d681ee2c)" (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/protobuf/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java
diff --git a/third_party/protobuf/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java b/third_party/protobuf/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java
index f885b01eba2f0343b8f372c6a513cd89bc7d72d9..c5adc5ad02050f93e9e94db97ecc7b9e70f1a37b 100644
--- a/third_party/protobuf/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java
+++ b/third_party/protobuf/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java
@@ -39,6 +39,7 @@ import com.google.protobuf.Internal.IntList;
import com.google.protobuf.Internal.LongList;
import com.google.protobuf.Internal.ProtobufList;
import com.google.protobuf.WireFormat.FieldType;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectStreamException;
@@ -58,15 +59,15 @@ import java.util.Map;
*/
public abstract class GeneratedMessageLite<
MessageType extends GeneratedMessageLite<MessageType, BuilderType>,
- BuilderType extends GeneratedMessageLite.Builder<MessageType, BuilderType>>
+ BuilderType extends GeneratedMessageLite.Builder<MessageType, BuilderType>>
extends AbstractMessageLite<MessageType, BuilderType> {
/** For use by generated code only. Lazily initialized to reduce allocations. */
protected UnknownFieldSetLite unknownFields = UnknownFieldSetLite.getDefaultInstance();
-
+
/** For use by generated code only. */
protected int memoizedSerializedSize = -1;
-
+
@Override
@SuppressWarnings("unchecked") // Guaranteed by runtime.
public final Parser<MessageType> getParserForType() {
@@ -112,7 +113,7 @@ public abstract class GeneratedMessageLite<
}
return memoizedHashCode;
}
-
+
@SuppressWarnings("unchecked") // Guaranteed by runtime
int hashCode(HashCodeVisitor visitor) {
if (memoizedHashCode == 0) {
@@ -124,18 +125,18 @@ public abstract class GeneratedMessageLite<
}
return memoizedHashCode;
}
-
+
@SuppressWarnings("unchecked") // Guaranteed by isInstance + runtime
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
-
+
if (!getDefaultInstanceForType().getClass().isInstance(other)) {
return false;
}
-
+
try {
visit(EqualsVisitor.INSTANCE, (MessageType) other);
} catch (NotEqualsException e) {
@@ -143,7 +144,7 @@ public abstract class GeneratedMessageLite<
}
return true;
}
-
+
/**
* Same as {@link #equals(Object)} but throws {@code NotEqualsException}.
*/
@@ -152,7 +153,7 @@ public abstract class GeneratedMessageLite<
if (this == other) {
return true;
}
-
+
if (!getDefaultInstanceForType().getClass().isInstance(other)) {
return false;
}
@@ -160,7 +161,7 @@ public abstract class GeneratedMessageLite<
visit(visitor, (MessageType) other);
return true;
}
-
+
// The general strategy for unknown fields is to use an UnknownFieldSetLite that is treated as
// mutable during the parsing constructor and immutable after. This allows us to avoid
// any unnecessary intermediary allocations while reducing the generated code size.
@@ -173,10 +174,10 @@ public abstract class GeneratedMessageLite<
unknownFields = UnknownFieldSetLite.newInstance();
}
}
-
+
/**
* Called by subclasses to parse an unknown field. For use by generated code only.
- *
+ *
* @return {@code true} unless the tag is an end-group tag.
*/
protected boolean parseUnknownField(int tag, CodedInputStream input) throws IOException {
@@ -184,7 +185,7 @@ public abstract class GeneratedMessageLite<
if (WireFormat.getTagWireType(tag) == WireFormat.WIRETYPE_END_GROUP) {
return false;
}
-
+
ensureUnknownFieldsInitialized();
return unknownFields.mergeFieldFrom(tag, input);
}
@@ -196,7 +197,7 @@ public abstract class GeneratedMessageLite<
ensureUnknownFieldsInitialized();
unknownFields.mergeVarintField(tag, value);
}
-
+
/**
* Called by subclasses to parse an unknown field. For use by generated code only.
*/
@@ -204,7 +205,7 @@ public abstract class GeneratedMessageLite<
ensureUnknownFieldsInitialized();
unknownFields.mergeLengthDelimitedField(fieldNumber, value);
}
-
+
/**
* Called by subclasses to complete parsing. For use by generated code only.
*/
@@ -291,7 +292,7 @@ public abstract class GeneratedMessageLite<
dynamicMethod(MethodToInvoke.VISIT, visitor, other);
unknownFields = visitor.visitUnknownFields(unknownFields, other.unknownFields);
}
-
+
/**
* Merge some unknown fields into the {@link UnknownFieldSetLite} for this
* message.
@@ -358,9 +359,9 @@ public abstract class GeneratedMessageLite<
if (isBuilt) {
return instance;
}
-
+
instance.makeImmutable();
-
+
isBuilt = true;
return instance;
}
@@ -373,24 +374,24 @@ public abstract class GeneratedMessageLite<
}
return result;
}
-
+
@Override
protected BuilderType internalMergeFrom(MessageType message) {
return mergeFrom(message);
}
-
+
/** All subclasses implement this. */
public BuilderType mergeFrom(MessageType message) {
copyOnWrite();
instance.visit(MergeFromVisitor.INSTANCE, message);
return (BuilderType) this;
}
-
+
@Override
public MessageType getDefaultInstanceForType() {
return defaultInstance;
}
-
+
@Override
public BuilderType mergeFrom(
com.google.protobuf.CodedInputStream input,
@@ -465,12 +466,12 @@ public abstract class GeneratedMessageLite<
super.visit(visitor, other);
extensions = visitor.visitExtensions(extensions, other.extensions);
}
-
+
/**
* Parse an unknown field or an extension. For use by generated code only.
- *
+ *
* <p>For use by generated code only.
- *
+ *
* @return {@code true} unless the tag is an end-group tag.
*/
protected <MessageType extends MessageLite> boolean parseUnknownField(
@@ -478,6 +479,7 @@ public abstract class GeneratedMessageLite<
CodedInputStream input,
ExtensionRegistryLite extensionRegistry,
int tag) throws IOException {
+ int wireType = WireFormat.getTagWireType(tag);
int fieldNumber = WireFormat.getTagFieldNumber(tag);
// TODO(dweis): How much bytecode would be saved by not requiring the generated code to
@@ -485,17 +487,6 @@ public abstract class GeneratedMessageLite<
GeneratedExtension<MessageType, ?> extension = extensionRegistry.findLiteExtensionByNumber(
defaultInstance, fieldNumber);
- return parseExtension(input, extensionRegistry, extension, tag, fieldNumber);
- }
-
- private boolean parseExtension(
- CodedInputStream input,
- ExtensionRegistryLite extensionRegistry,
- GeneratedExtension<?, ?> extension,
- int tag,
- int fieldNumber)
- throws IOException {
- int wireType = WireFormat.getTagWireType(tag);
boolean unknown = false;
boolean packed = false;
if (extension == null) {
@@ -517,7 +508,7 @@ public abstract class GeneratedMessageLite<
if (unknown) { // Unknown field or wrong wire type. Skip.
return parseUnknownField(tag, input);
}
-
+
if (packed) {
int length = input.readRawVarint32();
int limit = input.pushLimit(length);
@@ -596,148 +587,10 @@ public abstract class GeneratedMessageLite<
extension.singularToFieldSetType(value));
}
}
+
return true;
}
- /**
- * Parse an unknown field or an extension. For use by generated code only.
- *
- * <p>For use by generated code only.
- *
- * @return {@code true} unless the tag is an end-group tag.
- */
- protected <MessageType extends MessageLite> boolean parseUnknownFieldAsMessageSet(
- MessageType defaultInstance,
- CodedInputStream input,
- ExtensionRegistryLite extensionRegistry,
- int tag)
- throws IOException {
-
- if (tag == WireFormat.MESSAGE_SET_ITEM_TAG) {
- mergeMessageSetExtensionFromCodedStream(defaultInstance, input, extensionRegistry);
- return true;
- }
-
- // TODO(dweis): Do we really want to support non message set wire format in message sets?
- // Full runtime does... So we do for now.
- int wireType = WireFormat.getTagWireType(tag);
- if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
- return parseUnknownField(defaultInstance, input, extensionRegistry, tag);
- } else {
- // TODO(dweis): Should we throw on invalid input? Full runtime does not...
- return input.skipField(tag);
- }
- }
-
- /**
- * Merges the message set from the input stream; requires message set wire format.
- *
- * @param defaultInstance the default instance of the containing message we are parsing in
- * @param input the stream to parse from
- * @param extensionRegistry the registry to use when parsing
- */
- private <MessageType extends MessageLite> void mergeMessageSetExtensionFromCodedStream(
- MessageType defaultInstance,
- CodedInputStream input,
- ExtensionRegistryLite extensionRegistry)
- throws IOException {
- // The wire format for MessageSet is:
- // message MessageSet {
- // repeated group Item = 1 {
- // required int32 typeId = 2;
- // required bytes message = 3;
- // }
- // }
- // "typeId" is the extension's field number. The extension can only be
- // a message type, where "message" contains the encoded bytes of that
- // message.
- //
- // In practice, we will probably never see a MessageSet item in which
- // the message appears before the type ID, or where either field does not
- // appear exactly once. However, in theory such cases are valid, so we
- // should be prepared to accept them.
-
- int typeId = 0;
- ByteString rawBytes = null; // If we encounter "message" before "typeId"
- GeneratedExtension<?, ?> extension = null;
-
- // Read bytes from input, if we get it's type first then parse it eagerly,
- // otherwise we store the raw bytes in a local variable.
- while (true) {
- final int tag = input.readTag();
- if (tag == 0) {
- break;
- }
-
- if (tag == WireFormat.MESSAGE_SET_TYPE_ID_TAG) {
- typeId = input.readUInt32();
- if (typeId != 0) {
- extension = extensionRegistry.findLiteExtensionByNumber(defaultInstance, typeId);
- }
-
- } else if (tag == WireFormat.MESSAGE_SET_MESSAGE_TAG) {
- if (typeId != 0) {
- if (extension != null) {
- // We already know the type, so we can parse directly from the
- // input with no copying. Hooray!
- eagerlyMergeMessageSetExtension(input, extension, extensionRegistry, typeId);
- rawBytes = null;
- continue;
- }
- }
- // We haven't seen a type ID yet or we want parse message lazily.
- rawBytes = input.readBytes();
-
- } else { // Unknown tag. Skip it.
- if (!input.skipField(tag)) {
- break; // End of group
- }
- }
- }
- input.checkLastTagWas(WireFormat.MESSAGE_SET_ITEM_END_TAG);
-
- // Process the raw bytes.
- if (rawBytes != null && typeId != 0) { // Zero is not a valid type ID.
- if (extension != null) { // We known the type
- mergeMessageSetExtensionFromBytes(rawBytes, extensionRegistry, extension);
- } else { // We don't know how to parse this. Ignore it.
- if (rawBytes != null) {
- mergeLengthDelimitedField(typeId, rawBytes);
- }
- }
- }
- }
-
- private void eagerlyMergeMessageSetExtension(
- CodedInputStream input,
- GeneratedExtension<?, ?> extension,
- ExtensionRegistryLite extensionRegistry,
- int typeId)
- throws IOException {
- int fieldNumber = typeId;
- int tag = WireFormat.makeTag(typeId, WireFormat.WIRETYPE_LENGTH_DELIMITED);
- parseExtension(input, extensionRegistry, extension, tag, fieldNumber);
- }
-
- private void mergeMessageSetExtensionFromBytes(
- ByteString rawBytes,
- ExtensionRegistryLite extensionRegistry,
- GeneratedExtension<?, ?> extension)
- throws IOException {
- MessageLite.Builder subBuilder = null;
- MessageLite existingValue = (MessageLite) extensions.getField(extension.descriptor);
- if (existingValue != null) {
- subBuilder = existingValue.toBuilder();
- }
- if (subBuilder == null) {
- subBuilder = extension.getMessageDefaultInstance().newBuilderForType();
- }
- rawBytes.newCodedInput().readMessage(subBuilder, extensionRegistry);
- MessageLite value = subBuilder.build();
-
- extensions.setField(extension.descriptor, extension.singularToFieldSetType(value));
- }
-
private void verifyExtensionContainingType(
final GeneratedExtension<MessageType, ?> extension) {
if (extension.getContainingTypeDefaultInstance() !=
@@ -754,7 +607,7 @@ public abstract class GeneratedMessageLite<
public final <Type> boolean hasExtension(final ExtensionLite<MessageType, Type> extension) {
GeneratedExtension<MessageType, Type> extensionLite =
checkIsLite(extension);
-
+
verifyExtensionContainingType(extensionLite);
return extensions.hasField(extensionLite.descriptor);
}
@@ -765,7 +618,7 @@ public abstract class GeneratedMessageLite<
final ExtensionLite<MessageType, List<Type>> extension) {
GeneratedExtension<MessageType, List<Type>> extensionLite =
checkIsLite(extension);
-
+
verifyExtensionContainingType(extensionLite);
return extensions.getRepeatedFieldCount(extensionLite.descriptor);
}
@@ -776,7 +629,7 @@ public abstract class GeneratedMessageLite<
public final <Type> Type getExtension(final ExtensionLite<MessageType, Type> extension) {
GeneratedExtension<MessageType, Type> extensionLite =
checkIsLite(extension);
-
+
verifyExtensionContainingType(extensionLite);
final Object value = extensions.getField(extensionLite.descriptor);
if (value == null) {
@@ -807,7 +660,7 @@ public abstract class GeneratedMessageLite<
@Override
protected final void makeImmutable() {
super.makeImmutable();
-
+
extensions.makeImmutable();
}
@@ -881,7 +734,7 @@ public abstract class GeneratedMessageLite<
implements ExtendableMessageOrBuilder<MessageType, BuilderType> {
protected ExtendableBuilder(MessageType defaultInstance) {
super(defaultInstance);
-
+
// TODO(dweis): This is kind of an unnecessary clone since we construct a
// new instance in the parent constructor which makes the extensions
// immutable. This extra allocation shouldn't matter in practice
@@ -900,7 +753,7 @@ public abstract class GeneratedMessageLite<
if (!isBuilt) {
return;
}
-
+
super.copyOnWrite();
instance.extensions = instance.extensions.clone();
}
@@ -954,13 +807,21 @@ public abstract class GeneratedMessageLite<
return instance.getExtension(extension, index);
}
+ // This is implemented here only to work around an apparent bug in the
+ // Java compiler and/or build system. See bug #1898463. The mere presence
+ // of this dummy clone() implementation makes it go away.
+ @Override
+ public BuilderType clone() {
+ return super.clone();
+ }
+
/** Set the value of an extension. */
public final <Type> BuilderType setExtension(
final ExtensionLite<MessageType, Type> extension,
final Type value) {
GeneratedExtension<MessageType, Type> extensionLite =
checkIsLite(extension);
-
+
verifyExtensionContainingType(extensionLite);
copyOnWrite();
instance.extensions.setField(extensionLite.descriptor, extensionLite.toFieldSetType(value));
@@ -973,7 +834,7 @@ public abstract class GeneratedMessageLite<
final int index, final Type value) {
GeneratedExtension<MessageType, List<Type>> extensionLite =
checkIsLite(extension);
-
+
verifyExtensionContainingType(extensionLite);
copyOnWrite();
instance.extensions.setRepeatedField(
@@ -987,7 +848,7 @@ public abstract class GeneratedMessageLite<
final Type value) {
GeneratedExtension<MessageType, List<Type>> extensionLite =
checkIsLite(extension);
-
+
verifyExtensionContainingType(extensionLite);
copyOnWrite();
instance.extensions.addRepeatedField(
@@ -999,7 +860,7 @@ public abstract class GeneratedMessageLite<
public final <Type> BuilderType clearExtension(
final ExtensionLite<MessageType, ?> extension) {
GeneratedExtension<MessageType, ?> extensionLite = checkIsLite(extension);
-
+
verifyExtensionContainingType(extensionLite);
copyOnWrite();
instance.extensions.clearField(extensionLite.descriptor);
@@ -1296,7 +1157,7 @@ public abstract class GeneratedMessageLite<
public static SerializedForm of(MessageLite message) {
return new SerializedForm(message);
}
-
+
private static final long serialVersionUID = 0L;
private final String messageClassName;
@@ -1330,7 +1191,7 @@ public abstract class GeneratedMessageLite<
} catch (ClassNotFoundException e) {
throw new RuntimeException("Unable to find proto buffer class: " + messageClassName, e);
} catch (NoSuchFieldException e) {
- return readResolveFallback();
+ throw new RuntimeException("Unable to find DEFAULT_INSTANCE in " + messageClassName, e);
} catch (SecurityException e) {
throw new RuntimeException("Unable to call DEFAULT_INSTANCE in " + messageClassName, e);
} catch (IllegalAccessException e) {
@@ -1339,35 +1200,8 @@ public abstract class GeneratedMessageLite<
throw new RuntimeException("Unable to understand proto buffer", e);
}
}
-
- /**
- * @deprecated from v3.0.0-beta-3+, for compatibility with v2.5.0 and v2.6.1 generated code.
- */
- @Deprecated
- private Object readResolveFallback() throws ObjectStreamException {
- try {
- Class<?> messageClass = Class.forName(messageClassName);
- java.lang.reflect.Field defaultInstanceField =
- messageClass.getDeclaredField("defaultInstance");
- defaultInstanceField.setAccessible(true);
- MessageLite defaultInstance = (MessageLite) defaultInstanceField.get(null);
- return defaultInstance.newBuilderForType()
- .mergeFrom(asBytes)
- .buildPartial();
- } catch (ClassNotFoundException e) {
- throw new RuntimeException("Unable to find proto buffer class: " + messageClassName, e);
- } catch (NoSuchFieldException e) {
- throw new RuntimeException("Unable to find defaultInstance in " + messageClassName, e);
- } catch (SecurityException e) {
- throw new RuntimeException("Unable to call defaultInstance in " + messageClassName, e);
- } catch (IllegalAccessException e) {
- throw new RuntimeException("Unable to call parsePartialFrom", e);
- } catch (InvalidProtocolBufferException e) {
- throw new RuntimeException("Unable to understand proto buffer", e);
- }
- }
}
-
+
/**
* Checks that the {@link Extension} is Lite and returns it as a
* {@link GeneratedExtension}.
@@ -1381,7 +1215,7 @@ public abstract class GeneratedMessageLite<
if (!extension.isLite()) {
throw new IllegalArgumentException("Expected a lite extension.");
}
-
+
return (GeneratedExtension<MessageType, T>) extension;
}
@@ -1393,8 +1227,8 @@ public abstract class GeneratedMessageLite<
protected static final <T extends GeneratedMessageLite<T, ?>> boolean isInitialized(
T message, boolean shouldMemoize) {
return message.dynamicMethod(MethodToInvoke.IS_INITIALIZED, shouldMemoize) != null;
- }
-
+ }
+
protected static final <T extends GeneratedMessageLite<T, ?>> void makeImmutable(T message) {
message.dynamicMethod(MethodToInvoke.MAKE_IMMUTABLE);
}
@@ -1412,7 +1246,7 @@ public abstract class GeneratedMessageLite<
protected static LongList emptyLongList() {
return LongArrayList.emptyList();
}
-
+
protected static LongList mutableCopy(LongList list) {
int size = list.size();
return list.mutableCopyWithCapacity(
@@ -1422,7 +1256,7 @@ public abstract class GeneratedMessageLite<
protected static FloatList emptyFloatList() {
return FloatArrayList.emptyList();
}
-
+
protected static FloatList mutableCopy(FloatList list) {
int size = list.size();
return list.mutableCopyWithCapacity(
@@ -1432,7 +1266,7 @@ public abstract class GeneratedMessageLite<
protected static DoubleList emptyDoubleList() {
return DoubleArrayList.emptyList();
}
-
+
protected static DoubleList mutableCopy(DoubleList list) {
int size = list.size();
return list.mutableCopyWithCapacity(
@@ -1442,7 +1276,7 @@ public abstract class GeneratedMessageLite<
protected static BooleanList emptyBooleanList() {
return BooleanArrayList.emptyList();
}
-
+
protected static BooleanList mutableCopy(BooleanList list) {
int size = list.size();
return list.mutableCopyWithCapacity(
@@ -1452,7 +1286,7 @@ public abstract class GeneratedMessageLite<
protected static <E> ProtobufList<E> emptyProtobufList() {
return ProtobufArrayList.emptyList();
}
-
+
protected static <E> ProtobufList<E> mutableCopy(ProtobufList<E> list) {
int size = list.size();
return list.mutableCopyWithCapacity(
@@ -1466,20 +1300,20 @@ public abstract class GeneratedMessageLite<
*/
protected static class DefaultInstanceBasedParser<T extends GeneratedMessageLite<T, ?>>
extends AbstractParser<T> {
-
+
private T defaultInstance;
-
+
public DefaultInstanceBasedParser(T defaultInstance) {
this.defaultInstance = defaultInstance;
}
-
+
@Override
public T parsePartialFrom(CodedInputStream input, ExtensionRegistryLite extensionRegistry)
throws InvalidProtocolBufferException {
return GeneratedMessageLite.parsePartialFrom(defaultInstance, input, extensionRegistry);
}
}
-
+
/**
* A static helper method for parsing a partial from input using the extension registry and the
* instance.
@@ -1501,14 +1335,14 @@ public abstract class GeneratedMessageLite<
}
return result;
}
-
+
protected static <T extends GeneratedMessageLite<T, ?>> T parsePartialFrom(
T defaultInstance,
CodedInputStream input)
throws InvalidProtocolBufferException {
return parsePartialFrom(defaultInstance, input, ExtensionRegistryLite.getEmptyRegistry());
}
-
+
/**
* Helper method to check if message is initialized.
*
@@ -1539,7 +1373,7 @@ public abstract class GeneratedMessageLite<
throws InvalidProtocolBufferException {
return checkMessageInitialized(parsePartialFrom(defaultInstance, data, extensionRegistry));
}
-
+
// This is a special case since we want to verify that the last tag is 0. We assume we exhaust the
// ByteString.
private static <T extends GeneratedMessageLite<T, ?>> T parsePartialFrom(
@@ -1559,7 +1393,7 @@ public abstract class GeneratedMessageLite<
throw e;
}
}
-
+
// This is a special case since we want to verify that the last tag is 0. We assume we exhaust the
// ByteString.
private static <T extends GeneratedMessageLite<T, ?>> T parsePartialFrom(
@@ -1643,7 +1477,7 @@ public abstract class GeneratedMessageLite<
return checkMessageInitialized(
parsePartialDelimitedFrom(defaultInstance, input, extensionRegistry));
}
-
+
private static <T extends GeneratedMessageLite<T, ?>> T parsePartialDelimitedFrom(
T defaultInstance,
InputStream input,
@@ -1696,12 +1530,13 @@ public abstract class GeneratedMessageLite<
Object visitOneofLazyMessage(boolean minePresent, Object mine, Object other);
Object visitOneofMessage(boolean minePresent, Object mine, Object other);
void visitOneofNotSet(boolean minePresent);
-
+
/**
* Message fields use null sentinals.
*/
<T extends MessageLite> T visitMessage(T mine, T other);
- LazyFieldLite visitLazyMessage(LazyFieldLite mine, LazyFieldLite other);
+ LazyFieldLite visitLazyMessage(
+ boolean minePresent, LazyFieldLite mine, boolean otherPresent, LazyFieldLite other);
<T> ProtobufList<T> visitList(ProtobufList<T> mine, ProtobufList<T> other);
BooleanList visitBooleanList(BooleanList mine, BooleanList other);
@@ -1851,7 +1686,7 @@ public abstract class GeneratedMessageLite<
}
throw NOT_EQUALS;
}
-
+
@Override
public Object visitOneofMessage(boolean minePresent, Object mine, Object other) {
if (minePresent && ((GeneratedMessageLite<?, ?>) mine).equals(this, (MessageLite) other)) {
@@ -1859,7 +1694,7 @@ public abstract class GeneratedMessageLite<
}
throw NOT_EQUALS;
}
-
+
@Override
public void visitOneofNotSet(boolean minePresent) {
if (minePresent) {
@@ -1881,17 +1716,13 @@ public abstract class GeneratedMessageLite<
return mine;
}
-
+
@Override
public LazyFieldLite visitLazyMessage(
- LazyFieldLite mine, LazyFieldLite other) {
- if (mine == null && other == null) {
- return null;
- }
- if (mine == null || other == null) {
- throw NOT_EQUALS;
- }
- if (mine.equals(other)) {
+ boolean minePresent, LazyFieldLite mine, boolean otherPresent, LazyFieldLite other) {
+ if (!minePresent && !otherPresent) {
+ return mine;
+ } else if (minePresent && otherPresent && mine.equals(other)) {
return mine;
}
throw NOT_EQUALS;
@@ -1982,7 +1813,7 @@ public abstract class GeneratedMessageLite<
// The caller must ensure that the visitor is invoked parameterized with this and this such that
// other is this. This is required due to how oneof cases are handled. See the class comment
// on Visitor for more information.
-
+
private int hashCode = 0;
@Override
@@ -2078,7 +1909,7 @@ public abstract class GeneratedMessageLite<
hashCode = (53 * hashCode) + mine.hashCode();
return mine;
}
-
+
@Override
public Object visitOneofMessage(boolean minePresent, Object mine, Object other) {
return visitMessage((MessageLite) mine, (MessageLite) other);
@@ -2087,7 +1918,7 @@ public abstract class GeneratedMessageLite<
@Override
public void visitOneofNotSet(boolean minePresent) {
if (minePresent) {
- throw new IllegalStateException(); // Can't happen if other == this.
+ throw new IllegalStateException(); // Can't happen if other == this.
}
}
@@ -2108,14 +1939,9 @@ public abstract class GeneratedMessageLite<
}
@Override
- public LazyFieldLite visitLazyMessage(LazyFieldLite mine, LazyFieldLite other) {
- final int protoHash;
- if (mine != null) {
- protoHash = mine.hashCode();
- } else {
- protoHash = 37;
- }
- hashCode = (53 * hashCode) + protoHash;
+ public LazyFieldLite visitLazyMessage(
+ boolean minePresent, LazyFieldLite mine, boolean otherPresent, LazyFieldLite other) {
+ hashCode = (53 * hashCode) + mine.hashCode();
return mine;
}
@@ -2170,7 +1996,7 @@ public abstract class GeneratedMessageLite<
hashCode = (53 * hashCode) + mine.hashCode();
return mine;
}
-
+
@Override
public <K, V> MapFieldLite<K, V> visitMap(MapFieldLite<K, V> mine, MapFieldLite<K, V> other) {
hashCode = (53 * hashCode) + mine.hashCode();
@@ -2238,7 +2064,7 @@ public abstract class GeneratedMessageLite<
@Override
public Object visitOneofDouble(boolean minePresent, Object mine, Object other) {
- return other;
+ return other;
}
@Override
@@ -2248,26 +2074,29 @@ public abstract class GeneratedMessageLite<
@Override
public Object visitOneofLong(boolean minePresent, Object mine, Object other) {
- return other;
+ return other;
}
@Override
public Object visitOneofString(boolean minePresent, Object mine, Object other) {
- return other;
+ return other;
}
@Override
public Object visitOneofByteString(boolean minePresent, Object mine, Object other) {
- return other;
+ return other;
}
@Override
public Object visitOneofLazyMessage(boolean minePresent, Object mine, Object other) {
- LazyFieldLite lazy = minePresent ? (LazyFieldLite) mine : new LazyFieldLite();
- lazy.merge((LazyFieldLite) other);
- return lazy;
+ if (minePresent) {
+ LazyFieldLite lazy = (LazyFieldLite) mine;
+ lazy.merge((LazyFieldLite) other);
+ return lazy;
+ }
+ return other;
}
-
+
@Override
public Object visitOneofMessage(boolean minePresent, Object mine, Object other) {
if (minePresent) {
@@ -2275,7 +2104,7 @@ public abstract class GeneratedMessageLite<
}
return other;
}
-
+
@Override
public void visitOneofNotSet(boolean minePresent) {
return;
@@ -2292,13 +2121,12 @@ public abstract class GeneratedMessageLite<
}
@Override
- public LazyFieldLite visitLazyMessage(LazyFieldLite mine, LazyFieldLite other) {
- if (other != null) {
- if (mine == null) {
- mine = new LazyFieldLite();
- }
- mine.merge(other);
- }
+ public LazyFieldLite visitLazyMessage(
+ boolean minePresent, LazyFieldLite mine, boolean otherPresent, LazyFieldLite other) {
+ // LazyFieldLite's are never null so we can just copy across. Necessary to avoid leakage
+ // from builder into immutable message.
+ // TODO(dweis): Change to null sentinels?
+ mine.merge(other);
return mine;
}
@@ -2312,7 +2140,7 @@ public abstract class GeneratedMessageLite<
}
mine.addAll(other);
}
-
+
return size > 0 ? mine : other;
}
@@ -2326,7 +2154,7 @@ public abstract class GeneratedMessageLite<
}
mine.addAll(other);
}
-
+
return size > 0 ? mine : other;
}
@@ -2340,7 +2168,7 @@ public abstract class GeneratedMessageLite<
}
mine.addAll(other);
}
-
+
return size > 0 ? mine : other;
}
@@ -2354,7 +2182,7 @@ public abstract class GeneratedMessageLite<
}
mine.addAll(other);
}
-
+
return size > 0 ? mine : other;
}
@@ -2368,7 +2196,7 @@ public abstract class GeneratedMessageLite<
}
mine.addAll(other);
}
-
+
return size > 0 ? mine : other;
}
@@ -2382,7 +2210,7 @@ public abstract class GeneratedMessageLite<
}
mine.addAll(other);
}
-
+
return size > 0 ? mine : other;
}
@@ -2404,15 +2232,10 @@ public abstract class GeneratedMessageLite<
return other == UnknownFieldSetLite.getDefaultInstance()
? mine : UnknownFieldSetLite.mutableCopyOf(mine, other);
}
-
+
@Override
public <K, V> MapFieldLite<K, V> visitMap(MapFieldLite<K, V> mine, MapFieldLite<K, V> other) {
- if (!other.isEmpty()) {
- if (!mine.isMutable()) {
- mine = mine.mutableCopy();
- }
- mine.mergeFrom(other);
- }
+ mine.mergeFrom(other);
return mine;
}
}

Powered by Google App Engine
This is Rietveld 408576698