Sync from Piper @mkruskal/footmitten

PROTOBUF_SYNC_PIPER
pull/10729/head
Mike Kruskal 2 years ago
parent a7da44c5ae
commit 77036367ce
  1. 7
      java/core/src/main/java/com/google/protobuf/ExtensionSchemaLite.java
  2. 8
      java/core/src/main/java/com/google/protobuf/FieldSet.java

@ -255,6 +255,9 @@ final class ExtensionSchemaLite extends ExtensionSchema<ExtensionDescriptor> {
value = reader.readString();
break;
case GROUP:
// Special case handling for non-repeated sub-messages: merge in-place rather than
// building up new sub-messages and merging those, which is too slow.
// TODO(b/249368670): clean this up
if (!extension.isRepeated()) {
Object oldValue = extensions.getField(extension.descriptor);
if (oldValue instanceof GeneratedMessageLite) {
@ -275,6 +278,9 @@ final class ExtensionSchemaLite extends ExtensionSchema<ExtensionDescriptor> {
break;
case MESSAGE:
// Special case handling for non-repeated sub-messages: merge in-place rather than
// building up new sub-messages and merging those, which is too slow.
// TODO(b/249368670): clean this up
if (!extension.isRepeated()) {
Object oldValue = extensions.getField(extension.descriptor);
if (oldValue instanceof GeneratedMessageLite) {
@ -304,6 +310,7 @@ final class ExtensionSchemaLite extends ExtensionSchema<ExtensionDescriptor> {
switch (extension.getLiteType()) {
case MESSAGE:
case GROUP:
// TODO(b/249368670): this shouldn't be reachable, clean this up
Object oldValue = extensions.getField(extension.descriptor);
if (oldValue != null) {
value = Internal.mergeMessage(oldValue, value);

@ -39,6 +39,7 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/**
* A class which represents an arbitrary set of fields of some message type. This is used to
@ -123,9 +124,10 @@ final class FieldSet<T extends FieldSet.FieldDescriptorLite<T>> {
if (isImmutable) {
return;
}
for (Object value : fields.values()) {
if (value instanceof GeneratedMessageLite) {
((GeneratedMessageLite<?, ?>) value).makeImmutable();
for (int i = 0; i < fields.getNumArrayEntries(); ++i) {
Entry<T, Object> entry = fields.getArrayEntryAt(i);
if (entry.getValue() instanceof GeneratedMessageLite) {
((GeneratedMessageLite<?, ?>) entry.getValue()).makeImmutable();
}
}
fields.makeImmutable();

Loading…
Cancel
Save