private static void recursivelyAddDescriptors( Descriptor message, Set<Descriptor> descriptors, ExtensionRegistry registry) { if (descriptors.contains(message)) { return; } descriptors.add(message); for (FieldDescriptor f : message.getFields()) { recursivelyAddDescriptors(f, descriptors, registry); } for (FieldDescriptor f : message.getExtensions()) { recursivelyAddDescriptors(f, descriptors, registry); } for (ExtensionInfo info : registry.getAllImmutableExtensionsByExtendedType(message.getFullName())) { recursivelyAddDescriptors(info.descriptor, descriptors, registry); } for (ExtensionInfo info : registry.getAllMutableExtensionsByExtendedType(message.getFullName())) { recursivelyAddDescriptors(info.descriptor, descriptors, registry); } }