|
16 | 16 |
|
17 | 17 | import com.google.protobuf.DescriptorProtos;
|
18 | 18 | import com.google.protobuf.Descriptors;
|
| 19 | +import com.google.protobuf.DynamicMessage; |
| 20 | +import com.google.protobuf.ExtensionRegistry; |
| 21 | +import com.google.protobuf.TypeRegistry; |
19 | 22 | import java.util.ArrayList;
|
20 | 23 | import java.util.HashMap;
|
21 | 24 | import java.util.List;
|
@@ -70,4 +73,50 @@ static Map<String, Descriptors.FileDescriptor> parseFileDescriptors(
|
70 | 73 | }
|
71 | 74 | return fileDescriptorMap;
|
72 | 75 | }
|
| 76 | + |
| 77 | + static TypeRegistry createTypeRegistry( |
| 78 | + Iterable<? extends Descriptors.FileDescriptor> fileDescriptors) { |
| 79 | + TypeRegistry.Builder registryBuilder = TypeRegistry.newBuilder(); |
| 80 | + for (Descriptors.FileDescriptor fileDescriptor : fileDescriptors) { |
| 81 | + registryBuilder.add(fileDescriptor.getMessageTypes()); |
| 82 | + } |
| 83 | + return registryBuilder.build(); |
| 84 | + } |
| 85 | + |
| 86 | + static ExtensionRegistry createExtensionRegistry( |
| 87 | + Iterable<? extends Descriptors.FileDescriptor> fileDescriptors) { |
| 88 | + ExtensionRegistry registry = ExtensionRegistry.newInstance(); |
| 89 | + for (Descriptors.FileDescriptor fileDescriptor : fileDescriptors) { |
| 90 | + registerFileExtensions(registry, fileDescriptor); |
| 91 | + } |
| 92 | + return registry; |
| 93 | + } |
| 94 | + |
| 95 | + private static void registerFileExtensions( |
| 96 | + ExtensionRegistry registry, Descriptors.FileDescriptor fileDescriptor) { |
| 97 | + registerExtensions(registry, fileDescriptor.getExtensions()); |
| 98 | + for (Descriptors.Descriptor descriptor : fileDescriptor.getMessageTypes()) { |
| 99 | + registerMessageExtensions(registry, descriptor); |
| 100 | + } |
| 101 | + } |
| 102 | + |
| 103 | + private static void registerMessageExtensions( |
| 104 | + ExtensionRegistry registry, Descriptors.Descriptor descriptor) { |
| 105 | + registerExtensions(registry, descriptor.getExtensions()); |
| 106 | + for (Descriptors.Descriptor nestedDescriptor : descriptor.getNestedTypes()) { |
| 107 | + registerMessageExtensions(registry, nestedDescriptor); |
| 108 | + } |
| 109 | + } |
| 110 | + |
| 111 | + private static void registerExtensions( |
| 112 | + ExtensionRegistry registry, List<Descriptors.FieldDescriptor> extensions) { |
| 113 | + for (Descriptors.FieldDescriptor fieldDescriptor : extensions) { |
| 114 | + if (fieldDescriptor.getJavaType() == Descriptors.FieldDescriptor.JavaType.MESSAGE) { |
| 115 | + registry.add( |
| 116 | + fieldDescriptor, DynamicMessage.getDefaultInstance(fieldDescriptor.getMessageType())); |
| 117 | + } else { |
| 118 | + registry.add(fieldDescriptor); |
| 119 | + } |
| 120 | + } |
| 121 | + } |
73 | 122 | }
|
0 commit comments