Automated rollback of commit 05e5107d98.

PiperOrigin-RevId: 638409590
pull/16975/head
Protobuf Team Bot 8 months ago committed by Copybara-Service
parent 3a9f0743ea
commit 4814bda38c
  1. 33
      java/core/src/main/java/com/google/protobuf/GeneratedMessage.java
  2. 10
      src/google/protobuf/compiler/java/full/message.cc

@ -1028,23 +1028,7 @@ public abstract class GeneratedMessage extends AbstractMessage implements Serial
* numbers, but we must write them in canonical (sorted by field number) order. ExtensionWriter
* helps us write individual ranges of extensions at once.
*/
protected interface ExtensionWriter {
public void writeUntil(final int end, final CodedOutputStream output) throws IOException;
}
// Singleton instance so we can avoid allocating a new one for each message serialization.
private static final NoOpExtensionWriter NO_OP_EXTENSION_WRITER = new NoOpExtensionWriter();
/** No-op implementation that writes nothing, for messages with no extensions. */
private static final class NoOpExtensionWriter implements ExtensionWriter {
@Override
public void writeUntil(final int end, final CodedOutputStream output) {
// no-op
}
}
/** Implementation that writes extensions from the FieldSet, for messages with extensions. */
private final class FieldSetExtensionWriter implements ExtensionWriter {
protected class ExtensionWriter {
// Imagine how much simpler this code would be if Java iterators had
// a way to get the next element without advancing the iterator.
@ -1052,14 +1036,13 @@ public abstract class GeneratedMessage extends AbstractMessage implements Serial
private Map.Entry<FieldDescriptor, Object> next;
private final boolean messageSetWireFormat;
private FieldSetExtensionWriter(final boolean messageSetWireFormat) {
private ExtensionWriter(final boolean messageSetWireFormat) {
if (iter.hasNext()) {
next = iter.next();
}
this.messageSetWireFormat = messageSetWireFormat;
}
@Override
public void writeUntil(final int end, final CodedOutputStream output) throws IOException {
while (next != null && next.getKey().getNumber() < end) {
FieldDescriptor descriptor = next.getKey();
@ -1093,19 +1076,11 @@ public abstract class GeneratedMessage extends AbstractMessage implements Serial
}
protected ExtensionWriter newExtensionWriter() {
// Avoid allocation in the common case of no extensions.
if (extensions.isEmpty()) {
return NO_OP_EXTENSION_WRITER;
}
return new FieldSetExtensionWriter(false);
return new ExtensionWriter(false);
}
protected ExtensionWriter newMessageSetExtensionWriter() {
// Avoid allocation in the common case of no extensions.
if (extensions.isEmpty()) {
return NO_OP_EXTENSION_WRITER;
}
return new FieldSetExtensionWriter(true);
return new ExtensionWriter(true);
}
/** Called by subclasses to compute the size of extensions. */

@ -587,13 +587,15 @@ void ImmutableMessageGenerator::GenerateMessageSerializationMethods(
if (descriptor_->options().message_set_wire_format()) {
printer->Print(
"com.google.protobuf.GeneratedMessage\n"
" .ExtendableMessage.ExtensionWriter\n"
" extensionWriter = newMessageSetExtensionWriter();\n");
" .ExtendableMessage<$classname$>.ExtensionWriter\n"
" extensionWriter = newMessageSetExtensionWriter();\n",
"classname", name_resolver_->GetImmutableClassName(descriptor_));
} else {
printer->Print(
"com.google.protobuf.GeneratedMessage\n"
" .ExtendableMessage.ExtensionWriter\n"
" extensionWriter = newExtensionWriter();\n");
" .ExtendableMessage<$classname$>.ExtensionWriter\n"
" extensionWriter = newExtensionWriter();\n",
"classname", name_resolver_->GetImmutableClassName(descriptor_));
}
}

Loading…
Cancel
Save