Skip to content

Commit 6e6d0bc

Browse files
zhangskzcopybara-github
authored andcommitted
Add Java FileDescriptor.copyHeadingTo() which copies file-level settings (e.g. syntax, package, file options) to FileDescriptorProto.Builder
PiperOrigin-RevId: 516635134
1 parent 330e10d commit 6e6d0bc

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

java/core/src/main/java/com/google/protobuf/Descriptors.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,17 @@ public Syntax getSyntax() {
182182
return Syntax.PROTO2;
183183
}
184184

185+
public void copyHeadingTo(FileDescriptorProto.Builder protoBuilder) {
186+
protoBuilder.setName(getName()).setSyntax(getSyntax().name);
187+
if (!getPackage().isEmpty()) {
188+
protoBuilder.setPackage(getPackage());
189+
}
190+
191+
if (!getOptions().equals(FileOptions.getDefaultInstance())) {
192+
protoBuilder.setOptions(getOptions());
193+
}
194+
}
195+
185196
/**
186197
* Find a message type in the file by name. Does not find nested types.
187198
*

java/core/src/test/java/com/google/protobuf/DescriptorsTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,40 @@ public void testFileDescriptorGetSyntax() throws Exception {
159159
assertThat(file3.getSyntax()).isEqualTo(Descriptors.FileDescriptor.Syntax.PROTO3);
160160
}
161161

162+
@Test
163+
public void testFileDescriptorCopyHeadingTo() throws Exception {
164+
FileDescriptorProto.Builder protoBuilder =
165+
FileDescriptorProto.newBuilder()
166+
.setName("foo.proto")
167+
.setPackage("foo.bar.baz")
168+
.setSyntax("proto2")
169+
.setOptions(FileOptions.newBuilder().setJavaPackage("foo.bar.baz").build())
170+
// Won't be copied.
171+
.addMessageType(DescriptorProto.newBuilder().setName("Foo").build());
172+
FileDescriptor file2 =
173+
Descriptors.FileDescriptor.buildFrom(protoBuilder.build(), new FileDescriptor[0]);
174+
FileDescriptorProto.Builder protoBuilder2 = FileDescriptorProto.newBuilder();
175+
file2.copyHeadingTo(protoBuilder2);
176+
FileDescriptorProto toProto2 = protoBuilder2.build();
177+
assertThat(toProto2.getName()).isEqualTo("foo.proto");
178+
assertThat(toProto2.getPackage()).isEqualTo("foo.bar.baz");
179+
assertThat(toProto2.getSyntax()).isEqualTo("proto2");
180+
assertThat(toProto2.getOptions().getJavaPackage()).isEqualTo("foo.bar.baz");
181+
assertThat(toProto2.getMessageTypeList()).isEmpty();
182+
183+
protoBuilder.setSyntax("proto3");
184+
FileDescriptor file3 =
185+
Descriptors.FileDescriptor.buildFrom(protoBuilder.build(), new FileDescriptor[0]);
186+
FileDescriptorProto.Builder protoBuilder3 = FileDescriptorProto.newBuilder();
187+
file3.copyHeadingTo(protoBuilder3);
188+
FileDescriptorProto toProto3 = protoBuilder3.build();
189+
assertThat(toProto3.getName()).isEqualTo("foo.proto");
190+
assertThat(toProto3.getPackage()).isEqualTo("foo.bar.baz");
191+
assertThat(toProto3.getSyntax()).isEqualTo("proto3");
192+
assertThat(toProto2.getOptions().getJavaPackage()).isEqualTo("foo.bar.baz");
193+
assertThat(toProto3.getMessageTypeList()).isEmpty();
194+
}
195+
162196
@Test
163197
public void testDescriptor() throws Exception {
164198
Descriptor messageType = TestAllTypes.getDescriptor();

0 commit comments

Comments
 (0)