JSON -> Json

pull/10581/head
Josh Humphries 3 years ago
parent cbd5c84b6b
commit 7c57fb08e6
  1. 24
      src/google/protobuf/descriptor.cc

@ -3858,9 +3858,9 @@ class DescriptorBuilder {
const ServiceDescriptor* parent, MethodDescriptor* result, const ServiceDescriptor* parent, MethodDescriptor* result,
internal::FlatAllocator& alloc); internal::FlatAllocator& alloc);
void CheckFieldJSONNameUniqueness(const DescriptorProto& proto, void CheckFieldJsonNameUniqueness(const DescriptorProto& proto,
const Descriptor* result); const Descriptor* result);
void CheckFieldJSONNameUniqueness(std::string message_name, void CheckFieldJsonNameUniqueness(std::string message_name,
const DescriptorProto& message, const DescriptorProto& message,
bool is_proto2, bool use_custom_names); bool is_proto2, bool use_custom_names);
void CheckEnumValueUniqueness(const EnumDescriptorProto& proto, void CheckEnumValueUniqueness(const EnumDescriptorProto& proto,
@ -5421,7 +5421,7 @@ void DescriptorBuilder::BuildMessage(const DescriptorProto& proto,
} }
} }
CheckFieldJSONNameUniqueness(proto, result); CheckFieldJsonNameUniqueness(proto, result);
// Check that fields aren't using reserved names or numbers and that they // Check that fields aren't using reserved names or numbers and that they
// aren't using extension numbers. // aren't using extension numbers.
@ -5489,7 +5489,7 @@ void DescriptorBuilder::BuildMessage(const DescriptorProto& proto,
} }
} }
std::string GetJSONName(const FieldDescriptorProto& field, bool use_custom, bool* was_custom) { std::string GetJsonName(const FieldDescriptorProto& field, bool use_custom, bool* was_custom) {
if (use_custom && field.has_json_name()) { if (use_custom && field.has_json_name()) {
*was_custom = true; *was_custom = true;
return field.json_name(); return field.json_name();
@ -5498,28 +5498,28 @@ std::string GetJSONName(const FieldDescriptorProto& field, bool use_custom, bool
return ToJsonName(field.name()); return ToJsonName(field.name());
} }
void DescriptorBuilder::CheckFieldJSONNameUniqueness( void DescriptorBuilder::CheckFieldJsonNameUniqueness(
const DescriptorProto& proto, const Descriptor* result) { const DescriptorProto& proto, const Descriptor* result) {
bool is_proto2 = result->file()->syntax() == FileDescriptor::SYNTAX_PROTO2; bool is_proto2 = result->file()->syntax() == FileDescriptor::SYNTAX_PROTO2;
std::string message_name = result->full_name(); std::string message_name = result->full_name();
// two passes: one looking only at default JSON names, and one that considers custom JSON names // two passes: one looking only at default JSON names, and one that considers custom JSON names
CheckFieldJSONNameUniqueness(message_name, proto, is_proto2, false); CheckFieldJsonNameUniqueness(message_name, proto, is_proto2, false);
CheckFieldJSONNameUniqueness(message_name, proto, is_proto2, true); CheckFieldJsonNameUniqueness(message_name, proto, is_proto2, true);
} }
struct JSONNameDetails { struct JsonNameDetails {
const FieldDescriptorProto* field; const FieldDescriptorProto* field;
std::string orig_name; std::string orig_name;
bool is_custom; bool is_custom;
}; };
void DescriptorBuilder::CheckFieldJSONNameUniqueness( void DescriptorBuilder::CheckFieldJsonNameUniqueness(
std::string message_name,const DescriptorProto& message, bool is_proto2, bool use_custom_names) { std::string message_name,const DescriptorProto& message, bool is_proto2, bool use_custom_names) {
std::map<std::string, struct JSONNameDetails> name_to_field; std::map<std::string, JsonNameDetails> name_to_field;
for (int i = 0; i < message.field_size(); ++i) { for (int i = 0; i < message.field_size(); ++i) {
bool is_custom; bool is_custom;
std::string name = GetJSONName(message.field(i), use_custom_names, &is_custom); std::string name = GetJsonName(message.field(i), use_custom_names, &is_custom);
std::string lowercase_name = absl::AsciiStrToLower(name); std::string lowercase_name = absl::AsciiStrToLower(name);
auto existing = name_to_field.find(lowercase_name); auto existing = name_to_field.find(lowercase_name);
if (existing != name_to_field.end()) { if (existing != name_to_field.end()) {
@ -5552,7 +5552,7 @@ void DescriptorBuilder::CheckFieldJSONNameUniqueness(
DescriptorPool::ErrorCollector::NAME, error_message); DescriptorPool::ErrorCollector::NAME, error_message);
} }
} else { } else {
struct JSONNameDetails details = { &message.field(i), name, is_custom }; JsonNameDetails details = { &message.field(i), name, is_custom };
name_to_field[lowercase_name] = details; name_to_field[lowercase_name] = details;
} }
} }

Loading…
Cancel
Save