Add Java FileDescriptor.copyHeadingTo() which copies file-level settings (e.g. syntax, package, file options) to FileDescriptorProto.Builder

PiperOrigin-RevId: 516635134
pull/12228/head
Sandy Zhang 2 years ago committed by Copybara-Service
parent 330e10d53f
commit 6e6d0bce4a
  1. 11
      java/core/src/main/java/com/google/protobuf/Descriptors.java
  2. 34
      java/core/src/test/java/com/google/protobuf/DescriptorsTest.java

@ -182,6 +182,17 @@ public final class Descriptors {
return Syntax.PROTO2;
}
public void copyHeadingTo(FileDescriptorProto.Builder protoBuilder) {
protoBuilder.setName(getName()).setSyntax(getSyntax().name);
if (!getPackage().isEmpty()) {
protoBuilder.setPackage(getPackage());
}
if (!getOptions().equals(FileOptions.getDefaultInstance())) {
protoBuilder.setOptions(getOptions());
}
}
/**
* Find a message type in the file by name. Does not find nested types.
*

@ -159,6 +159,40 @@ public class DescriptorsTest {
assertThat(file3.getSyntax()).isEqualTo(Descriptors.FileDescriptor.Syntax.PROTO3);
}
@Test
public void testFileDescriptorCopyHeadingTo() throws Exception {
FileDescriptorProto.Builder protoBuilder =
FileDescriptorProto.newBuilder()
.setName("foo.proto")
.setPackage("foo.bar.baz")
.setSyntax("proto2")
.setOptions(FileOptions.newBuilder().setJavaPackage("foo.bar.baz").build())
// Won't be copied.
.addMessageType(DescriptorProto.newBuilder().setName("Foo").build());
FileDescriptor file2 =
Descriptors.FileDescriptor.buildFrom(protoBuilder.build(), new FileDescriptor[0]);
FileDescriptorProto.Builder protoBuilder2 = FileDescriptorProto.newBuilder();
file2.copyHeadingTo(protoBuilder2);
FileDescriptorProto toProto2 = protoBuilder2.build();
assertThat(toProto2.getName()).isEqualTo("foo.proto");
assertThat(toProto2.getPackage()).isEqualTo("foo.bar.baz");
assertThat(toProto2.getSyntax()).isEqualTo("proto2");
assertThat(toProto2.getOptions().getJavaPackage()).isEqualTo("foo.bar.baz");
assertThat(toProto2.getMessageTypeList()).isEmpty();
protoBuilder.setSyntax("proto3");
FileDescriptor file3 =
Descriptors.FileDescriptor.buildFrom(protoBuilder.build(), new FileDescriptor[0]);
FileDescriptorProto.Builder protoBuilder3 = FileDescriptorProto.newBuilder();
file3.copyHeadingTo(protoBuilder3);
FileDescriptorProto toProto3 = protoBuilder3.build();
assertThat(toProto3.getName()).isEqualTo("foo.proto");
assertThat(toProto3.getPackage()).isEqualTo("foo.bar.baz");
assertThat(toProto3.getSyntax()).isEqualTo("proto3");
assertThat(toProto2.getOptions().getJavaPackage()).isEqualTo("foo.bar.baz");
assertThat(toProto3.getMessageTypeList()).isEmpty();
}
@Test
public void testDescriptor() throws Exception {
Descriptor messageType = TestAllTypes.getDescriptor();

Loading…
Cancel
Save