// --- Descriptor ---
default void visit(Descriptor descriptor, DescriptorProto proto) {
onVisit(descriptor, proto);
for (int i = 0; i < descriptor.getEnumTypes().size(); i++)
visit(descriptor.getEnumTypes().get(i), proto != null ? proto.getEnumType(i) : null);
for (int i = 0; i < descriptor.getOneofs().size(); i++)
visit(descriptor.getOneofs().get(i), proto != null ? proto.getOneofDecl(i) : null);
for (int i = 0; i < descriptor.getFields().size(); i++)
visit(descriptor.getFields().get(i), proto != null ? proto.getField(i) : null);
for (int i = 0; i < descriptor.getNestedTypes().size(); i++)
visit(descriptor.getNestedTypes().get(i), proto != null ? proto.getNestedType(i) : null);
for (int i = 0; i < descriptor.getExtensions().size(); i++)
visit(descriptor.getExtensions().get(i), proto != null ? proto.getExtension(i) : null);
// for (int i = 0; i < descriptor.getExtensionRanges().size(); i++)
// visit(descriptor.getExtensionRanges().get(i), proto != null ? proto.getExtensionRange(i) : null);
}
// --- ExtensionRange ---
// default void visit(Descriptor.ExtensionRange descriptor, DescriptorProto.ExtensionRange proto) {
// onVisit(descriptor, proto);
// }