Merge tag 'refs/tags/sync-piper' into sync-stage

pull/8350/head
Joshua Haberman 4 years ago
commit 899c276248
  1. 3
      conformance/conformance_cpp.cc
  2. 232
      csharp/src/Google.Protobuf.Test.TestProtos/UnittestProto3Optional.cs
  3. BIN
      csharp/src/Google.Protobuf.Test/testprotos.pb
  4. 47
      java/core/src/main/java/com/google/protobuf/CodedInputStream.java
  5. 2
      java/core/src/main/java/com/google/protobuf/FieldSet.java
  6. 21
      java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java
  7. 23
      java/core/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java
  8. 2
      java/core/src/main/java/com/google/protobuf/UnsafeUtil.java
  9. 156
      java/lite/src/test/java/com/google/protobuf/LiteTest.java
  10. 2
      python/setup.py
  11. 11
      src/google/protobuf/any.pb.cc
  12. 75
      src/google/protobuf/any.pb.h
  13. 21
      src/google/protobuf/api.pb.cc
  14. 255
      src/google/protobuf/api.pb.h
  15. 28
      src/google/protobuf/arenastring.h
  16. 21
      src/google/protobuf/compiler/command_line_interface.cc
  17. 8
      src/google/protobuf/compiler/command_line_interface.h
  18. 1
      src/google/protobuf/compiler/command_line_interface_unittest.cc
  19. 30
      src/google/protobuf/compiler/cpp/cpp_file.cc
  20. 39
      src/google/protobuf/compiler/cpp/cpp_message.cc
  21. 8
      src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc
  22. 118
      src/google/protobuf/compiler/cpp/cpp_string_field.cc
  23. 1
      src/google/protobuf/compiler/java/java_context.cc
  24. 8
      src/google/protobuf/compiler/java/java_map_field_lite.cc
  25. 1
      src/google/protobuf/compiler/java/java_message.cc
  26. 3
      src/google/protobuf/compiler/java/java_primitive_field_lite.cc
  27. 3
      src/google/protobuf/compiler/java/java_string_field_lite.cc
  28. 26
      src/google/protobuf/compiler/plugin.pb.cc
  29. 233
      src/google/protobuf/compiler/plugin.pb.h
  30. 141
      src/google/protobuf/descriptor.pb.cc
  31. 1327
      src/google/protobuf/descriptor.pb.h
  32. 11
      src/google/protobuf/duration.pb.cc
  33. 11
      src/google/protobuf/duration.pb.h
  34. 11
      src/google/protobuf/empty.pb.cc
  35. 11
      src/google/protobuf/empty.pb.h
  36. 11
      src/google/protobuf/field_mask.pb.cc
  37. 11
      src/google/protobuf/field_mask.pb.h
  38. 11
      src/google/protobuf/generated_message_reflection.cc
  39. 8
      src/google/protobuf/generated_message_reflection.h
  40. 21
      src/google/protobuf/io/coded_stream.h
  41. 6
      src/google/protobuf/metadata_lite.h
  42. 10
      src/google/protobuf/port_def.inc
  43. 29
      src/google/protobuf/proto3_arena_unittest.cc
  44. 9
      src/google/protobuf/repeated_field.cc
  45. 65
      src/google/protobuf/repeated_field.h
  46. 11
      src/google/protobuf/source_context.pb.cc
  47. 43
      src/google/protobuf/source_context.pb.h
  48. 25
      src/google/protobuf/struct.pb.cc
  49. 89
      src/google/protobuf/struct.pb.h
  50. 11
      src/google/protobuf/timestamp.pb.cc
  51. 11
      src/google/protobuf/timestamp.pb.h
  52. 31
      src/google/protobuf/type.pb.cc
  53. 307
      src/google/protobuf/type.pb.h
  54. 5
      src/google/protobuf/unittest_lite.proto
  55. 12
      src/google/protobuf/unittest_proto3_optional.proto
  56. 12
      src/google/protobuf/util/internal/constants.h
  57. 53
      src/google/protobuf/util/internal/datapiece.cc
  58. 27
      src/google/protobuf/util/internal/datapiece.h
  59. 27
      src/google/protobuf/util/internal/default_value_objectwriter.cc
  60. 9
      src/google/protobuf/util/internal/default_value_objectwriter.h
  61. 42
      src/google/protobuf/util/internal/expecting_objectwriter.h
  62. 33
      src/google/protobuf/util/internal/json_escaping.cc
  63. 16
      src/google/protobuf/util/internal/json_escaping.h
  64. 9
      src/google/protobuf/util/internal/json_objectwriter.cc
  65. 13
      src/google/protobuf/util/internal/json_objectwriter.h
  66. 6
      src/google/protobuf/util/internal/json_objectwriter_test.cc
  67. 150
      src/google/protobuf/util/internal/json_stream_parser.cc
  68. 58
      src/google/protobuf/util/internal/json_stream_parser.h
  69. 190
      src/google/protobuf/util/internal/json_stream_parser_test.cc
  70. 12
      src/google/protobuf/util/internal/object_writer.h
  71. 29
      src/google/protobuf/util/internal/proto_writer.cc
  72. 13
      src/google/protobuf/util/internal/proto_writer.h
  73. 187
      src/google/protobuf/util/internal/protostream_objectsource.cc
  74. 18
      src/google/protobuf/util/internal/protostream_objectsource.h
  75. 42
      src/google/protobuf/util/internal/protostream_objectsource_test.cc
  76. 23
      src/google/protobuf/util/internal/protostream_objectwriter.cc
  77. 11
      src/google/protobuf/util/internal/utility.cc
  78. 13
      src/google/protobuf/util/internal/utility.h
  79. 29
      src/google/protobuf/util/json_util.h
  80. 9
      src/google/protobuf/util/message_differencer.cc
  81. 4
      src/google/protobuf/util/message_differencer.h
  82. 36
      src/google/protobuf/util/message_differencer_unittest.cc
  83. 3
      src/google/protobuf/util/type_resolver.h
  84. 1
      src/google/protobuf/util/type_resolver_util.cc
  85. 51
      src/google/protobuf/wrappers.pb.cc
  86. 155
      src/google/protobuf/wrappers.pb.h

@ -55,6 +55,7 @@ using google::protobuf::util::JsonToBinaryString;
using google::protobuf::util::NewTypeResolverForDescriptorPool; using google::protobuf::util::NewTypeResolverForDescriptorPool;
using google::protobuf::util::TypeResolver; using google::protobuf::util::TypeResolver;
using protobuf_test_messages::proto3::TestAllTypesProto3; using protobuf_test_messages::proto3::TestAllTypesProto3;
using protobuf_test_messages::proto2::TestAllTypesProto2;
using std::string; using std::string;
static const char kTypeUrlPrefix[] = "type.googleapis.com"; static const char kTypeUrlPrefix[] = "type.googleapis.com";
@ -102,6 +103,8 @@ void CheckedWrite(int fd, const void *buf, size_t len) {
void DoTest(const ConformanceRequest& request, ConformanceResponse* response) { void DoTest(const ConformanceRequest& request, ConformanceResponse* response) {
Message *test_message; Message *test_message;
google::protobuf::LinkMessageReflection<TestAllTypesProto2>();
google::protobuf::LinkMessageReflection<TestAllTypesProto3>();
const Descriptor *descriptor = DescriptorPool::generated_pool()->FindMessageTypeByName( const Descriptor *descriptor = DescriptorPool::generated_pool()->FindMessageTypeByName(
request.message_type()); request.message_type());
if (!descriptor) { if (!descriptor) {

@ -25,49 +25,54 @@ namespace ProtobufUnittest {
byte[] descriptorData = global::System.Convert.FromBase64String( byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat( string.Concat(
"Ci5nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfcHJvdG8zX29wdGlvbmFsLnBy", "Ci5nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfcHJvdG8zX29wdGlvbmFsLnBy",
"b3RvEhFwcm90b2J1Zl91bml0dGVzdCKxCgoSVGVzdFByb3RvM09wdGlvbmFs", "b3RvEhFwcm90b2J1Zl91bml0dGVzdBogZ29vZ2xlL3Byb3RvYnVmL2Rlc2Ny",
"EhsKDm9wdGlvbmFsX2ludDMyGAEgASgFSACIAQESGwoOb3B0aW9uYWxfaW50", "aXB0b3IucHJvdG8isQoKElRlc3RQcm90bzNPcHRpb25hbBIbCg5vcHRpb25h",
"NjQYAiABKANIAYgBARIcCg9vcHRpb25hbF91aW50MzIYAyABKA1IAogBARIc", "bF9pbnQzMhgBIAEoBUgAiAEBEhsKDm9wdGlvbmFsX2ludDY0GAIgASgDSAGI",
"Cg9vcHRpb25hbF91aW50NjQYBCABKARIA4gBARIcCg9vcHRpb25hbF9zaW50", "AQESHAoPb3B0aW9uYWxfdWludDMyGAMgASgNSAKIAQESHAoPb3B0aW9uYWxf",
"MzIYBSABKBFIBIgBARIcCg9vcHRpb25hbF9zaW50NjQYBiABKBJIBYgBARId", "dWludDY0GAQgASgESAOIAQESHAoPb3B0aW9uYWxfc2ludDMyGAUgASgRSASI",
"ChBvcHRpb25hbF9maXhlZDMyGAcgASgHSAaIAQESHQoQb3B0aW9uYWxfZml4", "AQESHAoPb3B0aW9uYWxfc2ludDY0GAYgASgSSAWIAQESHQoQb3B0aW9uYWxf",
"ZWQ2NBgIIAEoBkgHiAEBEh4KEW9wdGlvbmFsX3NmaXhlZDMyGAkgASgPSAiI", "Zml4ZWQzMhgHIAEoB0gGiAEBEh0KEG9wdGlvbmFsX2ZpeGVkNjQYCCABKAZI",
"AQESHgoRb3B0aW9uYWxfc2ZpeGVkNjQYCiABKBBICYgBARIbCg5vcHRpb25h", "B4gBARIeChFvcHRpb25hbF9zZml4ZWQzMhgJIAEoD0gIiAEBEh4KEW9wdGlv",
"bF9mbG9hdBgLIAEoAkgKiAEBEhwKD29wdGlvbmFsX2RvdWJsZRgMIAEoAUgL", "bmFsX3NmaXhlZDY0GAogASgQSAmIAQESGwoOb3B0aW9uYWxfZmxvYXQYCyAB",
"iAEBEhoKDW9wdGlvbmFsX2Jvb2wYDSABKAhIDIgBARIcCg9vcHRpb25hbF9z", "KAJICogBARIcCg9vcHRpb25hbF9kb3VibGUYDCABKAFIC4gBARIaCg1vcHRp",
"dHJpbmcYDiABKAlIDYgBARIbCg5vcHRpb25hbF9ieXRlcxgPIAEoDEgOiAEB", "b25hbF9ib29sGA0gASgISAyIAQESHAoPb3B0aW9uYWxfc3RyaW5nGA4gASgJ",
"Eh4KDW9wdGlvbmFsX2NvcmQYECABKAlCAggBSA+IAQESWQoXb3B0aW9uYWxf", "SA2IAQESGwoOb3B0aW9uYWxfYnl0ZXMYDyABKAxIDogBARIeCg1vcHRpb25h",
"bmVzdGVkX21lc3NhZ2UYEiABKAsyMy5wcm90b2J1Zl91bml0dGVzdC5UZXN0", "bF9jb3JkGBAgASgJQgIIAUgPiAEBElkKF29wdGlvbmFsX25lc3RlZF9tZXNz",
"UHJvdG8zT3B0aW9uYWwuTmVzdGVkTWVzc2FnZUgQiAEBElkKE2xhenlfbmVz", "YWdlGBIgASgLMjMucHJvdG9idWZfdW5pdHRlc3QuVGVzdFByb3RvM09wdGlv",
"dGVkX21lc3NhZ2UYEyABKAsyMy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UHJv", "bmFsLk5lc3RlZE1lc3NhZ2VIEIgBARJZChNsYXp5X25lc3RlZF9tZXNzYWdl",
"dG8zT3B0aW9uYWwuTmVzdGVkTWVzc2FnZUICKAFIEYgBARJTChRvcHRpb25h", "GBMgASgLMjMucHJvdG9idWZfdW5pdHRlc3QuVGVzdFByb3RvM09wdGlvbmFs",
"bF9uZXN0ZWRfZW51bRgVIAEoDjIwLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQ", "Lk5lc3RlZE1lc3NhZ2VCAigBSBGIAQESUwoUb3B0aW9uYWxfbmVzdGVkX2Vu",
"cm90bzNPcHRpb25hbC5OZXN0ZWRFbnVtSBKIAQESFgoOc2luZ3VsYXJfaW50", "dW0YFSABKA4yMC5wcm90b2J1Zl91bml0dGVzdC5UZXN0UHJvdG8zT3B0aW9u",
"MzIYFiABKAUSFgoOc2luZ3VsYXJfaW50NjQYFyABKAMaJwoNTmVzdGVkTWVz", "YWwuTmVzdGVkRW51bUgSiAEBEhYKDnNpbmd1bGFyX2ludDMyGBYgASgFEhYK",
"c2FnZRIPCgJiYhgBIAEoBUgAiAEBQgUKA19iYiJKCgpOZXN0ZWRFbnVtEg8K", "DnNpbmd1bGFyX2ludDY0GBcgASgDGicKDU5lc3RlZE1lc3NhZ2USDwoCYmIY",
"C1VOU1BFQ0lGSUVEEAASBwoDRk9PEAESBwoDQkFSEAISBwoDQkFaEAMSEAoD", "ASABKAVIAIgBAUIFCgNfYmIiSgoKTmVzdGVkRW51bRIPCgtVTlNQRUNJRklF",
"TkVHEP///////////wFCEQoPX29wdGlvbmFsX2ludDMyQhEKD19vcHRpb25h", "RBAAEgcKA0ZPTxABEgcKA0JBUhACEgcKA0JBWhADEhAKA05FRxD/////////",
"bF9pbnQ2NEISChBfb3B0aW9uYWxfdWludDMyQhIKEF9vcHRpb25hbF91aW50", "//8BQhEKD19vcHRpb25hbF9pbnQzMkIRCg9fb3B0aW9uYWxfaW50NjRCEgoQ",
"NjRCEgoQX29wdGlvbmFsX3NpbnQzMkISChBfb3B0aW9uYWxfc2ludDY0QhMK", "X29wdGlvbmFsX3VpbnQzMkISChBfb3B0aW9uYWxfdWludDY0QhIKEF9vcHRp",
"EV9vcHRpb25hbF9maXhlZDMyQhMKEV9vcHRpb25hbF9maXhlZDY0QhQKEl9v", "b25hbF9zaW50MzJCEgoQX29wdGlvbmFsX3NpbnQ2NEITChFfb3B0aW9uYWxf",
"cHRpb25hbF9zZml4ZWQzMkIUChJfb3B0aW9uYWxfc2ZpeGVkNjRCEQoPX29w", "Zml4ZWQzMkITChFfb3B0aW9uYWxfZml4ZWQ2NEIUChJfb3B0aW9uYWxfc2Zp",
"dGlvbmFsX2Zsb2F0QhIKEF9vcHRpb25hbF9kb3VibGVCEAoOX29wdGlvbmFs", "eGVkMzJCFAoSX29wdGlvbmFsX3NmaXhlZDY0QhEKD19vcHRpb25hbF9mbG9h",
"X2Jvb2xCEgoQX29wdGlvbmFsX3N0cmluZ0IRCg9fb3B0aW9uYWxfYnl0ZXNC", "dEISChBfb3B0aW9uYWxfZG91YmxlQhAKDl9vcHRpb25hbF9ib29sQhIKEF9v",
"EAoOX29wdGlvbmFsX2NvcmRCGgoYX29wdGlvbmFsX25lc3RlZF9tZXNzYWdl", "cHRpb25hbF9zdHJpbmdCEQoPX29wdGlvbmFsX2J5dGVzQhAKDl9vcHRpb25h",
"QhYKFF9sYXp5X25lc3RlZF9tZXNzYWdlQhcKFV9vcHRpb25hbF9uZXN0ZWRf", "bF9jb3JkQhoKGF9vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZUIWChRfbGF6eV9u",
"ZW51bSKJAgoZVGVzdFByb3RvM09wdGlvbmFsTWVzc2FnZRJSCg5uZXN0ZWRf", "ZXN0ZWRfbWVzc2FnZUIXChVfb3B0aW9uYWxfbmVzdGVkX2VudW0iiQIKGVRl",
"bWVzc2FnZRgBIAEoCzI6LnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQcm90bzNP", "c3RQcm90bzNPcHRpb25hbE1lc3NhZ2USUgoObmVzdGVkX21lc3NhZ2UYASAB",
"cHRpb25hbE1lc3NhZ2UuTmVzdGVkTWVzc2FnZRJgChdvcHRpb25hbF9uZXN0", "KAsyOi5wcm90b2J1Zl91bml0dGVzdC5UZXN0UHJvdG8zT3B0aW9uYWxNZXNz",
"ZWRfbWVzc2FnZRgCIAEoCzI6LnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQcm90", "YWdlLk5lc3RlZE1lc3NhZ2USYAoXb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UY",
"bzNPcHRpb25hbE1lc3NhZ2UuTmVzdGVkTWVzc2FnZUgAiAEBGhoKDU5lc3Rl", "AiABKAsyOi5wcm90b2J1Zl91bml0dGVzdC5UZXN0UHJvdG8zT3B0aW9uYWxN",
"ZE1lc3NhZ2USCQoBcxgBIAEoCUIaChhfb3B0aW9uYWxfbmVzdGVkX21lc3Nh", "ZXNzYWdlLk5lc3RlZE1lc3NhZ2VIAIgBARoaCg1OZXN0ZWRNZXNzYWdlEgkK",
"Z2VCJQohY29tLmdvb2dsZS5wcm90b2J1Zi50ZXN0aW5nLnByb3RvUAFiBnBy", "AXMYASABKAlCGgoYX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlIqkBChhQcm90",
"b3RvMw==")); "bzNPcHRpb25hbEV4dGVuc2lvbnMyPAoPZXh0X25vX29wdGlvbmFsEh8uZ29v",
"Z2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGIjN2akBIAEoBTJBChFleHRf",
"d2l0aF9vcHRpb25hbBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9u",
"cxiJzdmpASABKAWIAQE6DMDozM0KCMjozM0KEEIlCiFjb20uZ29vZ2xlLnBy",
"b3RvYnVmLnRlc3RpbmcucHJvdG9QAWIGcHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { }, new pbr::FileDescriptor[] { global::Google.Protobuf.Reflection.DescriptorReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufUnittest.TestProto3Optional), global::ProtobufUnittest.TestProto3Optional.Parser, new[]{ "OptionalInt32", "OptionalInt64", "OptionalUint32", "OptionalUint64", "OptionalSint32", "OptionalSint64", "OptionalFixed32", "OptionalFixed64", "OptionalSfixed32", "OptionalSfixed64", "OptionalFloat", "OptionalDouble", "OptionalBool", "OptionalString", "OptionalBytes", "OptionalCord", "OptionalNestedMessage", "LazyNestedMessage", "OptionalNestedEnum", "SingularInt32", "SingularInt64" }, new[]{ "OptionalInt32", "OptionalInt64", "OptionalUint32", "OptionalUint64", "OptionalSint32", "OptionalSint64", "OptionalFixed32", "OptionalFixed64", "OptionalSfixed32", "OptionalSfixed64", "OptionalFloat", "OptionalDouble", "OptionalBool", "OptionalString", "OptionalBytes", "OptionalCord", "OptionalNestedMessage", "LazyNestedMessage", "OptionalNestedEnum" }, new[]{ typeof(global::ProtobufUnittest.TestProto3Optional.Types.NestedEnum) }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufUnittest.TestProto3Optional.Types.NestedMessage), global::ProtobufUnittest.TestProto3Optional.Types.NestedMessage.Parser, new[]{ "Bb" }, new[]{ "Bb" }, null, null, null)}), new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufUnittest.TestProto3Optional), global::ProtobufUnittest.TestProto3Optional.Parser, new[]{ "OptionalInt32", "OptionalInt64", "OptionalUint32", "OptionalUint64", "OptionalSint32", "OptionalSint64", "OptionalFixed32", "OptionalFixed64", "OptionalSfixed32", "OptionalSfixed64", "OptionalFloat", "OptionalDouble", "OptionalBool", "OptionalString", "OptionalBytes", "OptionalCord", "OptionalNestedMessage", "LazyNestedMessage", "OptionalNestedEnum", "SingularInt32", "SingularInt64" }, new[]{ "OptionalInt32", "OptionalInt64", "OptionalUint32", "OptionalUint64", "OptionalSint32", "OptionalSint64", "OptionalFixed32", "OptionalFixed64", "OptionalSfixed32", "OptionalSfixed64", "OptionalFloat", "OptionalDouble", "OptionalBool", "OptionalString", "OptionalBytes", "OptionalCord", "OptionalNestedMessage", "LazyNestedMessage", "OptionalNestedEnum" }, new[]{ typeof(global::ProtobufUnittest.TestProto3Optional.Types.NestedEnum) }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufUnittest.TestProto3Optional.Types.NestedMessage), global::ProtobufUnittest.TestProto3Optional.Types.NestedMessage.Parser, new[]{ "Bb" }, new[]{ "Bb" }, null, null, null)}),
new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufUnittest.TestProto3OptionalMessage), global::ProtobufUnittest.TestProto3OptionalMessage.Parser, new[]{ "NestedMessage", "OptionalNestedMessage" }, new[]{ "OptionalNestedMessage" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufUnittest.TestProto3OptionalMessage.Types.NestedMessage), global::ProtobufUnittest.TestProto3OptionalMessage.Types.NestedMessage.Parser, new[]{ "S" }, null, null, null, null)}) new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufUnittest.TestProto3OptionalMessage), global::ProtobufUnittest.TestProto3OptionalMessage.Parser, new[]{ "NestedMessage", "OptionalNestedMessage" }, new[]{ "OptionalNestedMessage" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufUnittest.TestProto3OptionalMessage.Types.NestedMessage), global::ProtobufUnittest.TestProto3OptionalMessage.Types.NestedMessage.Parser, new[]{ "S" }, null, null, null, null)}),
new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufUnittest.Proto3OptionalExtensions), global::ProtobufUnittest.Proto3OptionalExtensions.Parser, null, null, null, new pb::Extension[] { global::ProtobufUnittest.Proto3OptionalExtensions.Extensions.ExtNoOptional, global::ProtobufUnittest.Proto3OptionalExtensions.Extensions.ExtWithOptional }, null)
})); }));
} }
#endregion #endregion
@ -1789,6 +1794,153 @@ namespace ProtobufUnittest {
} }
public sealed partial class Proto3OptionalExtensions : pb::IMessage<Proto3OptionalExtensions>
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
, pb::IBufferMessage
#endif
{
private static readonly pb::MessageParser<Proto3OptionalExtensions> _parser = new pb::MessageParser<Proto3OptionalExtensions>(() => new Proto3OptionalExtensions());
private pb::UnknownFieldSet _unknownFields;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pb::MessageParser<Proto3OptionalExtensions> Parser { get { return _parser; } }
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
get { return global::ProtobufUnittest.UnittestProto3OptionalReflection.Descriptor.MessageTypes[2]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
pbr::MessageDescriptor pb::IMessage.Descriptor {
get { return Descriptor; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public Proto3OptionalExtensions() {
OnConstruction();
}
partial void OnConstruction();
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public Proto3OptionalExtensions(Proto3OptionalExtensions other) : this() {
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public Proto3OptionalExtensions Clone() {
return new Proto3OptionalExtensions(this);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) {
return Equals(other as Proto3OptionalExtensions);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public bool Equals(Proto3OptionalExtensions other) {
if (ReferenceEquals(other, null)) {
return false;
}
if (ReferenceEquals(other, this)) {
return true;
}
return Equals(_unknownFields, other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override int GetHashCode() {
int hash = 1;
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
return hash;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override string ToString() {
return pb::JsonFormatter.ToDiagnosticString(this);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public void WriteTo(pb::CodedOutputStream output) {
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
output.WriteRawMessage(this);
#else
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
#endif
}
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
}
#endif
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int CalculateSize() {
int size = 0;
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
return size;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public void MergeFrom(Proto3OptionalExtensions other) {
if (other == null) {
return;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public void MergeFrom(pb::CodedInputStream input) {
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
input.ReadRawMessage(this);
#else
uint tag;
while ((tag = input.ReadTag()) != 0) {
switch(tag) {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
break;
}
}
#endif
}
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
uint tag;
while ((tag = input.ReadTag()) != 0) {
switch(tag) {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
break;
}
}
}
#endif
#region Extensions
/// <summary>Container for extensions for other messages declared in the Proto3OptionalExtensions message type.</summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static partial class Extensions {
public static readonly pb::Extension<global::Google.Protobuf.Reflection.MessageOptions, int> ExtNoOptional =
new pb::Extension<global::Google.Protobuf.Reflection.MessageOptions, int>(355886728, pb::FieldCodec.ForInt32(2847093824, 0));
public static readonly pb::Extension<global::Google.Protobuf.Reflection.MessageOptions, int> ExtWithOptional =
new pb::Extension<global::Google.Protobuf.Reflection.MessageOptions, int>(355886729, pb::FieldCodec.ForInt32(2847093832, 0));
}
#endregion
}
#endregion #endregion
} }

@ -2055,6 +2055,44 @@ public abstract class CodedInputStream {
totalBytesRetired = 0; totalBytesRetired = 0;
} }
/*
* The following wrapper methods exist so that InvalidProtocolBufferExceptions thrown by the
* InputStream can be differentiated from ones thrown by CodedInputStream itself. Each call to
* an InputStream method that can throw IOException must be wrapped like this. We do this
* because we sometimes need to modify IPBE instances after they are thrown far away from where
* they are thrown (ex. to add unfinished messages) and we use this signal elsewhere in the
* exception catch chain to know when to perform these operations directly or to wrap the
* exception in their own IPBE so the extra information can be communicated without trampling
* downstream information.
*/
private static int read(InputStream input, byte[] data, int offset, int length)
throws IOException {
try {
return input.read(data, offset, length);
} catch (InvalidProtocolBufferException e) {
e.setThrownFromInputStream();
throw e;
}
}
private static long skip(InputStream input, long length) throws IOException {
try {
return input.skip(length);
} catch (InvalidProtocolBufferException e) {
e.setThrownFromInputStream();
throw e;
}
}
private static int available(InputStream input) throws IOException {
try {
return input.available();
} catch (InvalidProtocolBufferException e) {
e.setThrownFromInputStream();
throw e;
}
}
@Override @Override
public int readTag() throws IOException { public int readTag() throws IOException {
if (isAtEnd()) { if (isAtEnd()) {
@ -2783,7 +2821,8 @@ public abstract class CodedInputStream {
// Here we should refill the buffer as many bytes as possible. // Here we should refill the buffer as many bytes as possible.
int bytesRead = int bytesRead =
input.read( read(
input,
buffer, buffer,
bufferSize, bufferSize,
Math.min( Math.min(
@ -2905,7 +2944,7 @@ public abstract class CodedInputStream {
// Determine the number of bytes we need to read from the input stream. // Determine the number of bytes we need to read from the input stream.
int sizeLeft = size - bufferedBytes; int sizeLeft = size - bufferedBytes;
// TODO(nathanmittler): Consider using a value larger than DEFAULT_BUFFER_SIZE. // TODO(nathanmittler): Consider using a value larger than DEFAULT_BUFFER_SIZE.
if (sizeLeft < DEFAULT_BUFFER_SIZE || sizeLeft <= input.available()) { if (sizeLeft < DEFAULT_BUFFER_SIZE || sizeLeft <= available(input)) {
// Either the bytes we need are known to be available, or the required buffer is // Either the bytes we need are known to be available, or the required buffer is
// within an allowed threshold - go ahead and allocate the buffer now. // within an allowed threshold - go ahead and allocate the buffer now.
final byte[] bytes = new byte[size]; final byte[] bytes = new byte[size];
@ -2919,7 +2958,7 @@ public abstract class CodedInputStream {
// Fill the remaining bytes from the input stream. // Fill the remaining bytes from the input stream.
int tempPos = bufferedBytes; int tempPos = bufferedBytes;
while (tempPos < bytes.length) { while (tempPos < bytes.length) {
int n = input.read(bytes, tempPos, size - tempPos); int n = read(input, bytes, tempPos, size - tempPos);
if (n == -1) { if (n == -1) {
throw InvalidProtocolBufferException.truncatedMessage(); throw InvalidProtocolBufferException.truncatedMessage();
} }
@ -3047,7 +3086,7 @@ public abstract class CodedInputStream {
try { try {
while (totalSkipped < size) { while (totalSkipped < size) {
int toSkip = size - totalSkipped; int toSkip = size - totalSkipped;
long skipped = input.skip(toSkip); long skipped = skip(input, toSkip);
if (skipped < 0 || skipped > toSkip) { if (skipped < 0 || skipped > toSkip) {
throw new IllegalStateException( throw new IllegalStateException(
input.getClass() input.getClass()

@ -282,7 +282,7 @@ final class FieldSet<T extends FieldSet.FieldDescriptorLite<T>> {
// Wrap the contents in a new list so that the caller cannot change // Wrap the contents in a new list so that the caller cannot change
// the list's contents after setting it. // the list's contents after setting it.
final List newList = new ArrayList(); final List newList = new ArrayList<>();
newList.addAll((List) value); newList.addAll((List) value);
for (final Object element : newList) { for (final Object element : newList) {
verifyType(descriptor, element); verifyType(descriptor, element);

@ -1537,11 +1537,16 @@ public abstract class GeneratedMessageLite<
Schema<T> schema = Protobuf.getInstance().schemaFor(result); Schema<T> schema = Protobuf.getInstance().schemaFor(result);
schema.mergeFrom(result, CodedInputStreamReader.forCodedInput(input), extensionRegistry); schema.mergeFrom(result, CodedInputStreamReader.forCodedInput(input), extensionRegistry);
schema.makeImmutable(result); schema.makeImmutable(result);
} catch (InvalidProtocolBufferException e) {
if (e.getThrownFromInputStream()) {
e = new InvalidProtocolBufferException(e);
}
throw e.setUnfinishedMessage(result);
} catch (IOException e) { } catch (IOException e) {
if (e.getCause() instanceof InvalidProtocolBufferException) { if (e.getCause() instanceof InvalidProtocolBufferException) {
throw (InvalidProtocolBufferException) e.getCause(); throw (InvalidProtocolBufferException) e.getCause();
} }
throw new InvalidProtocolBufferException(e.getMessage()).setUnfinishedMessage(result); throw new InvalidProtocolBufferException(e).setUnfinishedMessage(result);
} catch (RuntimeException e) { } catch (RuntimeException e) {
if (e.getCause() instanceof InvalidProtocolBufferException) { if (e.getCause() instanceof InvalidProtocolBufferException) {
throw (InvalidProtocolBufferException) e.getCause(); throw (InvalidProtocolBufferException) e.getCause();
@ -1565,11 +1570,16 @@ public abstract class GeneratedMessageLite<
if (result.memoizedHashCode != 0) { if (result.memoizedHashCode != 0) {
throw new RuntimeException(); throw new RuntimeException();
} }
} catch (InvalidProtocolBufferException e) {
if (e.getThrownFromInputStream()) {
e = new InvalidProtocolBufferException(e);
}
throw e.setUnfinishedMessage(result);
} catch (IOException e) { } catch (IOException e) {
if (e.getCause() instanceof InvalidProtocolBufferException) { if (e.getCause() instanceof InvalidProtocolBufferException) {
throw (InvalidProtocolBufferException) e.getCause(); throw (InvalidProtocolBufferException) e.getCause();
} }
throw new InvalidProtocolBufferException(e.getMessage()).setUnfinishedMessage(result); throw new InvalidProtocolBufferException(e).setUnfinishedMessage(result);
} catch (IndexOutOfBoundsException e) { } catch (IndexOutOfBoundsException e) {
throw InvalidProtocolBufferException.truncatedMessage().setUnfinishedMessage(result); throw InvalidProtocolBufferException.truncatedMessage().setUnfinishedMessage(result);
} }
@ -1727,8 +1737,13 @@ public abstract class GeneratedMessageLite<
return null; return null;
} }
size = CodedInputStream.readRawVarint32(firstByte, input); size = CodedInputStream.readRawVarint32(firstByte, input);
} catch (InvalidProtocolBufferException e) {
if (e.getThrownFromInputStream()) {
e = new InvalidProtocolBufferException(e);
}
throw e;
} catch (IOException e) { } catch (IOException e) {
throw new InvalidProtocolBufferException(e.getMessage()); throw new InvalidProtocolBufferException(e);
} }
InputStream limitedInput = new LimitedInputStream(input, size); InputStream limitedInput = new LimitedInputStream(input, size);
CodedInputStream codedInput = CodedInputStream.newInstance(limitedInput); CodedInputStream codedInput = CodedInputStream.newInstance(limitedInput);

@ -41,6 +41,7 @@ import java.io.IOException;
public class InvalidProtocolBufferException extends IOException { public class InvalidProtocolBufferException extends IOException {
private static final long serialVersionUID = -1616151763072450476L; private static final long serialVersionUID = -1616151763072450476L;
private MessageLite unfinishedMessage = null; private MessageLite unfinishedMessage = null;
private boolean wasThrownFromInputStream;
public InvalidProtocolBufferException(final String description) { public InvalidProtocolBufferException(final String description) {
super(description); super(description);
@ -72,6 +73,28 @@ public class InvalidProtocolBufferException extends IOException {
return unfinishedMessage; return unfinishedMessage;
} }
/** Set by CodedInputStream */
void setThrownFromInputStream() {
/* This write can be racy if the same exception is stored and then thrown by multiple custom
* InputStreams on different threads. But since it only ever moves from false->true, there's no
* problem. A thread checking this condition after catching this exception from a delegate
* stram of CodedInputStream is guaranteed to always observe true, because a write on the same
* thread set the value when the exception left the delegate. A thread checking the same
* condition with an exception created by CodedInputStream is guaranteed to always see false,
* because the exception has not been exposed to any code that could publish it to other threads
* and cause a write.
*/
wasThrownFromInputStream = true;
}
/**
* Allows code catching IOException from CodedInputStream to tell whether this instance was thrown
* by a delegate InputStream, rather than directly by a parse failure.
*/
boolean getThrownFromInputStream() {
return wasThrownFromInputStream;
}
/** /**
* Unwraps the underlying {@link IOException} if this exception was caused by an I/O problem. * Unwraps the underlying {@link IOException} if this exception was caused by an I/O problem.
* Otherwise, returns {@code this}. * Otherwise, returns {@code this}.

@ -346,7 +346,7 @@ final class UnsafeUtil {
return MEMORY_ACCESSOR.supportsUnsafeByteBufferOperations(); return MEMORY_ACCESSOR.supportsUnsafeByteBufferOperations();
} }
private static boolean determineAndroidSupportByAddressSize(Class<?> addressClass) { static boolean determineAndroidSupportByAddressSize(Class<?> addressClass) {
if (!Android.isOnAndroidDevice()) { if (!Android.isOnAndroidDevice()) {
return false; return false;
} }

@ -38,6 +38,7 @@ import com.google.protobuf.UnittestImportLite.ImportEnumLite;
import com.google.protobuf.UnittestImportPublicLite.PublicImportMessageLite; import com.google.protobuf.UnittestImportPublicLite.PublicImportMessageLite;
import com.google.protobuf.UnittestLite.ForeignEnumLite; import com.google.protobuf.UnittestLite.ForeignEnumLite;
import com.google.protobuf.UnittestLite.ForeignMessageLite; import com.google.protobuf.UnittestLite.ForeignMessageLite;
import com.google.protobuf.UnittestLite.RecursiveMessage;
import com.google.protobuf.UnittestLite.TestAllExtensionsLite; import com.google.protobuf.UnittestLite.TestAllExtensionsLite;
import com.google.protobuf.UnittestLite.TestAllTypesLite; import com.google.protobuf.UnittestLite.TestAllTypesLite;
import com.google.protobuf.UnittestLite.TestAllTypesLite.NestedEnum; import com.google.protobuf.UnittestLite.TestAllTypesLite.NestedEnum;
@ -61,6 +62,7 @@ import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.TestRecursiveOne
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@ -1638,6 +1640,160 @@ public class LiteTest extends TestCase {
} }
} }
public void testParseFromStream_IOExceptionNotLost() throws Exception {
final IOException readException = new IOException();
try {
TestAllTypesLite.parseFrom(
CodedInputStream.newInstance(
new InputStream() {
@Override
public int read() throws IOException {
throw readException;
}
}));
fail();
} catch (InvalidProtocolBufferException expected) {
boolean found = false;
for (Throwable exception = expected; exception != null; exception = exception.getCause()) {
if (exception == readException) {
found = true;
break;
}
}
if (!found) {
throw new AssertionError("Lost cause of parsing error", expected);
}
}
}
public void testParseDelimitedFromStream_IOExceptionNotLost() throws Exception {
final IOException readException = new IOException();
try {
TestAllTypesLite.parseDelimitedFrom(
new InputStream() {
@Override
public int read() throws IOException {
throw readException;
}
});
fail();
} catch (InvalidProtocolBufferException expected) {
boolean found = false;
for (Throwable exception = expected; exception != null; exception = exception.getCause()) {
if (exception == readException) {
found = true;
break;
}
}
if (!found) {
throw new AssertionError("Lost cause of parsing error", expected);
}
}
}
public void testParseFromArray_manyNestedMessagesError() throws Exception {
RecursiveMessage.Builder recursiveMessage =
RecursiveMessage.newBuilder().setPayload(ByteString.copyFrom(new byte[1]));
for (int i = 0; i < 20; i++) {
recursiveMessage = RecursiveMessage.newBuilder().setRecurse(recursiveMessage.build());
}
byte[] result = recursiveMessage.build().toByteArray();
result[
result.length
- CodedOutputStream.computeTagSize(RecursiveMessage.PAYLOAD_FIELD_NUMBER)
- CodedOutputStream.computeLengthDelimitedFieldSize(1)] =
0; // Set invalid tag
try {
RecursiveMessage.parseFrom(result);
fail("Result was: " + Arrays.toString(result));
} catch (InvalidProtocolBufferException expected) {
boolean found = false;
int exceptionCount = 0;
for (Throwable exception = expected; exception != null; exception = exception.getCause()) {
if (exception instanceof InvalidProtocolBufferException) {
exceptionCount++;
}
for (StackTraceElement element : exception.getStackTrace()) {
if (InvalidProtocolBufferException.class.getName().equals(element.getClassName())
&& "invalidTag".equals(element.getMethodName())) {
found = true;
} else if (Android.isOnAndroidDevice()
&& "decodeUnknownField".equals(element.getMethodName())) {
// Android is missing the first element of the stack trace - b/181147885
found = true;
}
}
}
if (!found) {
throw new AssertionError("Lost cause of parsing error", expected);
}
if (exceptionCount > 1) {
throw new AssertionError(exceptionCount + " nested parsing exceptions", expected);
}
}
}
public void testParseFromStream_manyNestedMessagesError() throws Exception {
RecursiveMessage.Builder recursiveMessage =
RecursiveMessage.newBuilder().setPayload(ByteString.copyFrom(new byte[1]));
for (int i = 0; i < 20; i++) {
recursiveMessage = RecursiveMessage.newBuilder().setRecurse(recursiveMessage.build());
}
byte[] result = recursiveMessage.build().toByteArray();
result[
result.length
- CodedOutputStream.computeTagSize(RecursiveMessage.PAYLOAD_FIELD_NUMBER)
- CodedOutputStream.computeLengthDelimitedFieldSize(1)] =
0; // Set invalid tag
try {
RecursiveMessage.parseFrom(CodedInputStream.newInstance(new ByteArrayInputStream(result)));
fail("Result was: " + Arrays.toString(result));
} catch (InvalidProtocolBufferException expected) {
boolean found = false;
int exceptionCount = 0;
for (Throwable exception = expected; exception != null; exception = exception.getCause()) {
if (exception instanceof InvalidProtocolBufferException) {
exceptionCount++;
}
for (StackTraceElement element : exception.getStackTrace()) {
if (InvalidProtocolBufferException.class.getName().equals(element.getClassName())
&& "invalidTag".equals(element.getMethodName())) {
found = true;
} else if (Android.isOnAndroidDevice() && "readTag".equals(element.getMethodName())) {
// Android is missing the first element of the stack trace - b/181147885
found = true;
}
}
}
if (!found) {
throw new AssertionError("Lost cause of parsing error", expected);
}
if (exceptionCount > 1) {
throw new AssertionError(exceptionCount + " nested parsing exceptions", expected);
}
}
}
public void testParseFromStream_sneakyNestedException() throws Exception {
final InvalidProtocolBufferException sketchy =
new InvalidProtocolBufferException("Created in a sketchy way!")
.setUnfinishedMessage(TestAllTypesLite.getDefaultInstance());
try {
RecursiveMessage.parseFrom(
CodedInputStream.newInstance(
new InputStream() {
@Override
public int read() throws IOException {
throw sketchy;
}
}));
fail();
} catch (InvalidProtocolBufferException expected) {
assertNotSame(expected, sketchy);
}
assertEquals(sketchy.getUnfinishedMessage(), TestAllTypesLite.getDefaultInstance());
}
public void testMergeFrom_sanity() throws Exception { public void testMergeFrom_sanity() throws Exception {
TestAllTypesLite one = TestUtilLite.getAllLiteSetBuilder().build(); TestAllTypesLite one = TestUtilLite.getAllLiteSetBuilder().build();
byte[] bytes = one.toByteArray(); byte[] bytes = one.toByteArray();

@ -279,8 +279,6 @@ if __name__ == '__main__':
"Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
], ],
namespace_packages=['google'], namespace_packages=['google'],
packages=find_packages( packages=find_packages(

@ -68,10 +68,8 @@ const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google
schemas, file_default_instances, TableStruct_google_2fprotobuf_2fany_2eproto::offsets, schemas, file_default_instances, TableStruct_google_2fprotobuf_2fany_2eproto::offsets,
file_level_metadata_google_2fprotobuf_2fany_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fany_2eproto, file_level_service_descriptors_google_2fprotobuf_2fany_2eproto, file_level_metadata_google_2fprotobuf_2fany_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fany_2eproto, file_level_service_descriptors_google_2fprotobuf_2fany_2eproto,
}; };
PROTOBUF_ATTRIBUTE_WEAK ::PROTOBUF_NAMESPACE_ID::Metadata PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_google_2fprotobuf_2fany_2eproto_getter() {
descriptor_table_google_2fprotobuf_2fany_2eproto_metadata_getter(int index) { return &descriptor_table_google_2fprotobuf_2fany_2eproto;
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fany_2eproto);
return descriptor_table_google_2fprotobuf_2fany_2eproto.file_level_metadata[index];
} }
// Force running AddDescriptors() at dynamic initialization time. // Force running AddDescriptors() at dynamic initialization time.
@ -323,10 +321,11 @@ void Any::InternalSwap(Any* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Any::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Any::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fany_2eproto_getter, &descriptor_table_google_2fprotobuf_2fany_2eproto_once,
file_level_metadata_google_2fprotobuf_2fany_2eproto[0]);
} }
// @@protoc_insertion_point(namespace_scope) // @@protoc_insertion_point(namespace_scope)
PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_CLOSE
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN

@ -53,7 +53,6 @@ struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fany_2eproto {
static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
}; };
extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fany_2eproto; extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fany_2eproto;
PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Metadata descriptor_table_google_2fprotobuf_2fany_2eproto_metadata_getter(int index);
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN
class Any; class Any;
struct AnyDefaultTypeInternal; struct AnyDefaultTypeInternal;
@ -96,10 +95,10 @@ class PROTOBUF_EXPORT Any PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Any& default_instance() { static const Any& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -200,12 +199,6 @@ class PROTOBUF_EXPORT Any PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fany_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -218,10 +211,8 @@ class PROTOBUF_EXPORT Any PROTOBUF_FINAL :
// string type_url = 1; // string type_url = 1;
void clear_type_url(); void clear_type_url();
const std::string& type_url() const; const std::string& type_url() const;
void set_type_url(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_type_url(std::string&& value); void set_type_url(ArgT0&& arg0, ArgT... args);
void set_type_url(const char* value);
void set_type_url(const char* value, size_t size);
std::string* mutable_type_url(); std::string* mutable_type_url();
std::string* release_type_url(); std::string* release_type_url();
void set_allocated_type_url(std::string* type_url); void set_allocated_type_url(std::string* type_url);
@ -234,10 +225,8 @@ class PROTOBUF_EXPORT Any PROTOBUF_FINAL :
// bytes value = 2; // bytes value = 2;
void clear_value(); void clear_value();
const std::string& value() const; const std::string& value() const;
void set_value(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_value(std::string&& value); void set_value(ArgT0&& arg0, ArgT... args);
void set_value(const char* value);
void set_value(const void* value, size_t size);
std::string* mutable_value(); std::string* mutable_value();
std::string* release_value(); std::string* release_value();
void set_allocated_value(std::string* value); void set_allocated_value(std::string* value);
@ -279,8 +268,11 @@ inline const std::string& Any::type_url() const {
// @@protoc_insertion_point(field_get:google.protobuf.Any.type_url) // @@protoc_insertion_point(field_get:google.protobuf.Any.type_url)
return _internal_type_url(); return _internal_type_url();
} }
inline void Any::set_type_url(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_type_url(value); PROTOBUF_ALWAYS_INLINE
inline void Any::set_type_url(ArgT0&& arg0, ArgT... args) {
type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Any.type_url) // @@protoc_insertion_point(field_set:google.protobuf.Any.type_url)
} }
inline std::string* Any::mutable_type_url() { inline std::string* Any::mutable_type_url() {
@ -294,25 +286,6 @@ inline void Any::_internal_set_type_url(const std::string& value) {
type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Any::set_type_url(std::string&& value) {
type_url_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Any.type_url)
}
inline void Any::set_type_url(const char* value) {
GOOGLE_DCHECK(value != nullptr);
type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Any.type_url)
}
inline void Any::set_type_url(const char* value,
size_t size) {
type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Any.type_url)
}
inline std::string* Any::_internal_mutable_type_url() { inline std::string* Any::_internal_mutable_type_url() {
return type_url_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return type_url_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -340,8 +313,11 @@ inline const std::string& Any::value() const {
// @@protoc_insertion_point(field_get:google.protobuf.Any.value) // @@protoc_insertion_point(field_get:google.protobuf.Any.value)
return _internal_value(); return _internal_value();
} }
inline void Any::set_value(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_value(value); PROTOBUF_ALWAYS_INLINE
inline void Any::set_value(ArgT0&& arg0, ArgT... args) {
value_.SetBytes(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Any.value) // @@protoc_insertion_point(field_set:google.protobuf.Any.value)
} }
inline std::string* Any::mutable_value() { inline std::string* Any::mutable_value() {
@ -355,25 +331,6 @@ inline void Any::_internal_set_value(const std::string& value) {
value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Any::set_value(std::string&& value) {
value_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Any.value)
}
inline void Any::set_value(const char* value) {
GOOGLE_DCHECK(value != nullptr);
value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Any.value)
}
inline void Any::set_value(const void* value,
size_t size) {
value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Any.value)
}
inline std::string* Any::_internal_mutable_value() { inline std::string* Any::_internal_mutable_value() {
return value_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return value_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());

@ -150,10 +150,8 @@ const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google
schemas, file_default_instances, TableStruct_google_2fprotobuf_2fapi_2eproto::offsets, schemas, file_default_instances, TableStruct_google_2fprotobuf_2fapi_2eproto::offsets,
file_level_metadata_google_2fprotobuf_2fapi_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fapi_2eproto, file_level_service_descriptors_google_2fprotobuf_2fapi_2eproto, file_level_metadata_google_2fprotobuf_2fapi_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fapi_2eproto, file_level_service_descriptors_google_2fprotobuf_2fapi_2eproto,
}; };
PROTOBUF_ATTRIBUTE_WEAK ::PROTOBUF_NAMESPACE_ID::Metadata PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_google_2fprotobuf_2fapi_2eproto_getter() {
descriptor_table_google_2fprotobuf_2fapi_2eproto_metadata_getter(int index) { return &descriptor_table_google_2fprotobuf_2fapi_2eproto;
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fapi_2eproto);
return descriptor_table_google_2fprotobuf_2fapi_2eproto.file_level_metadata[index];
} }
// Force running AddDescriptors() at dynamic initialization time. // Force running AddDescriptors() at dynamic initialization time.
@ -575,10 +573,11 @@ void Api::InternalSwap(Api* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Api::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Api::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fapi_2eproto_getter, &descriptor_table_google_2fprotobuf_2fapi_2eproto_once,
file_level_metadata_google_2fprotobuf_2fapi_2eproto[0]);
} }
// =================================================================== // ===================================================================
class Method::_Internal { class Method::_Internal {
@ -968,10 +967,11 @@ void Method::InternalSwap(Method* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Method::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Method::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fapi_2eproto_getter, &descriptor_table_google_2fprotobuf_2fapi_2eproto_once,
file_level_metadata_google_2fprotobuf_2fapi_2eproto[1]);
} }
// =================================================================== // ===================================================================
class Mixin::_Internal { class Mixin::_Internal {
@ -1206,10 +1206,11 @@ void Mixin::InternalSwap(Mixin* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Mixin::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Mixin::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fapi_2eproto_getter, &descriptor_table_google_2fprotobuf_2fapi_2eproto_once,
file_level_metadata_google_2fprotobuf_2fapi_2eproto[2]);
} }
// @@protoc_insertion_point(namespace_scope) // @@protoc_insertion_point(namespace_scope)
PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_CLOSE
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN

@ -55,7 +55,6 @@ struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fapi_2eproto {
static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
}; };
extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fapi_2eproto; extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fapi_2eproto;
PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Metadata descriptor_table_google_2fprotobuf_2fapi_2eproto_metadata_getter(int index);
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN
class Api; class Api;
struct ApiDefaultTypeInternal; struct ApiDefaultTypeInternal;
@ -106,10 +105,10 @@ class PROTOBUF_EXPORT Api PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Api& default_instance() { static const Api& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -177,12 +176,6 @@ class PROTOBUF_EXPORT Api PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fapi_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -254,10 +247,8 @@ class PROTOBUF_EXPORT Api PROTOBUF_FINAL :
// string name = 1; // string name = 1;
void clear_name(); void clear_name();
const std::string& name() const; const std::string& name() const;
void set_name(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_name(std::string&& value); void set_name(ArgT0&& arg0, ArgT... args);
void set_name(const char* value);
void set_name(const char* value, size_t size);
std::string* mutable_name(); std::string* mutable_name();
std::string* release_name(); std::string* release_name();
void set_allocated_name(std::string* name); void set_allocated_name(std::string* name);
@ -270,10 +261,8 @@ class PROTOBUF_EXPORT Api PROTOBUF_FINAL :
// string version = 4; // string version = 4;
void clear_version(); void clear_version();
const std::string& version() const; const std::string& version() const;
void set_version(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_version(std::string&& value); void set_version(ArgT0&& arg0, ArgT... args);
void set_version(const char* value);
void set_version(const char* value, size_t size);
std::string* mutable_version(); std::string* mutable_version();
std::string* release_version(); std::string* release_version();
void set_allocated_version(std::string* version); void set_allocated_version(std::string* version);
@ -359,10 +348,10 @@ class PROTOBUF_EXPORT Method PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Method& default_instance() { static const Method& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -430,12 +419,6 @@ class PROTOBUF_EXPORT Method PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fapi_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -471,10 +454,8 @@ class PROTOBUF_EXPORT Method PROTOBUF_FINAL :
// string name = 1; // string name = 1;
void clear_name(); void clear_name();
const std::string& name() const; const std::string& name() const;
void set_name(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_name(std::string&& value); void set_name(ArgT0&& arg0, ArgT... args);
void set_name(const char* value);
void set_name(const char* value, size_t size);
std::string* mutable_name(); std::string* mutable_name();
std::string* release_name(); std::string* release_name();
void set_allocated_name(std::string* name); void set_allocated_name(std::string* name);
@ -487,10 +468,8 @@ class PROTOBUF_EXPORT Method PROTOBUF_FINAL :
// string request_type_url = 2; // string request_type_url = 2;
void clear_request_type_url(); void clear_request_type_url();
const std::string& request_type_url() const; const std::string& request_type_url() const;
void set_request_type_url(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_request_type_url(std::string&& value); void set_request_type_url(ArgT0&& arg0, ArgT... args);
void set_request_type_url(const char* value);
void set_request_type_url(const char* value, size_t size);
std::string* mutable_request_type_url(); std::string* mutable_request_type_url();
std::string* release_request_type_url(); std::string* release_request_type_url();
void set_allocated_request_type_url(std::string* request_type_url); void set_allocated_request_type_url(std::string* request_type_url);
@ -503,10 +482,8 @@ class PROTOBUF_EXPORT Method PROTOBUF_FINAL :
// string response_type_url = 4; // string response_type_url = 4;
void clear_response_type_url(); void clear_response_type_url();
const std::string& response_type_url() const; const std::string& response_type_url() const;
void set_response_type_url(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_response_type_url(std::string&& value); void set_response_type_url(ArgT0&& arg0, ArgT... args);
void set_response_type_url(const char* value);
void set_response_type_url(const char* value, size_t size);
std::string* mutable_response_type_url(); std::string* mutable_response_type_url();
std::string* release_response_type_url(); std::string* release_response_type_url();
void set_allocated_response_type_url(std::string* response_type_url); void set_allocated_response_type_url(std::string* response_type_url);
@ -592,10 +569,10 @@ class PROTOBUF_EXPORT Mixin PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Mixin& default_instance() { static const Mixin& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -663,12 +640,6 @@ class PROTOBUF_EXPORT Mixin PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fapi_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -681,10 +652,8 @@ class PROTOBUF_EXPORT Mixin PROTOBUF_FINAL :
// string name = 1; // string name = 1;
void clear_name(); void clear_name();
const std::string& name() const; const std::string& name() const;
void set_name(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_name(std::string&& value); void set_name(ArgT0&& arg0, ArgT... args);
void set_name(const char* value);
void set_name(const char* value, size_t size);
std::string* mutable_name(); std::string* mutable_name();
std::string* release_name(); std::string* release_name();
void set_allocated_name(std::string* name); void set_allocated_name(std::string* name);
@ -697,10 +666,8 @@ class PROTOBUF_EXPORT Mixin PROTOBUF_FINAL :
// string root = 2; // string root = 2;
void clear_root(); void clear_root();
const std::string& root() const; const std::string& root() const;
void set_root(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_root(std::string&& value); void set_root(ArgT0&& arg0, ArgT... args);
void set_root(const char* value);
void set_root(const char* value, size_t size);
std::string* mutable_root(); std::string* mutable_root();
std::string* release_root(); std::string* release_root();
void set_allocated_root(std::string* root); void set_allocated_root(std::string* root);
@ -741,8 +708,11 @@ inline const std::string& Api::name() const {
// @@protoc_insertion_point(field_get:google.protobuf.Api.name) // @@protoc_insertion_point(field_get:google.protobuf.Api.name)
return _internal_name(); return _internal_name();
} }
inline void Api::set_name(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_name(value); PROTOBUF_ALWAYS_INLINE
inline void Api::set_name(ArgT0&& arg0, ArgT... args) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Api.name) // @@protoc_insertion_point(field_set:google.protobuf.Api.name)
} }
inline std::string* Api::mutable_name() { inline std::string* Api::mutable_name() {
@ -756,25 +726,6 @@ inline void Api::_internal_set_name(const std::string& value) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Api::set_name(std::string&& value) {
name_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Api.name)
}
inline void Api::set_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Api.name)
}
inline void Api::set_name(const char* value,
size_t size) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Api.name)
}
inline std::string* Api::_internal_mutable_name() { inline std::string* Api::_internal_mutable_name() {
return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -877,8 +828,11 @@ inline const std::string& Api::version() const {
// @@protoc_insertion_point(field_get:google.protobuf.Api.version) // @@protoc_insertion_point(field_get:google.protobuf.Api.version)
return _internal_version(); return _internal_version();
} }
inline void Api::set_version(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_version(value); PROTOBUF_ALWAYS_INLINE
inline void Api::set_version(ArgT0&& arg0, ArgT... args) {
version_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Api.version) // @@protoc_insertion_point(field_set:google.protobuf.Api.version)
} }
inline std::string* Api::mutable_version() { inline std::string* Api::mutable_version() {
@ -892,25 +846,6 @@ inline void Api::_internal_set_version(const std::string& value) {
version_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); version_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Api::set_version(std::string&& value) {
version_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Api.version)
}
inline void Api::set_version(const char* value) {
GOOGLE_DCHECK(value != nullptr);
version_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Api.version)
}
inline void Api::set_version(const char* value,
size_t size) {
version_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Api.version)
}
inline std::string* Api::_internal_mutable_version() { inline std::string* Api::_internal_mutable_version() {
return version_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return version_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1078,8 +1013,11 @@ inline const std::string& Method::name() const {
// @@protoc_insertion_point(field_get:google.protobuf.Method.name) // @@protoc_insertion_point(field_get:google.protobuf.Method.name)
return _internal_name(); return _internal_name();
} }
inline void Method::set_name(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_name(value); PROTOBUF_ALWAYS_INLINE
inline void Method::set_name(ArgT0&& arg0, ArgT... args) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Method.name) // @@protoc_insertion_point(field_set:google.protobuf.Method.name)
} }
inline std::string* Method::mutable_name() { inline std::string* Method::mutable_name() {
@ -1093,25 +1031,6 @@ inline void Method::_internal_set_name(const std::string& value) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Method::set_name(std::string&& value) {
name_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Method.name)
}
inline void Method::set_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Method.name)
}
inline void Method::set_name(const char* value,
size_t size) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Method.name)
}
inline std::string* Method::_internal_mutable_name() { inline std::string* Method::_internal_mutable_name() {
return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1139,8 +1058,11 @@ inline const std::string& Method::request_type_url() const {
// @@protoc_insertion_point(field_get:google.protobuf.Method.request_type_url) // @@protoc_insertion_point(field_get:google.protobuf.Method.request_type_url)
return _internal_request_type_url(); return _internal_request_type_url();
} }
inline void Method::set_request_type_url(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_request_type_url(value); PROTOBUF_ALWAYS_INLINE
inline void Method::set_request_type_url(ArgT0&& arg0, ArgT... args) {
request_type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Method.request_type_url) // @@protoc_insertion_point(field_set:google.protobuf.Method.request_type_url)
} }
inline std::string* Method::mutable_request_type_url() { inline std::string* Method::mutable_request_type_url() {
@ -1154,25 +1076,6 @@ inline void Method::_internal_set_request_type_url(const std::string& value) {
request_type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); request_type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Method::set_request_type_url(std::string&& value) {
request_type_url_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Method.request_type_url)
}
inline void Method::set_request_type_url(const char* value) {
GOOGLE_DCHECK(value != nullptr);
request_type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Method.request_type_url)
}
inline void Method::set_request_type_url(const char* value,
size_t size) {
request_type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Method.request_type_url)
}
inline std::string* Method::_internal_mutable_request_type_url() { inline std::string* Method::_internal_mutable_request_type_url() {
return request_type_url_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return request_type_url_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1220,8 +1123,11 @@ inline const std::string& Method::response_type_url() const {
// @@protoc_insertion_point(field_get:google.protobuf.Method.response_type_url) // @@protoc_insertion_point(field_get:google.protobuf.Method.response_type_url)
return _internal_response_type_url(); return _internal_response_type_url();
} }
inline void Method::set_response_type_url(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_response_type_url(value); PROTOBUF_ALWAYS_INLINE
inline void Method::set_response_type_url(ArgT0&& arg0, ArgT... args) {
response_type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Method.response_type_url) // @@protoc_insertion_point(field_set:google.protobuf.Method.response_type_url)
} }
inline std::string* Method::mutable_response_type_url() { inline std::string* Method::mutable_response_type_url() {
@ -1235,25 +1141,6 @@ inline void Method::_internal_set_response_type_url(const std::string& value) {
response_type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); response_type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Method::set_response_type_url(std::string&& value) {
response_type_url_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Method.response_type_url)
}
inline void Method::set_response_type_url(const char* value) {
GOOGLE_DCHECK(value != nullptr);
response_type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Method.response_type_url)
}
inline void Method::set_response_type_url(const char* value,
size_t size) {
response_type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Method.response_type_url)
}
inline std::string* Method::_internal_mutable_response_type_url() { inline std::string* Method::_internal_mutable_response_type_url() {
return response_type_url_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return response_type_url_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1361,8 +1248,11 @@ inline const std::string& Mixin::name() const {
// @@protoc_insertion_point(field_get:google.protobuf.Mixin.name) // @@protoc_insertion_point(field_get:google.protobuf.Mixin.name)
return _internal_name(); return _internal_name();
} }
inline void Mixin::set_name(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_name(value); PROTOBUF_ALWAYS_INLINE
inline void Mixin::set_name(ArgT0&& arg0, ArgT... args) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Mixin.name) // @@protoc_insertion_point(field_set:google.protobuf.Mixin.name)
} }
inline std::string* Mixin::mutable_name() { inline std::string* Mixin::mutable_name() {
@ -1376,25 +1266,6 @@ inline void Mixin::_internal_set_name(const std::string& value) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Mixin::set_name(std::string&& value) {
name_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Mixin.name)
}
inline void Mixin::set_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Mixin.name)
}
inline void Mixin::set_name(const char* value,
size_t size) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Mixin.name)
}
inline std::string* Mixin::_internal_mutable_name() { inline std::string* Mixin::_internal_mutable_name() {
return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1422,8 +1293,11 @@ inline const std::string& Mixin::root() const {
// @@protoc_insertion_point(field_get:google.protobuf.Mixin.root) // @@protoc_insertion_point(field_get:google.protobuf.Mixin.root)
return _internal_root(); return _internal_root();
} }
inline void Mixin::set_root(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_root(value); PROTOBUF_ALWAYS_INLINE
inline void Mixin::set_root(ArgT0&& arg0, ArgT... args) {
root_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Mixin.root) // @@protoc_insertion_point(field_set:google.protobuf.Mixin.root)
} }
inline std::string* Mixin::mutable_root() { inline std::string* Mixin::mutable_root() {
@ -1437,25 +1311,6 @@ inline void Mixin::_internal_set_root(const std::string& value) {
root_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); root_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Mixin::set_root(std::string&& value) {
root_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Mixin.root)
}
inline void Mixin::set_root(const char* value) {
GOOGLE_DCHECK(value != nullptr);
root_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Mixin.root)
}
inline void Mixin::set_root(const char* value,
size_t size) {
root_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Mixin.root)
}
inline std::string* Mixin::_internal_mutable_root() { inline std::string* Mixin::_internal_mutable_root() {
return root_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return root_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());

@ -193,6 +193,34 @@ struct PROTOBUF_EXPORT ArenaStringPtr {
void Set(EmptyDefault, std::string&& value, ::google::protobuf::Arena* arena); void Set(EmptyDefault, std::string&& value, ::google::protobuf::Arena* arena);
void Set(NonEmptyDefault, ConstStringParam value, ::google::protobuf::Arena* arena); void Set(NonEmptyDefault, ConstStringParam value, ::google::protobuf::Arena* arena);
void Set(NonEmptyDefault, std::string&& value, ::google::protobuf::Arena* arena); void Set(NonEmptyDefault, std::string&& value, ::google::protobuf::Arena* arena);
template <typename FirstParam>
void Set(FirstParam p1, const char* str, ::google::protobuf::Arena* arena) {
Set(p1, ConstStringParam(str), arena);
}
template <typename FirstParam>
void Set(FirstParam p1, const char* str, size_t size,
::google::protobuf::Arena* arena) {
ConstStringParam sp{str, size}; // for string_view and `const string &`
Set(p1, sp, arena);
}
template <typename FirstParam, typename RefWrappedType>
void Set(FirstParam p1,
std::reference_wrapper<RefWrappedType> const_string_ref,
::google::protobuf::Arena* arena) {
Set(p1, const_string_ref.get(), arena);
}
template <typename FirstParam, typename SecondParam>
void SetBytes(FirstParam p1, SecondParam&& p2, ::google::protobuf::Arena* arena) {
Set(p1, static_cast<SecondParam&&>(p2), arena);
}
template <typename FirstParam>
void SetBytes(FirstParam p1, const void* str, size_t size,
::google::protobuf::Arena* arena) {
// must work whether ConstStringParam is string_view or `const string &`
ConstStringParam sp{static_cast<const char*>(str), size};
Set(p1, sp, arena);
}
// Basic accessors. // Basic accessors.
const std::string& Get() const PROTOBUF_NDEBUG_INLINE { const std::string& Get() const PROTOBUF_NDEBUG_INLINE {

@ -1036,16 +1036,6 @@ int CommandLineInterface::Run(int argc, const char* const argv[]) {
} }
for (auto fd : parsed_files) {
if (!AllowProto3Optional(*fd) && ContainsProto3Optional(fd)) {
std::cerr << fd->name()
<< ": This file contains proto3 optional fields, but "
"--experimental_allow_proto3_optional was not set."
<< std::endl;
return 1;
}
}
// We construct a separate GeneratorContext for each output location. Note // We construct a separate GeneratorContext for each output location. Note
// that two code generators may output to the same location, in which case // that two code generators may output to the same location, in which case
// they should share a single GeneratorContext so that OpenForInsert() works. // they should share a single GeneratorContext so that OpenForInsert() works.
@ -1214,13 +1204,6 @@ PopulateSingleSimpleDescriptorDatabase(const std::string& descriptor_set_name) {
} // namespace } // namespace
bool CommandLineInterface::AllowProto3Optional(
const FileDescriptor& file) const {
// Proto3 optional is enabled by default now, the experimental flag is no
// longer required.
return true;
}
bool CommandLineInterface::VerifyInputFilesInDescriptors( bool CommandLineInterface::VerifyInputFilesInDescriptors(
DescriptorDatabase* database) { DescriptorDatabase* database) {
@ -1337,7 +1320,6 @@ void CommandLineInterface::Clear() {
source_info_in_descriptor_set_ = false; source_info_in_descriptor_set_ = false;
disallow_services_ = false; disallow_services_ = false;
direct_dependencies_explicitly_set_ = false; direct_dependencies_explicitly_set_ = false;
allow_proto3_optional_ = false;
deterministic_output_ = false; deterministic_output_ = false;
} }
@ -1857,8 +1839,7 @@ CommandLineInterface::InterpretArgument(const std::string& name,
} else if (name == "--experimental_allow_proto3_optional") { } else if (name == "--experimental_allow_proto3_optional") {
allow_proto3_optional_ = true; // Flag is no longer observed, but we allow it for backward compat.
} else if (name == "--encode" || name == "--decode" || } else if (name == "--encode" || name == "--decode" ||
name == "--decode_raw") { name == "--decode_raw") {
if (mode_ != MODE_COMPILE) { if (mode_ != MODE_COMPILE) {

@ -226,11 +226,6 @@ class PROTOC_EXPORT CommandLineInterface {
bool MakeInputsBeProtoPathRelative(DiskSourceTree* source_tree, bool MakeInputsBeProtoPathRelative(DiskSourceTree* source_tree,
DescriptorDatabase* fallback_database); DescriptorDatabase* fallback_database);
// Is this .proto file whitelisted, or do we have a command-line flag allowing
// us to use proto3 optional? This is a temporary control to avoid people from
// using proto3 optional until code generators have implemented it.
bool AllowProto3Optional(const FileDescriptor& file) const;
// Fails if these files use proto3 optional and the code generator doesn't // Fails if these files use proto3 optional and the code generator doesn't
// support it. This is a permanent check. // support it. This is a permanent check.
bool EnforceProto3OptionalSupport( bool EnforceProto3OptionalSupport(
@ -448,9 +443,6 @@ class PROTOC_EXPORT CommandLineInterface {
// Was the --disallow_services flag used? // Was the --disallow_services flag used?
bool disallow_services_ = false; bool disallow_services_ = false;
// Was the --experimental_allow_proto3_optional flag used?
bool allow_proto3_optional_ = false;
// When using --encode, this will be passed to SetSerializationDeterministic. // When using --encode, this will be passed to SetSerializationDeterministic.
bool deterministic_output_ = false; bool deterministic_output_ = false;

@ -2378,7 +2378,6 @@ TEST_F(CommandLineInterfaceTest, MissingValueAtEndError) {
ExpectErrorText("Missing value for flag: --test_out\n"); ExpectErrorText("Missing value for flag: --test_out\n");
} }
TEST_F(CommandLineInterfaceTest, Proto3OptionalDisallowedNoCodegenSupport) { TEST_F(CommandLineInterfaceTest, Proto3OptionalDisallowedNoCodegenSupport) {
CreateTempFile("google/foo.proto", CreateTempFile("google/foo.proto",
"syntax = \"proto3\";\n" "syntax = \"proto3\";\n"

@ -694,10 +694,6 @@ void FileGenerator::GenerateReflectionInitializationCode(io::Printer* printer) {
if (!message_generators_.empty()) { if (!message_generators_.empty()) {
format("static ::$proto_ns$::Metadata $file_level_metadata$[$1$];\n", format("static ::$proto_ns$::Metadata $file_level_metadata$[$1$];\n",
message_generators_.size()); message_generators_.size());
} else {
format(
"static "
"constexpr ::$proto_ns$::Metadata* $file_level_metadata$ = nullptr;\n");
} }
if (!enum_generators_.empty()) { if (!enum_generators_.empty()) {
format( format(
@ -855,24 +851,30 @@ void FileGenerator::GenerateReflectionInitializationCode(io::Printer* printer) {
" false, $1$, $2$, $3$, \"$filename$\", \n" " false, $1$, $2$, $3$, \"$filename$\", \n"
" &$desc_table$_once, $4$, $5$, $6$,\n" " &$desc_table$_once, $4$, $5$, $6$,\n"
" schemas, file_default_instances, $tablename$::offsets,\n" " schemas, file_default_instances, $tablename$::offsets,\n"
" $file_level_metadata$, $file_level_enum_descriptors$, " " $7$, $file_level_enum_descriptors$, "
"$file_level_service_descriptors$,\n" "$file_level_service_descriptors$,\n"
"};\n" "};\n"
// This function exists to be marked as weak. // This function exists to be marked as weak.
// It can significantly speed up compilation by breaking up the SCC. // It can significantly speed up compilation by breaking up LLVM's SCC in
// the .pb.cc tranlation units. Large translation units see a reduction of
// more than 35% of walltime for optimized builds.
// Without the weak attribute all the messages in the file, including all // Without the weak attribute all the messages in the file, including all
// the vtables and everything they use become part of the same SCC. // the vtables and everything they use become part of the same SCC through
// a cycle like:
// GetMetadata -> descriptor table -> default instances ->
// vtables -> GetMetadata
// By adding a weak function here we break the connection from the // By adding a weak function here we break the connection from the
// individual vtables back into the descriptor table. // individual vtables back into the descriptor table.
"PROTOBUF_ATTRIBUTE_WEAK ::$proto_ns$::Metadata\n" "PROTOBUF_ATTRIBUTE_WEAK const ::$proto_ns$::internal::DescriptorTable* "
"$desc_table$_metadata_getter(int index) {\n" "$desc_table$_getter() {\n"
" ::$proto_ns$::internal::AssignDescriptors(&$desc_table$);\n" " return &$desc_table$;\n"
" return $desc_table$.file_level_metadata[index];\n"
"}\n" "}\n"
"\n", "\n",
eager ? "true" : "false", file_data.size(), protodef_name, eager ? "true" : "false", file_data.size(), protodef_name,
num_deps == 0 ? "nullptr" : variables_["desc_table"] + "_deps", num_deps, num_deps == 0 ? "nullptr" : variables_["desc_table"] + "_deps", num_deps,
message_generators_.size()); message_generators_.size(),
message_generators_.empty() ? "nullptr"
: variables_["file_level_metadata"]);
// For descriptor.proto we want to avoid doing any dynamic initialization, // For descriptor.proto we want to avoid doing any dynamic initialization,
// because in some situations that would otherwise pull in a lot of // because in some situations that would otherwise pull in a lot of
@ -1288,9 +1290,7 @@ void FileGenerator::GenerateGlobalStateFunctionDeclarations(
if (HasDescriptorMethods(file_, options_)) { if (HasDescriptorMethods(file_, options_)) {
format( format(
"extern $dllexport_decl $const ::$proto_ns$::internal::DescriptorTable " "extern $dllexport_decl $const ::$proto_ns$::internal::DescriptorTable "
"$desc_table$;\n" "$desc_table$;\n");
"$dllexport_decl $::$proto_ns$::Metadata "
"$desc_table$_metadata_getter(int index);\n");
} }
} }

@ -1076,19 +1076,9 @@ void MessageGenerator::GenerateClassDefinition(io::Printer* printer) {
if (HasDescriptorMethods(descriptor_->file(), options_)) { if (HasDescriptorMethods(descriptor_->file(), options_)) {
format( format(
" void MergeFrom(const ::$proto_ns$::Message& other) final;\n" " void MergeFrom(const ::$proto_ns$::Message& other) final;\n"
" ::$proto_ns$::Metadata GetMetadata() const final;\n" " ::$proto_ns$::Metadata GetMetadata() const final;\n");
" private:\n"
" static ::$proto_ns$::Metadata GetMetadataStatic() {\n"
" ::$proto_ns$::internal::AssignDescriptors(&::$desc_table$);\n"
" return ::$desc_table$.file_level_metadata[$1$];\n"
" }\n"
"\n"
" public:\n"
"};\n",
index_in_file_messages_);
} else {
format("};\n");
} }
format("};\n");
return; return;
} }
@ -1168,10 +1158,10 @@ void MessageGenerator::GenerateClassDefinition(io::Printer* printer) {
// separately. // separately.
format( format(
"static const ::$proto_ns$::Descriptor* GetDescriptor() {\n" "static const ::$proto_ns$::Descriptor* GetDescriptor() {\n"
" return GetMetadataStatic().descriptor;\n" " return default_instance().GetMetadata().descriptor;\n"
"}\n" "}\n"
"static const ::$proto_ns$::Reflection* GetReflection() {\n" "static const ::$proto_ns$::Reflection* GetReflection() {\n"
" return GetMetadataStatic().reflection;\n" " return default_instance().GetMetadata().reflection;\n"
"}\n"); "}\n");
} }
@ -1380,12 +1370,6 @@ void MessageGenerator::GenerateClassDefinition(io::Printer* printer) {
if (HasDescriptorMethods(descriptor_->file(), options_)) { if (HasDescriptorMethods(descriptor_->file(), options_)) {
format( format(
"::$proto_ns$::Metadata GetMetadata() const final;\n" "::$proto_ns$::Metadata GetMetadata() const final;\n"
"private:\n"
"static ::$proto_ns$::Metadata GetMetadataStatic() {\n"
" return ::$desc_table$_metadata_getter(kIndexInFileMessages);\n"
"}\n"
"\n"
"public:\n"
"\n"); "\n");
} else { } else {
format( format(
@ -1889,8 +1873,11 @@ void MessageGenerator::GenerateClassMethods(io::Printer* printer) {
if (HasDescriptorMethods(descriptor_->file(), options_)) { if (HasDescriptorMethods(descriptor_->file(), options_)) {
format( format(
"::$proto_ns$::Metadata $classname$::GetMetadata() const {\n" "::$proto_ns$::Metadata $classname$::GetMetadata() const {\n"
" return GetMetadataStatic();\n" " return ::$proto_ns$::internal::AssignDescriptors(\n"
"}\n"); " &$desc_table$_getter, &$desc_table$_once,\n"
" $file_level_metadata$[$1$]);\n"
"}\n",
index_in_file_messages_);
format( format(
"void $classname$::MergeFrom(\n" "void $classname$::MergeFrom(\n"
" const ::$proto_ns$::Message& other) {\n" " const ::$proto_ns$::Message& other) {\n"
@ -2029,9 +2016,11 @@ void MessageGenerator::GenerateClassMethods(io::Printer* printer) {
if (HasDescriptorMethods(descriptor_->file(), options_)) { if (HasDescriptorMethods(descriptor_->file(), options_)) {
format( format(
"::$proto_ns$::Metadata $classname$::GetMetadata() const {\n" "::$proto_ns$::Metadata $classname$::GetMetadata() const {\n"
" return GetMetadataStatic();\n" " return ::$proto_ns$::internal::AssignDescriptors(\n"
"}\n" " &$desc_table$_getter, &$desc_table$_once,\n"
"\n"); " $file_level_metadata$[$1$]);\n"
"}\n",
index_in_file_messages_);
} else { } else {
format( format(
"std::string $classname$::GetTypeName() const {\n" "std::string $classname$::GetTypeName() const {\n"

@ -80,13 +80,9 @@ class TestGenerator : public CodeGenerator {
// Check field accessors for a required string: // Check field accessors for a required string:
TryInsert("test.pb.h", "field_get:foo.Bar.requiredString", context); TryInsert("test.pb.h", "field_get:foo.Bar.requiredString", context);
TryInsert("test.pb.h", "field_set:foo.Bar.requiredString", context); TryInsert("test.pb.h", "field_set:foo.Bar.requiredString", context);
TryInsert("test.pb.h", "field_set_char:foo.Bar.requiredString", context);
TryInsert("test.pb.h", "field_set_pointer:foo.Bar.requiredString", context);
TryInsert("test.pb.h", "field_mutable:foo.Bar.requiredString", context); TryInsert("test.pb.h", "field_mutable:foo.Bar.requiredString", context);
TryInsert("test.pb.h", "field_set_allocated:foo.Bar.requiredString", TryInsert("test.pb.h", "field_set_allocated:foo.Bar.requiredString",
context); context);
TryInsert("test.pb.h", "field_set_char:foo.Bar.requiredString", context);
TryInsert("test.pb.h", "field_set_pointer:foo.Bar.requiredString", context);
// Check field accessors for a repeated string: // Check field accessors for a repeated string:
TryInsert("test.pb.h", "field_get:foo.Bar.repeatedString", context); TryInsert("test.pb.h", "field_get:foo.Bar.repeatedString", context);
@ -104,12 +100,8 @@ class TestGenerator : public CodeGenerator {
// Check field accessors for a string inside oneof{}: // Check field accessors for a string inside oneof{}:
TryInsert("test.pb.h", "field_get:foo.Bar.oneOfString", context); TryInsert("test.pb.h", "field_get:foo.Bar.oneOfString", context);
TryInsert("test.pb.h", "field_set:foo.Bar.oneOfString", context); TryInsert("test.pb.h", "field_set:foo.Bar.oneOfString", context);
TryInsert("test.pb.h", "field_set_char:foo.Bar.oneOfString", context);
TryInsert("test.pb.h", "field_set_pointer:foo.Bar.oneOfString", context);
TryInsert("test.pb.h", "field_mutable:foo.Bar.oneOfString", context); TryInsert("test.pb.h", "field_mutable:foo.Bar.oneOfString", context);
TryInsert("test.pb.h", "field_set_allocated:foo.Bar.oneOfString", context); TryInsert("test.pb.h", "field_set_allocated:foo.Bar.oneOfString", context);
TryInsert("test.pb.h", "field_set_char:foo.Bar.oneOfString", context);
TryInsert("test.pb.h", "field_set_pointer:foo.Bar.oneOfString", context);
// Check field accessors for an optional message: // Check field accessors for an optional message:
TryInsert("test.pb.h", "field_get:foo.Bar.optMessage", context); TryInsert("test.pb.h", "field_get:foo.Bar.optMessage", context);

@ -82,6 +82,8 @@ void SetStringVariables(const FieldDescriptor* descriptor,
: "lazy_variable"]; : "lazy_variable"];
(*variables)["pointer_type"] = (*variables)["pointer_type"] =
descriptor->type() == FieldDescriptor::TYPE_BYTES ? "void" : "char"; descriptor->type() == FieldDescriptor::TYPE_BYTES ? "void" : "char";
(*variables)["setter"] =
descriptor->type() == FieldDescriptor::TYPE_BYTES ? "SetBytes" : "Set";
(*variables)["null_check"] = (*variables)["DCHK"] + "(value != nullptr);\n"; (*variables)["null_check"] = (*variables)["DCHK"] + "(value != nullptr);\n";
// NOTE: Escaped here to unblock proto1->proto2 migration. // NOTE: Escaped here to unblock proto1->proto2 migration.
// TODO(liujisi): Extend this to apply for other conflicting methods. // TODO(liujisi): Extend this to apply for other conflicting methods.
@ -155,19 +157,10 @@ void StringFieldGenerator::GenerateAccessorDeclarations(
format( format(
"$deprecated_attr$const std::string& ${1$$name$$}$() const;\n" "$deprecated_attr$const std::string& ${1$$name$$}$() const;\n"
"$deprecated_attr$void ${1$set_$name$$}$(const std::string& value);\n" "template <typename ArgT0 = const std::string&, typename... ArgT>\n"
"$deprecated_attr$void ${1$set_$name$$}$(std::string&& value);\n" "$deprecated_attr$void ${1$set_$name$$}$(ArgT0&& arg0, ArgT... args);\n",
"$deprecated_attr$void ${1$set_$name$$}$(const char* value);\n",
descriptor_); descriptor_);
if (!options_.opensource_runtime) {
format(
"$deprecated_attr$void ${1$set_$name$$}$(::StringPiece value);\n",
descriptor_);
}
format( format(
"$deprecated_attr$void ${1$set_$name$$}$(const $pointer_type$* "
"value, size_t size)"
";\n"
"$deprecated_attr$std::string* ${1$mutable_$name$$}$();\n" "$deprecated_attr$std::string* ${1$mutable_$name$$}$();\n"
"$deprecated_attr$std::string* ${1$$release_name$$}$();\n" "$deprecated_attr$std::string* ${1$$release_name$$}$();\n"
"$deprecated_attr$void ${1$set_allocated_$name$$}$(std::string* " "$deprecated_attr$void ${1$set_allocated_$name$$}$(std::string* "
@ -202,9 +195,13 @@ void StringFieldGenerator::GenerateInlineAccessorDefinitions(
format( format(
" return _internal_$name$();\n" " return _internal_$name$();\n"
"}\n" "}\n"
"inline void $classname$::set_$name$(const std::string& value) {\n" "template <typename ArgT0, typename... ArgT>\n"
"PROTOBUF_ALWAYS_INLINE\n"
"inline void $classname$::set_$name$(ArgT0&& arg0, ArgT... args) {\n"
"$annotate_accessor$" "$annotate_accessor$"
" _internal_set_$name$(value);\n" " $set_hasbit$\n"
" $name$_.$setter$($default_value_tag$, static_cast<ArgT0 &&>(arg0),"
" args..., GetArena());\n"
" // @@protoc_insertion_point(field_set:$full_name$)\n" " // @@protoc_insertion_point(field_set:$full_name$)\n"
"}\n" "}\n"
"inline std::string* $classname$::mutable_$name$() {\n" "inline std::string* $classname$::mutable_$name$() {\n"
@ -219,40 +216,8 @@ void StringFieldGenerator::GenerateInlineAccessorDefinitions(
"value) {\n" "value) {\n"
" $set_hasbit$\n" " $set_hasbit$\n"
" $name$_.Set($default_value_tag$, value, GetArena());\n" " $name$_.Set($default_value_tag$, value, GetArena());\n"
"}\n"
"inline void $classname$::set_$name$(std::string&& value) {\n"
"$annotate_accessor$"
" $set_hasbit$\n"
" $name$_.Set(\n"
" $default_value_tag$, ::std::move(value), GetArena());\n"
" // @@protoc_insertion_point(field_set_rvalue:$full_name$)\n"
"}\n"
"inline void $classname$::set_$name$(const char* value) {\n"
"$annotate_accessor$"
" $null_check$"
" $set_hasbit$\n"
" $name$_.Set($default_value_tag$, $string_piece$(value), GetArena());\n"
" // @@protoc_insertion_point(field_set_char:$full_name$)\n"
"}\n"); "}\n");
if (!options_.opensource_runtime) {
format(
"inline void $classname$::set_$name$(::StringPiece value) {\n"
"$annotate_accessor$"
" $set_hasbit$\n"
" $name$_.Set($default_value_tag$, value,GetArena());\n"
" // @@protoc_insertion_point(field_set_string_piece:$full_name$)\n"
"}\n");
}
format( format(
"inline "
"void $classname$::set_$name$(const $pointer_type$* value,\n"
" size_t size) {\n"
"$annotate_accessor$"
" $set_hasbit$\n"
" $name$_.Set($default_value_tag$, $string_piece$(\n"
" reinterpret_cast<const char*>(value), size), GetArena());\n"
" // @@protoc_insertion_point(field_set_pointer:$full_name$)\n"
"}\n"
"inline std::string* $classname$::_internal_mutable_$name$() {\n" "inline std::string* $classname$::_internal_mutable_$name$() {\n"
" $set_hasbit$\n" " $set_hasbit$\n"
" return $name$_.Mutable($default_variable_or_tag$, GetArena());\n" " return $name$_.Mutable($default_variable_or_tag$, GetArena());\n"
@ -431,9 +396,16 @@ void StringOneofFieldGenerator::GenerateInlineAccessorDefinitions(
" // @@protoc_insertion_point(field_get:$full_name$)\n" " // @@protoc_insertion_point(field_get:$full_name$)\n"
" return _internal_$name$();\n" " return _internal_$name$();\n"
"}\n" "}\n"
"inline void $classname$::set_$name$(const std::string& value) {\n" "template <typename ArgT0, typename... ArgT>\n"
"inline void $classname$::set_$name$(ArgT0&& arg0, ArgT... args) {\n"
"$annotate_accessor$" "$annotate_accessor$"
" _internal_set_$name$(value);\n" " if (!_internal_has_$name$()) {\n"
" clear_$oneof_name$();\n"
" set_has_$name$();\n"
" $field_member$.UnsafeSetDefault($init_value$);\n"
" }\n"
" $field_member$.$setter$($default_value_tag$,"
" static_cast<ArgT0 &&>(arg0), args..., GetArena());\n"
" // @@protoc_insertion_point(field_set:$full_name$)\n" " // @@protoc_insertion_point(field_set:$full_name$)\n"
"}\n" "}\n"
"inline std::string* $classname$::mutable_$name$() {\n" "inline std::string* $classname$::mutable_$name$() {\n"
@ -455,60 +427,8 @@ void StringOneofFieldGenerator::GenerateInlineAccessorDefinitions(
" $field_member$.UnsafeSetDefault($init_value$);\n" " $field_member$.UnsafeSetDefault($init_value$);\n"
" }\n" " }\n"
" $field_member$.Set($default_value_tag$, value, GetArena());\n" " $field_member$.Set($default_value_tag$, value, GetArena());\n"
"}\n"
"inline void $classname$::set_$name$(std::string&& value) {\n"
"$annotate_accessor$"
" // @@protoc_insertion_point(field_set:$full_name$)\n"
" if (!_internal_has_$name$()) {\n"
" clear_$oneof_name$();\n"
" set_has_$name$();\n"
" $field_member$.UnsafeSetDefault($init_value$);\n"
" }\n"
" $field_member$.Set(\n"
" $default_value_tag$, ::std::move(value), GetArena());\n"
" // @@protoc_insertion_point(field_set_rvalue:$full_name$)\n"
"}\n"
"inline void $classname$::set_$name$(const char* value) {\n"
"$annotate_accessor$"
" $null_check$"
" if (!_internal_has_$name$()) {\n"
" clear_$oneof_name$();\n"
" set_has_$name$();\n"
" $field_member$.UnsafeSetDefault($init_value$);\n"
" }\n"
" $field_member$.Set($default_value_tag$,\n"
" $string_piece$(value), GetArena());\n"
" // @@protoc_insertion_point(field_set_char:$full_name$)\n"
"}\n"); "}\n");
if (!options_.opensource_runtime) {
format(
"inline void $classname$::set_$name$(::StringPiece value) {\n"
"$annotate_accessor$"
" if (!_internal_has_$name$()) {\n"
" clear_$oneof_name$();\n"
" set_has_$name$();\n"
" $field_member$.UnsafeSetDefault($init_value$);\n"
" }\n"
" $field_member$.Set($default_value_tag$, value, GetArena());\n"
" // @@protoc_insertion_point(field_set_string_piece:$full_name$)\n"
"}\n");
}
format( format(
"inline "
"void $classname$::set_$name$(const $pointer_type$* value,\n"
" size_t size) {\n"
"$annotate_accessor$"
" if (!_internal_has_$name$()) {\n"
" clear_$oneof_name$();\n"
" set_has_$name$();\n"
" $field_member$.UnsafeSetDefault($init_value$);\n"
" }\n"
" $field_member$.Set(\n"
" $default_value_tag$, $string_piece$(\n"
" reinterpret_cast<const char*>(value), size),\n"
" GetArena());\n"
" // @@protoc_insertion_point(field_set_pointer:$full_name$)\n"
"}\n"
"inline std::string* $classname$::_internal_mutable_$name$() {\n" "inline std::string* $classname$::_internal_mutable_$name$() {\n"
" if (!_internal_has_$name$()) {\n" " if (!_internal_has_$name$()) {\n"
" clear_$oneof_name$();\n" " clear_$oneof_name$();\n"

@ -108,6 +108,7 @@ void Context::InitializeFieldGeneratorInfoForMessage(
InitializeFieldGeneratorInfoForMessage(message->nested_type(i)); InitializeFieldGeneratorInfoForMessage(message->nested_type(i));
} }
std::vector<const FieldDescriptor*> fields; std::vector<const FieldDescriptor*> fields;
fields.reserve(message->field_count());
for (int i = 0; i < message->field_count(); ++i) { for (int i = 0; i < message->field_count(); ++i) {
fields.push_back(message->field(i)); fields.push_back(message->field(i));
} }

@ -95,9 +95,13 @@ void SetMessageVariables(const FieldDescriptor* descriptor, int messageBitIndex,
// We use `x.getClass()` as a null check because it generates less bytecode // We use `x.getClass()` as a null check because it generates less bytecode
// than an `if (x == null) { throw ... }` statement. // than an `if (x == null) { throw ... }` statement.
(*variables)["key_null_check"] = (*variables)["key_null_check"] =
IsReferenceType(keyJavaType) ? "key.getClass();" : ""; IsReferenceType(keyJavaType)
? "java.lang.Class<?> keyClass = key.getClass();"
: "";
(*variables)["value_null_check"] = (*variables)["value_null_check"] =
IsReferenceType(valueJavaType) ? "value.getClass();" : ""; IsReferenceType(valueJavaType)
? "java.lang.Class<?> valueClass = value.getClass();"
: "";
if (GetJavaType(value) == JAVATYPE_ENUM) { if (GetJavaType(value) == JAVATYPE_ENUM) {
// We store enums as Integers internally. // We store enums as Integers internally.

@ -571,6 +571,7 @@ void ImmutableMessageGenerator::GenerateMessageSerializationMethods(
SortFieldsByNumber(descriptor_)); SortFieldsByNumber(descriptor_));
std::vector<const Descriptor::ExtensionRange*> sorted_extensions; std::vector<const Descriptor::ExtensionRange*> sorted_extensions;
sorted_extensions.reserve(descriptor_->extension_range_count());
for (int i = 0; i < descriptor_->extension_range_count(); ++i) { for (int i = 0; i < descriptor_->extension_range_count(); ++i) {
sorted_extensions.push_back(descriptor_->extension_range(i)); sorted_extensions.push_back(descriptor_->extension_range(i));
} }

@ -127,7 +127,8 @@ void SetPrimitiveVariables(const FieldDescriptor* descriptor,
if (IsReferenceType(javaType)) { if (IsReferenceType(javaType)) {
// We use `x.getClass()` as a null check because it generates less bytecode // We use `x.getClass()` as a null check because it generates less bytecode
// than an `if (x == null) { throw ... }` statement. // than an `if (x == null) { throw ... }` statement.
(*variables)["null_check"] = " value.getClass();\n"; (*variables)["null_check"] =
" java.lang.Class<?> valueClass = value.getClass();\n";
} else { } else {
(*variables)["null_check"] = ""; (*variables)["null_check"] = "";
} }

@ -77,7 +77,8 @@ void SetPrimitiveVariables(const FieldDescriptor* descriptor,
WireFormat::TagSize(descriptor->number(), GetType(descriptor))); WireFormat::TagSize(descriptor->number(), GetType(descriptor)));
// We use `x.getClass()` as a null check because it generates less bytecode // We use `x.getClass()` as a null check because it generates less bytecode
// than an `if (x == null) { throw ... }` statement. // than an `if (x == null) { throw ... }` statement.
(*variables)["null_check"] = " value.getClass();\n"; (*variables)["null_check"] =
" java.lang.Class<?> valueClass = value.getClass();\n";
// TODO(birdo): Add @deprecated javadoc when generating javadoc is supported // TODO(birdo): Add @deprecated javadoc when generating javadoc is supported
// by the proto compiler // by the proto compiler

@ -181,10 +181,8 @@ const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google
schemas, file_default_instances, TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto::offsets, schemas, file_default_instances, TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto::offsets,
file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fcompiler_2fplugin_2eproto, file_level_service_descriptors_google_2fprotobuf_2fcompiler_2fplugin_2eproto, file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fcompiler_2fplugin_2eproto, file_level_service_descriptors_google_2fprotobuf_2fcompiler_2fplugin_2eproto,
}; };
PROTOBUF_ATTRIBUTE_WEAK ::PROTOBUF_NAMESPACE_ID::Metadata PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter() {
descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_metadata_getter(int index) { return &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto;
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto);
return descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto.file_level_metadata[index];
} }
// Force running AddDescriptors() at dynamic initialization time. // Force running AddDescriptors() at dynamic initialization time.
@ -530,10 +528,11 @@ void Version::InternalSwap(Version* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Version::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Version::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter, &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_once,
file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto[0]);
} }
// =================================================================== // ===================================================================
class CodeGeneratorRequest::_Internal { class CodeGeneratorRequest::_Internal {
@ -873,10 +872,11 @@ void CodeGeneratorRequest::InternalSwap(CodeGeneratorRequest* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata CodeGeneratorRequest::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata CodeGeneratorRequest::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter, &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_once,
file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto[1]);
} }
// =================================================================== // ===================================================================
class CodeGeneratorResponse_File::_Internal { class CodeGeneratorResponse_File::_Internal {
@ -1235,10 +1235,11 @@ void CodeGeneratorResponse_File::InternalSwap(CodeGeneratorResponse_File* other)
} }
::PROTOBUF_NAMESPACE_ID::Metadata CodeGeneratorResponse_File::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata CodeGeneratorResponse_File::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter, &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_once,
file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto[2]);
} }
// =================================================================== // ===================================================================
class CodeGeneratorResponse::_Internal { class CodeGeneratorResponse::_Internal {
@ -1520,10 +1521,11 @@ void CodeGeneratorResponse::InternalSwap(CodeGeneratorResponse* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata CodeGeneratorResponse::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata CodeGeneratorResponse::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter, &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_once,
file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto[3]);
} }
// @@protoc_insertion_point(namespace_scope) // @@protoc_insertion_point(namespace_scope)
} // namespace compiler } // namespace compiler
PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_CLOSE

@ -61,7 +61,6 @@ struct PROTOC_EXPORT TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto {
static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
}; };
extern PROTOC_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto; extern PROTOC_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto;
PROTOC_EXPORT ::PROTOBUF_NAMESPACE_ID::Metadata descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_metadata_getter(int index);
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN
namespace compiler { namespace compiler {
class CodeGeneratorRequest; class CodeGeneratorRequest;
@ -149,10 +148,10 @@ class PROTOC_EXPORT Version PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Version& default_instance() { static const Version& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -220,12 +219,6 @@ class PROTOC_EXPORT Version PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -244,10 +237,8 @@ class PROTOC_EXPORT Version PROTOBUF_FINAL :
public: public:
void clear_suffix(); void clear_suffix();
const std::string& suffix() const; const std::string& suffix() const;
void set_suffix(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_suffix(std::string&& value); void set_suffix(ArgT0&& arg0, ArgT... args);
void set_suffix(const char* value);
void set_suffix(const char* value, size_t size);
std::string* mutable_suffix(); std::string* mutable_suffix();
std::string* release_suffix(); std::string* release_suffix();
void set_allocated_suffix(std::string* suffix); void set_allocated_suffix(std::string* suffix);
@ -350,10 +341,10 @@ class PROTOC_EXPORT CodeGeneratorRequest PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const CodeGeneratorRequest& default_instance() { static const CodeGeneratorRequest& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -421,12 +412,6 @@ class PROTOC_EXPORT CodeGeneratorRequest PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -487,10 +472,8 @@ class PROTOC_EXPORT CodeGeneratorRequest PROTOBUF_FINAL :
public: public:
void clear_parameter(); void clear_parameter();
const std::string& parameter() const; const std::string& parameter() const;
void set_parameter(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_parameter(std::string&& value); void set_parameter(ArgT0&& arg0, ArgT... args);
void set_parameter(const char* value);
void set_parameter(const char* value, size_t size);
std::string* mutable_parameter(); std::string* mutable_parameter();
std::string* release_parameter(); std::string* release_parameter();
void set_allocated_parameter(std::string* parameter); void set_allocated_parameter(std::string* parameter);
@ -572,10 +555,10 @@ class PROTOC_EXPORT CodeGeneratorResponse_File PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const CodeGeneratorResponse_File& default_instance() { static const CodeGeneratorResponse_File& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -643,12 +626,6 @@ class PROTOC_EXPORT CodeGeneratorResponse_File PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -667,10 +644,8 @@ class PROTOC_EXPORT CodeGeneratorResponse_File PROTOBUF_FINAL :
public: public:
void clear_name(); void clear_name();
const std::string& name() const; const std::string& name() const;
void set_name(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_name(std::string&& value); void set_name(ArgT0&& arg0, ArgT... args);
void set_name(const char* value);
void set_name(const char* value, size_t size);
std::string* mutable_name(); std::string* mutable_name();
std::string* release_name(); std::string* release_name();
void set_allocated_name(std::string* name); void set_allocated_name(std::string* name);
@ -687,10 +662,8 @@ class PROTOC_EXPORT CodeGeneratorResponse_File PROTOBUF_FINAL :
public: public:
void clear_insertion_point(); void clear_insertion_point();
const std::string& insertion_point() const; const std::string& insertion_point() const;
void set_insertion_point(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_insertion_point(std::string&& value); void set_insertion_point(ArgT0&& arg0, ArgT... args);
void set_insertion_point(const char* value);
void set_insertion_point(const char* value, size_t size);
std::string* mutable_insertion_point(); std::string* mutable_insertion_point();
std::string* release_insertion_point(); std::string* release_insertion_point();
void set_allocated_insertion_point(std::string* insertion_point); void set_allocated_insertion_point(std::string* insertion_point);
@ -707,10 +680,8 @@ class PROTOC_EXPORT CodeGeneratorResponse_File PROTOBUF_FINAL :
public: public:
void clear_content(); void clear_content();
const std::string& content() const; const std::string& content() const;
void set_content(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_content(std::string&& value); void set_content(ArgT0&& arg0, ArgT... args);
void set_content(const char* value);
void set_content(const char* value, size_t size);
std::string* mutable_content(); std::string* mutable_content();
std::string* release_content(); std::string* release_content();
void set_allocated_content(std::string* content); void set_allocated_content(std::string* content);
@ -792,10 +763,10 @@ class PROTOC_EXPORT CodeGeneratorResponse PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const CodeGeneratorResponse& default_instance() { static const CodeGeneratorResponse& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -863,12 +834,6 @@ class PROTOC_EXPORT CodeGeneratorResponse PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -936,10 +901,8 @@ class PROTOC_EXPORT CodeGeneratorResponse PROTOBUF_FINAL :
public: public:
void clear_error(); void clear_error();
const std::string& error() const; const std::string& error() const;
void set_error(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_error(std::string&& value); void set_error(ArgT0&& arg0, ArgT... args);
void set_error(const char* value);
void set_error(const char* value, size_t size);
std::string* mutable_error(); std::string* mutable_error();
std::string* release_error(); std::string* release_error();
void set_allocated_error(std::string* error); void set_allocated_error(std::string* error);
@ -1087,8 +1050,11 @@ inline const std::string& Version::suffix() const {
// @@protoc_insertion_point(field_get:google.protobuf.compiler.Version.suffix) // @@protoc_insertion_point(field_get:google.protobuf.compiler.Version.suffix)
return _internal_suffix(); return _internal_suffix();
} }
inline void Version::set_suffix(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_suffix(value); PROTOBUF_ALWAYS_INLINE
inline void Version::set_suffix(ArgT0&& arg0, ArgT... args) {
_has_bits_[0] |= 0x00000001u;
suffix_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.compiler.Version.suffix) // @@protoc_insertion_point(field_set:google.protobuf.compiler.Version.suffix)
} }
inline std::string* Version::mutable_suffix() { inline std::string* Version::mutable_suffix() {
@ -1102,25 +1068,6 @@ inline void Version::_internal_set_suffix(const std::string& value) {
_has_bits_[0] |= 0x00000001u; _has_bits_[0] |= 0x00000001u;
suffix_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); suffix_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Version::set_suffix(std::string&& value) {
_has_bits_[0] |= 0x00000001u;
suffix_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.compiler.Version.suffix)
}
inline void Version::set_suffix(const char* value) {
GOOGLE_DCHECK(value != nullptr);
_has_bits_[0] |= 0x00000001u;
suffix_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.compiler.Version.suffix)
}
inline void Version::set_suffix(const char* value,
size_t size) {
_has_bits_[0] |= 0x00000001u;
suffix_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.Version.suffix)
}
inline std::string* Version::_internal_mutable_suffix() { inline std::string* Version::_internal_mutable_suffix() {
_has_bits_[0] |= 0x00000001u; _has_bits_[0] |= 0x00000001u;
return suffix_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return suffix_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1238,8 +1185,11 @@ inline const std::string& CodeGeneratorRequest::parameter() const {
// @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorRequest.parameter) // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorRequest.parameter)
return _internal_parameter(); return _internal_parameter();
} }
inline void CodeGeneratorRequest::set_parameter(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_parameter(value); PROTOBUF_ALWAYS_INLINE
inline void CodeGeneratorRequest::set_parameter(ArgT0&& arg0, ArgT... args) {
_has_bits_[0] |= 0x00000001u;
parameter_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorRequest.parameter) // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorRequest.parameter)
} }
inline std::string* CodeGeneratorRequest::mutable_parameter() { inline std::string* CodeGeneratorRequest::mutable_parameter() {
@ -1253,25 +1203,6 @@ inline void CodeGeneratorRequest::_internal_set_parameter(const std::string& val
_has_bits_[0] |= 0x00000001u; _has_bits_[0] |= 0x00000001u;
parameter_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); parameter_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void CodeGeneratorRequest::set_parameter(std::string&& value) {
_has_bits_[0] |= 0x00000001u;
parameter_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.compiler.CodeGeneratorRequest.parameter)
}
inline void CodeGeneratorRequest::set_parameter(const char* value) {
GOOGLE_DCHECK(value != nullptr);
_has_bits_[0] |= 0x00000001u;
parameter_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorRequest.parameter)
}
inline void CodeGeneratorRequest::set_parameter(const char* value,
size_t size) {
_has_bits_[0] |= 0x00000001u;
parameter_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.CodeGeneratorRequest.parameter)
}
inline std::string* CodeGeneratorRequest::_internal_mutable_parameter() { inline std::string* CodeGeneratorRequest::_internal_mutable_parameter() {
_has_bits_[0] |= 0x00000001u; _has_bits_[0] |= 0x00000001u;
return parameter_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return parameter_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1434,8 +1365,11 @@ inline const std::string& CodeGeneratorResponse_File::name() const {
// @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.name) // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.name)
return _internal_name(); return _internal_name();
} }
inline void CodeGeneratorResponse_File::set_name(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_name(value); PROTOBUF_ALWAYS_INLINE
inline void CodeGeneratorResponse_File::set_name(ArgT0&& arg0, ArgT... args) {
_has_bits_[0] |= 0x00000001u;
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.File.name) // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.File.name)
} }
inline std::string* CodeGeneratorResponse_File::mutable_name() { inline std::string* CodeGeneratorResponse_File::mutable_name() {
@ -1449,25 +1383,6 @@ inline void CodeGeneratorResponse_File::_internal_set_name(const std::string& va
_has_bits_[0] |= 0x00000001u; _has_bits_[0] |= 0x00000001u;
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void CodeGeneratorResponse_File::set_name(std::string&& value) {
_has_bits_[0] |= 0x00000001u;
name_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.compiler.CodeGeneratorResponse.File.name)
}
inline void CodeGeneratorResponse_File::set_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
_has_bits_[0] |= 0x00000001u;
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.File.name)
}
inline void CodeGeneratorResponse_File::set_name(const char* value,
size_t size) {
_has_bits_[0] |= 0x00000001u;
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.CodeGeneratorResponse.File.name)
}
inline std::string* CodeGeneratorResponse_File::_internal_mutable_name() { inline std::string* CodeGeneratorResponse_File::_internal_mutable_name() {
_has_bits_[0] |= 0x00000001u; _has_bits_[0] |= 0x00000001u;
return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1507,8 +1422,11 @@ inline const std::string& CodeGeneratorResponse_File::insertion_point() const {
// @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point)
return _internal_insertion_point(); return _internal_insertion_point();
} }
inline void CodeGeneratorResponse_File::set_insertion_point(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_insertion_point(value); PROTOBUF_ALWAYS_INLINE
inline void CodeGeneratorResponse_File::set_insertion_point(ArgT0&& arg0, ArgT... args) {
_has_bits_[0] |= 0x00000002u;
insertion_point_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point)
} }
inline std::string* CodeGeneratorResponse_File::mutable_insertion_point() { inline std::string* CodeGeneratorResponse_File::mutable_insertion_point() {
@ -1522,25 +1440,6 @@ inline void CodeGeneratorResponse_File::_internal_set_insertion_point(const std:
_has_bits_[0] |= 0x00000002u; _has_bits_[0] |= 0x00000002u;
insertion_point_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); insertion_point_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void CodeGeneratorResponse_File::set_insertion_point(std::string&& value) {
_has_bits_[0] |= 0x00000002u;
insertion_point_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point)
}
inline void CodeGeneratorResponse_File::set_insertion_point(const char* value) {
GOOGLE_DCHECK(value != nullptr);
_has_bits_[0] |= 0x00000002u;
insertion_point_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point)
}
inline void CodeGeneratorResponse_File::set_insertion_point(const char* value,
size_t size) {
_has_bits_[0] |= 0x00000002u;
insertion_point_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point)
}
inline std::string* CodeGeneratorResponse_File::_internal_mutable_insertion_point() { inline std::string* CodeGeneratorResponse_File::_internal_mutable_insertion_point() {
_has_bits_[0] |= 0x00000002u; _has_bits_[0] |= 0x00000002u;
return insertion_point_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return insertion_point_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1580,8 +1479,11 @@ inline const std::string& CodeGeneratorResponse_File::content() const {
// @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.content) // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.content)
return _internal_content(); return _internal_content();
} }
inline void CodeGeneratorResponse_File::set_content(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_content(value); PROTOBUF_ALWAYS_INLINE
inline void CodeGeneratorResponse_File::set_content(ArgT0&& arg0, ArgT... args) {
_has_bits_[0] |= 0x00000004u;
content_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.File.content) // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.File.content)
} }
inline std::string* CodeGeneratorResponse_File::mutable_content() { inline std::string* CodeGeneratorResponse_File::mutable_content() {
@ -1595,25 +1497,6 @@ inline void CodeGeneratorResponse_File::_internal_set_content(const std::string&
_has_bits_[0] |= 0x00000004u; _has_bits_[0] |= 0x00000004u;
content_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); content_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void CodeGeneratorResponse_File::set_content(std::string&& value) {
_has_bits_[0] |= 0x00000004u;
content_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.compiler.CodeGeneratorResponse.File.content)
}
inline void CodeGeneratorResponse_File::set_content(const char* value) {
GOOGLE_DCHECK(value != nullptr);
_has_bits_[0] |= 0x00000004u;
content_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.File.content)
}
inline void CodeGeneratorResponse_File::set_content(const char* value,
size_t size) {
_has_bits_[0] |= 0x00000004u;
content_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.CodeGeneratorResponse.File.content)
}
inline std::string* CodeGeneratorResponse_File::_internal_mutable_content() { inline std::string* CodeGeneratorResponse_File::_internal_mutable_content() {
_has_bits_[0] |= 0x00000004u; _has_bits_[0] |= 0x00000004u;
return content_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return content_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1736,8 +1619,11 @@ inline const std::string& CodeGeneratorResponse::error() const {
// @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.error) // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.error)
return _internal_error(); return _internal_error();
} }
inline void CodeGeneratorResponse::set_error(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_error(value); PROTOBUF_ALWAYS_INLINE
inline void CodeGeneratorResponse::set_error(ArgT0&& arg0, ArgT... args) {
_has_bits_[0] |= 0x00000001u;
error_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.error) // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.error)
} }
inline std::string* CodeGeneratorResponse::mutable_error() { inline std::string* CodeGeneratorResponse::mutable_error() {
@ -1751,25 +1637,6 @@ inline void CodeGeneratorResponse::_internal_set_error(const std::string& value)
_has_bits_[0] |= 0x00000001u; _has_bits_[0] |= 0x00000001u;
error_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); error_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void CodeGeneratorResponse::set_error(std::string&& value) {
_has_bits_[0] |= 0x00000001u;
error_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.compiler.CodeGeneratorResponse.error)
}
inline void CodeGeneratorResponse::set_error(const char* value) {
GOOGLE_DCHECK(value != nullptr);
_has_bits_[0] |= 0x00000001u;
error_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.error)
}
inline void CodeGeneratorResponse::set_error(const char* value,
size_t size) {
_has_bits_[0] |= 0x00000001u;
error_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.CodeGeneratorResponse.error)
}
inline std::string* CodeGeneratorResponse::_internal_mutable_error() { inline std::string* CodeGeneratorResponse::_internal_mutable_error() {
_has_bits_[0] |= 0x00000001u; _has_bits_[0] |= 0x00000001u;
return error_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return error_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());

@ -1055,10 +1055,8 @@ const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google
schemas, file_default_instances, TableStruct_google_2fprotobuf_2fdescriptor_2eproto::offsets, schemas, file_default_instances, TableStruct_google_2fprotobuf_2fdescriptor_2eproto::offsets,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fdescriptor_2eproto, file_level_service_descriptors_google_2fprotobuf_2fdescriptor_2eproto, file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fdescriptor_2eproto, file_level_service_descriptors_google_2fprotobuf_2fdescriptor_2eproto,
}; };
PROTOBUF_ATTRIBUTE_WEAK ::PROTOBUF_NAMESPACE_ID::Metadata PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter() {
descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_metadata_getter(int index) { return &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto;
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto);
return descriptor_table_google_2fprotobuf_2fdescriptor_2eproto.file_level_metadata[index];
} }
// Force running AddDescriptors() at dynamic initialization time. // Force running AddDescriptors() at dynamic initialization time.
@ -1424,10 +1422,11 @@ void FileDescriptorSet::InternalSwap(FileDescriptorSet* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata FileDescriptorSet::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata FileDescriptorSet::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[0]);
} }
// =================================================================== // ===================================================================
class FileDescriptorProto::_Internal { class FileDescriptorProto::_Internal {
@ -2077,10 +2076,11 @@ void FileDescriptorProto::InternalSwap(FileDescriptorProto* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata FileDescriptorProto::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata FileDescriptorProto::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[1]);
} }
// =================================================================== // ===================================================================
class DescriptorProto_ExtensionRange::_Internal { class DescriptorProto_ExtensionRange::_Internal {
@ -2372,10 +2372,11 @@ void DescriptorProto_ExtensionRange::InternalSwap(DescriptorProto_ExtensionRange
} }
::PROTOBUF_NAMESPACE_ID::Metadata DescriptorProto_ExtensionRange::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata DescriptorProto_ExtensionRange::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[2]);
} }
// =================================================================== // ===================================================================
class DescriptorProto_ReservedRange::_Internal { class DescriptorProto_ReservedRange::_Internal {
@ -2621,10 +2622,11 @@ void DescriptorProto_ReservedRange::InternalSwap(DescriptorProto_ReservedRange*
} }
::PROTOBUF_NAMESPACE_ID::Metadata DescriptorProto_ReservedRange::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata DescriptorProto_ReservedRange::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[3]);
} }
// =================================================================== // ===================================================================
class DescriptorProto::_Internal { class DescriptorProto::_Internal {
@ -3161,10 +3163,11 @@ void DescriptorProto::InternalSwap(DescriptorProto* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata DescriptorProto::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata DescriptorProto::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[4]);
} }
// =================================================================== // ===================================================================
class ExtensionRangeOptions::_Internal { class ExtensionRangeOptions::_Internal {
@ -3377,10 +3380,11 @@ void ExtensionRangeOptions::InternalSwap(ExtensionRangeOptions* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata ExtensionRangeOptions::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata ExtensionRangeOptions::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[5]);
} }
// =================================================================== // ===================================================================
class FieldDescriptorProto::_Internal { class FieldDescriptorProto::_Internal {
@ -4000,10 +4004,11 @@ void FieldDescriptorProto::InternalSwap(FieldDescriptorProto* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata FieldDescriptorProto::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata FieldDescriptorProto::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[6]);
} }
// =================================================================== // ===================================================================
class OneofDescriptorProto::_Internal { class OneofDescriptorProto::_Internal {
@ -4271,10 +4276,11 @@ void OneofDescriptorProto::InternalSwap(OneofDescriptorProto* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata OneofDescriptorProto::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata OneofDescriptorProto::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[7]);
} }
// =================================================================== // ===================================================================
class EnumDescriptorProto_EnumReservedRange::_Internal { class EnumDescriptorProto_EnumReservedRange::_Internal {
@ -4520,10 +4526,11 @@ void EnumDescriptorProto_EnumReservedRange::InternalSwap(EnumDescriptorProto_Enu
} }
::PROTOBUF_NAMESPACE_ID::Metadata EnumDescriptorProto_EnumReservedRange::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata EnumDescriptorProto_EnumReservedRange::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[8]);
} }
// =================================================================== // ===================================================================
class EnumDescriptorProto::_Internal { class EnumDescriptorProto::_Internal {
@ -4895,10 +4902,11 @@ void EnumDescriptorProto::InternalSwap(EnumDescriptorProto* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata EnumDescriptorProto::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata EnumDescriptorProto::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[9]);
} }
// =================================================================== // ===================================================================
class EnumValueDescriptorProto::_Internal { class EnumValueDescriptorProto::_Internal {
@ -5204,10 +5212,11 @@ void EnumValueDescriptorProto::InternalSwap(EnumValueDescriptorProto* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata EnumValueDescriptorProto::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata EnumValueDescriptorProto::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[10]);
} }
// =================================================================== // ===================================================================
class ServiceDescriptorProto::_Internal { class ServiceDescriptorProto::_Internal {
@ -5508,10 +5517,11 @@ void ServiceDescriptorProto::InternalSwap(ServiceDescriptorProto* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata ServiceDescriptorProto::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata ServiceDescriptorProto::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[11]);
} }
// =================================================================== // ===================================================================
class MethodDescriptorProto::_Internal { class MethodDescriptorProto::_Internal {
@ -5934,10 +5944,11 @@ void MethodDescriptorProto::InternalSwap(MethodDescriptorProto* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata MethodDescriptorProto::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata MethodDescriptorProto::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[12]);
} }
// =================================================================== // ===================================================================
class FileOptions::_Internal { class FileOptions::_Internal {
@ -6913,10 +6924,11 @@ void FileOptions::InternalSwap(FileOptions* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata FileOptions::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata FileOptions::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[13]);
} }
// =================================================================== // ===================================================================
class MessageOptions::_Internal { class MessageOptions::_Internal {
@ -7259,10 +7271,11 @@ void MessageOptions::InternalSwap(MessageOptions* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata MessageOptions::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata MessageOptions::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[14]);
} }
// =================================================================== // ===================================================================
class FieldOptions::_Internal { class FieldOptions::_Internal {
@ -7670,10 +7683,11 @@ void FieldOptions::InternalSwap(FieldOptions* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata FieldOptions::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata FieldOptions::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[15]);
} }
// =================================================================== // ===================================================================
class OneofOptions::_Internal { class OneofOptions::_Internal {
@ -7886,10 +7900,11 @@ void OneofOptions::InternalSwap(OneofOptions* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata OneofOptions::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata OneofOptions::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[16]);
} }
// =================================================================== // ===================================================================
class EnumOptions::_Internal { class EnumOptions::_Internal {
@ -8182,10 +8197,11 @@ void EnumOptions::InternalSwap(EnumOptions* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata EnumOptions::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata EnumOptions::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[17]);
} }
// =================================================================== // ===================================================================
class EnumValueOptions::_Internal { class EnumValueOptions::_Internal {
@ -8435,10 +8451,11 @@ void EnumValueOptions::InternalSwap(EnumValueOptions* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata EnumValueOptions::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata EnumValueOptions::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[18]);
} }
// =================================================================== // ===================================================================
class ServiceOptions::_Internal { class ServiceOptions::_Internal {
@ -8688,10 +8705,11 @@ void ServiceOptions::InternalSwap(ServiceOptions* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata ServiceOptions::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata ServiceOptions::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[19]);
} }
// =================================================================== // ===================================================================
class MethodOptions::_Internal { class MethodOptions::_Internal {
@ -8993,10 +9011,11 @@ void MethodOptions::InternalSwap(MethodOptions* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata MethodOptions::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata MethodOptions::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[20]);
} }
// =================================================================== // ===================================================================
class UninterpretedOption_NamePart::_Internal { class UninterpretedOption_NamePart::_Internal {
@ -9263,10 +9282,11 @@ void UninterpretedOption_NamePart::InternalSwap(UninterpretedOption_NamePart* ot
} }
::PROTOBUF_NAMESPACE_ID::Metadata UninterpretedOption_NamePart::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata UninterpretedOption_NamePart::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[21]);
} }
// =================================================================== // ===================================================================
class UninterpretedOption::_Internal { class UninterpretedOption::_Internal {
@ -9700,10 +9720,11 @@ void UninterpretedOption::InternalSwap(UninterpretedOption* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata UninterpretedOption::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata UninterpretedOption::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[22]);
} }
// =================================================================== // ===================================================================
class SourceCodeInfo_Location::_Internal { class SourceCodeInfo_Location::_Internal {
@ -10085,10 +10106,11 @@ void SourceCodeInfo_Location::InternalSwap(SourceCodeInfo_Location* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata SourceCodeInfo_Location::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata SourceCodeInfo_Location::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[23]);
} }
// =================================================================== // ===================================================================
class SourceCodeInfo::_Internal { class SourceCodeInfo::_Internal {
@ -10279,10 +10301,11 @@ void SourceCodeInfo::InternalSwap(SourceCodeInfo* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata SourceCodeInfo::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata SourceCodeInfo::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[24]);
} }
// =================================================================== // ===================================================================
class GeneratedCodeInfo_Annotation::_Internal { class GeneratedCodeInfo_Annotation::_Internal {
@ -10612,10 +10635,11 @@ void GeneratedCodeInfo_Annotation::InternalSwap(GeneratedCodeInfo_Annotation* ot
} }
::PROTOBUF_NAMESPACE_ID::Metadata GeneratedCodeInfo_Annotation::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata GeneratedCodeInfo_Annotation::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[25]);
} }
// =================================================================== // ===================================================================
class GeneratedCodeInfo::_Internal { class GeneratedCodeInfo::_Internal {
@ -10806,10 +10830,11 @@ void GeneratedCodeInfo::InternalSwap(GeneratedCodeInfo* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata GeneratedCodeInfo::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata GeneratedCodeInfo::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[26]);
} }
// @@protoc_insertion_point(namespace_scope) // @@protoc_insertion_point(namespace_scope)
PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_CLOSE
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN

File diff suppressed because it is too large Load Diff

@ -67,10 +67,8 @@ const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google
schemas, file_default_instances, TableStruct_google_2fprotobuf_2fduration_2eproto::offsets, schemas, file_default_instances, TableStruct_google_2fprotobuf_2fduration_2eproto::offsets,
file_level_metadata_google_2fprotobuf_2fduration_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fduration_2eproto, file_level_service_descriptors_google_2fprotobuf_2fduration_2eproto, file_level_metadata_google_2fprotobuf_2fduration_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fduration_2eproto, file_level_service_descriptors_google_2fprotobuf_2fduration_2eproto,
}; };
PROTOBUF_ATTRIBUTE_WEAK ::PROTOBUF_NAMESPACE_ID::Metadata PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_google_2fprotobuf_2fduration_2eproto_getter() {
descriptor_table_google_2fprotobuf_2fduration_2eproto_metadata_getter(int index) { return &descriptor_table_google_2fprotobuf_2fduration_2eproto;
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fduration_2eproto);
return descriptor_table_google_2fprotobuf_2fduration_2eproto.file_level_metadata[index];
} }
// Force running AddDescriptors() at dynamic initialization time. // Force running AddDescriptors() at dynamic initialization time.
@ -297,10 +295,11 @@ void Duration::InternalSwap(Duration* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Duration::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Duration::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fduration_2eproto_getter, &descriptor_table_google_2fprotobuf_2fduration_2eproto_once,
file_level_metadata_google_2fprotobuf_2fduration_2eproto[0]);
} }
// @@protoc_insertion_point(namespace_scope) // @@protoc_insertion_point(namespace_scope)
PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_CLOSE
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN

@ -53,7 +53,6 @@ struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fduration_2eproto {
static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
}; };
extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fduration_2eproto; extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fduration_2eproto;
PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Metadata descriptor_table_google_2fprotobuf_2fduration_2eproto_metadata_getter(int index);
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN
class Duration; class Duration;
struct DurationDefaultTypeInternal; struct DurationDefaultTypeInternal;
@ -96,10 +95,10 @@ class PROTOBUF_EXPORT Duration PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Duration& default_instance() { static const Duration& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -167,12 +166,6 @@ class PROTOBUF_EXPORT Duration PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fduration_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------

@ -62,10 +62,8 @@ const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google
schemas, file_default_instances, TableStruct_google_2fprotobuf_2fempty_2eproto::offsets, schemas, file_default_instances, TableStruct_google_2fprotobuf_2fempty_2eproto::offsets,
file_level_metadata_google_2fprotobuf_2fempty_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fempty_2eproto, file_level_service_descriptors_google_2fprotobuf_2fempty_2eproto, file_level_metadata_google_2fprotobuf_2fempty_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fempty_2eproto, file_level_service_descriptors_google_2fprotobuf_2fempty_2eproto,
}; };
PROTOBUF_ATTRIBUTE_WEAK ::PROTOBUF_NAMESPACE_ID::Metadata PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_google_2fprotobuf_2fempty_2eproto_getter() {
descriptor_table_google_2fprotobuf_2fempty_2eproto_metadata_getter(int index) { return &descriptor_table_google_2fprotobuf_2fempty_2eproto;
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fempty_2eproto);
return descriptor_table_google_2fprotobuf_2fempty_2eproto.file_level_metadata[index];
} }
// Force running AddDescriptors() at dynamic initialization time. // Force running AddDescriptors() at dynamic initialization time.
@ -225,10 +223,11 @@ void Empty::InternalSwap(Empty* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Empty::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Empty::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fempty_2eproto_getter, &descriptor_table_google_2fprotobuf_2fempty_2eproto_once,
file_level_metadata_google_2fprotobuf_2fempty_2eproto[0]);
} }
// @@protoc_insertion_point(namespace_scope) // @@protoc_insertion_point(namespace_scope)
PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_CLOSE
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN

@ -53,7 +53,6 @@ struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fempty_2eproto {
static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
}; };
extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fempty_2eproto; extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fempty_2eproto;
PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Metadata descriptor_table_google_2fprotobuf_2fempty_2eproto_metadata_getter(int index);
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN
class Empty; class Empty;
struct EmptyDefaultTypeInternal; struct EmptyDefaultTypeInternal;
@ -96,10 +95,10 @@ class PROTOBUF_EXPORT Empty PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Empty& default_instance() { static const Empty& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -167,12 +166,6 @@ class PROTOBUF_EXPORT Empty PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fempty_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------

@ -65,10 +65,8 @@ const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google
schemas, file_default_instances, TableStruct_google_2fprotobuf_2ffield_5fmask_2eproto::offsets, schemas, file_default_instances, TableStruct_google_2fprotobuf_2ffield_5fmask_2eproto::offsets,
file_level_metadata_google_2fprotobuf_2ffield_5fmask_2eproto, file_level_enum_descriptors_google_2fprotobuf_2ffield_5fmask_2eproto, file_level_service_descriptors_google_2fprotobuf_2ffield_5fmask_2eproto, file_level_metadata_google_2fprotobuf_2ffield_5fmask_2eproto, file_level_enum_descriptors_google_2fprotobuf_2ffield_5fmask_2eproto, file_level_service_descriptors_google_2fprotobuf_2ffield_5fmask_2eproto,
}; };
PROTOBUF_ATTRIBUTE_WEAK ::PROTOBUF_NAMESPACE_ID::Metadata PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto_getter() {
descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto_metadata_getter(int index) { return &descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto;
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto);
return descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto.file_level_metadata[index];
} }
// Force running AddDescriptors() at dynamic initialization time. // Force running AddDescriptors() at dynamic initialization time.
@ -270,10 +268,11 @@ void FieldMask::InternalSwap(FieldMask* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata FieldMask::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata FieldMask::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto_getter, &descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto_once,
file_level_metadata_google_2fprotobuf_2ffield_5fmask_2eproto[0]);
} }
// @@protoc_insertion_point(namespace_scope) // @@protoc_insertion_point(namespace_scope)
PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_CLOSE
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN

@ -53,7 +53,6 @@ struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2ffield_5fmask_2eproto {
static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
}; };
extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto; extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto;
PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Metadata descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto_metadata_getter(int index);
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN
class FieldMask; class FieldMask;
struct FieldMaskDefaultTypeInternal; struct FieldMaskDefaultTypeInternal;
@ -96,10 +95,10 @@ class PROTOBUF_EXPORT FieldMask PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const FieldMask& default_instance() { static const FieldMask& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -167,12 +166,6 @@ class PROTOBUF_EXPORT FieldMask PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------

@ -2520,6 +2520,17 @@ void RegisterAllTypesInternal(const Metadata* file_level_metadata, int size) {
namespace internal { namespace internal {
Metadata AssignDescriptors(const DescriptorTable* (*table)(),
internal::once_flag* once,
const Metadata& metadata) {
call_once(*once, [=] {
auto* t = table();
AssignDescriptorsImpl(t, t->is_eager);
});
return metadata;
}
void AssignDescriptors(const DescriptorTable* table, bool eager) { void AssignDescriptors(const DescriptorTable* table, bool eager) {
if (!eager) eager = table->is_eager; if (!eager) eager = table->is_eager;
call_once(*table->once, AssignDescriptorsImpl, table, eager); call_once(*table->once, AssignDescriptorsImpl, table, eager);

@ -290,6 +290,14 @@ enum {
void PROTOBUF_EXPORT AssignDescriptors(const DescriptorTable* table, void PROTOBUF_EXPORT AssignDescriptors(const DescriptorTable* table,
bool eager = false); bool eager = false);
// Overload used to implement GetMetadataStatic in the generated code.
// See comments in compiler/cpp/internal/file.cc as to why.
// It takes a `Metadata` and returns it to allow for tail calls and reduce
// binary size.
Metadata PROTOBUF_EXPORT AssignDescriptors(const DescriptorTable* (*table)(),
internal::once_flag* once,
const Metadata& metadata);
// These cannot be in lite so we put them in the reflection. // These cannot be in lite so we put them in the reflection.
PROTOBUF_EXPORT void UnknownFieldSetSerializer(const uint8* base, uint32 offset, PROTOBUF_EXPORT void UnknownFieldSetSerializer(const uint8* base, uint32 offset,
uint32 tag, uint32 has_offset, uint32 tag, uint32 has_offset,

@ -851,11 +851,11 @@ class PROTOBUF_EXPORT EpsCopyOutputStream {
} }
static constexpr int TagSize(uint32 tag) { static constexpr int TagSize(uint32 tag) {
return (tag < (1 << 7)) return (tag < (1 << 7)) ? 1
? 1 : (tag < (1 << 14)) ? 2
: (tag < (1 << 14)) : (tag < (1 << 21)) ? 3
? 2 : (tag < (1 << 28)) ? 4
: (tag < (1 << 21)) ? 3 : (tag < (1 << 28)) ? 4 : 5; : 5;
} }
PROTOBUF_ALWAYS_INLINE uint8* WriteTag(uint32 num, uint32 wt, uint8* ptr) { PROTOBUF_ALWAYS_INLINE uint8* WriteTag(uint32 num, uint32 wt, uint8* ptr) {
@ -1181,12 +1181,11 @@ class PROTOBUF_EXPORT CodedOutputStream {
// Compile-time equivalent of VarintSize32(). // Compile-time equivalent of VarintSize32().
template <uint32 Value> template <uint32 Value>
struct StaticVarintSize32 { struct StaticVarintSize32 {
static const size_t value = static const size_t value = (Value < (1 << 7)) ? 1
(Value < (1 << 7)) : (Value < (1 << 14)) ? 2
? 1 : (Value < (1 << 21)) ? 3
: (Value < (1 << 14)) : (Value < (1 << 28)) ? 4
? 2 : 5;
: (Value < (1 << 21)) ? 3 : (Value < (1 << 28)) ? 4 : 5;
}; };
// Returns the total number of bytes written since this object was created. // Returns the total number of bytes written since this object was created.

@ -67,7 +67,7 @@ class InternalMetadata {
template <typename T> template <typename T>
void Delete() { void Delete() {
// Note that Delete<> should be called not more than once. // Note that Delete<> should be called not more than once.
if (have_unknown_fields() && arena() == NULL) { if (have_unknown_fields()) {
DeleteOutOfLineHelper<T>(); DeleteOutOfLineHelper<T>();
} }
} }
@ -204,7 +204,9 @@ class InternalMetadata {
template <typename T> template <typename T>
PROTOBUF_NOINLINE void DeleteOutOfLineHelper() { PROTOBUF_NOINLINE void DeleteOutOfLineHelper() {
delete PtrValue<Container<T>>(); if (arena() == NULL) {
delete PtrValue<Container<T>>();
}
} }
template <typename T> template <typename T>

@ -198,22 +198,24 @@
// You can #define these annotations yourself if the default implementation // You can #define these annotations yourself if the default implementation
// is not right for you. // is not right for you.
#ifndef PROTOBUF_NO_INLINE
#ifdef GOOGLE_ATTRIBUTE_ALWAYS_INLINE #ifdef GOOGLE_ATTRIBUTE_ALWAYS_INLINE
#define PROTOBUF_ALWAYS_INLINE GOOGLE_ATTRIBUTE_ALWAYS_INLINE #define PROTOBUF_ALWAYS_INLINE GOOGLE_ATTRIBUTE_ALWAYS_INLINE
#define PROTOBUF_NDEBUG_INLINE GOOGLE_ATTRIBUTE_ALWAYS_INLINE #define PROTOBUF_NDEBUG_INLINE GOOGLE_ATTRIBUTE_ALWAYS_INLINE
#else #elif defined(__GNUC__) && \
#if defined(__GNUC__) && \
(__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
// For functions we want to force inline. // For functions we want to force inline.
// Introduced in gcc 3.1. // Introduced in gcc 3.1.
#define PROTOBUF_ALWAYS_INLINE __attribute__((always_inline)) #define PROTOBUF_ALWAYS_INLINE __attribute__((always_inline))
#define PROTOBUF_NDEBUG_INLINE __attribute__((always_inline)) #define PROTOBUF_NDEBUG_INLINE __attribute__((always_inline))
#else #endif
#endif
#ifndef PROTOBUF_ALWAYS_INLINE
// Other compilers will have to figure it out for themselves. // Other compilers will have to figure it out for themselves.
#define PROTOBUF_ALWAYS_INLINE #define PROTOBUF_ALWAYS_INLINE
#define PROTOBUF_NDEBUG_INLINE #define PROTOBUF_NDEBUG_INLINE
#endif #endif
#endif
#ifdef GOOGLE_ATTRIBUTE_NOINLINE #ifdef GOOGLE_ATTRIBUTE_NOINLINE
#define PROTOBUF_NOINLINE GOOGLE_ATTRIBUTE_NOINLINE #define PROTOBUF_NOINLINE GOOGLE_ATTRIBUTE_NOINLINE

@ -317,6 +317,35 @@ TEST(Proto3OptionalTest, OptionalFieldDescriptor) {
} }
} }
TEST(Proto3OptionalTest, Extensions) {
const DescriptorPool* p = DescriptorPool::generated_pool();
const FieldDescriptor* no_optional = p->FindExtensionByName(
"protobuf_unittest.Proto3OptionalExtensions.ext_no_optional");
const FieldDescriptor* with_optional = p->FindExtensionByName(
"protobuf_unittest.Proto3OptionalExtensions.ext_with_optional");
GOOGLE_CHECK(no_optional);
GOOGLE_CHECK(with_optional);
EXPECT_FALSE(no_optional->has_optional_keyword());
EXPECT_TRUE(with_optional->has_optional_keyword());
const Descriptor* d = protobuf_unittest::Proto3OptionalExtensions::descriptor();
EXPECT_TRUE(d->options().HasExtension(
protobuf_unittest::Proto3OptionalExtensions::ext_no_optional));
EXPECT_TRUE(d->options().HasExtension(
protobuf_unittest::Proto3OptionalExtensions::ext_with_optional));
EXPECT_EQ(8, d->options().GetExtension(
protobuf_unittest::Proto3OptionalExtensions::ext_no_optional));
EXPECT_EQ(16,
d->options().GetExtension(
protobuf_unittest::Proto3OptionalExtensions::ext_with_optional));
const Descriptor* d2 = protobuf_unittest::TestProto3Optional::descriptor();
EXPECT_FALSE(d2->options().HasExtension(
protobuf_unittest::Proto3OptionalExtensions::ext_no_optional));
EXPECT_FALSE(d2->options().HasExtension(
protobuf_unittest::Proto3OptionalExtensions::ext_with_optional));
}
TEST(Proto3OptionalTest, OptionalField) { TEST(Proto3OptionalTest, OptionalField) {
protobuf_unittest::TestProto3Optional msg; protobuf_unittest::TestProto3Optional msg;
EXPECT_FALSE(msg.has_optional_int32()); EXPECT_FALSE(msg.has_optional_int32());

@ -98,6 +98,15 @@ void RepeatedPtrFieldBase::Reserve(int new_size) {
} }
} }
void* RepeatedPtrFieldBase::AddOutOfLineHelper(void* obj) {
if (!rep_ || rep_->allocated_size == total_size_) {
InternalExtend(1); // Equivalent to "Reserve(total_size_ + 1)"
}
++rep_->allocated_size;
rep_->elements[current_size_++] = obj;
return obj;
}
void RepeatedPtrFieldBase::CloseGap(int start, int num) { void RepeatedPtrFieldBase::CloseGap(int start, int num) {
if (rep_ == NULL) return; if (rep_ == NULL) return;
// Close up a gap of "num" elements starting at offset "start". // Close up a gap of "num" elements starting at offset "start".

@ -171,9 +171,14 @@ class RepeatedField final {
public: public:
constexpr RepeatedField(); constexpr RepeatedField();
explicit RepeatedField(Arena* arena); explicit RepeatedField(Arena* arena);
RepeatedField(const RepeatedField& other); RepeatedField(const RepeatedField& other);
template <typename Iter>
RepeatedField(Iter begin, const Iter& end); template <typename Iter,
typename = typename std::enable_if<std::is_constructible<
Element, decltype(*std::declval<Iter>())>::value>::type>
RepeatedField(Iter begin, Iter end);
~RepeatedField(); ~RepeatedField();
RepeatedField& operator=(const RepeatedField& other); RepeatedField& operator=(const RepeatedField& other);
@ -769,6 +774,11 @@ class PROTOBUF_EXPORT RepeatedPtrFieldBase {
// Reserve() and MergeFrom() to reduce code size. |extend_amount| must be > 0. // Reserve() and MergeFrom() to reduce code size. |extend_amount| must be > 0.
void** InternalExtend(int extend_amount); void** InternalExtend(int extend_amount);
// Internal helper for Add: add "obj" as the next element in the
// array, including potentially resizing the array with Reserve if
// needed
void* AddOutOfLineHelper(void* obj);
// The reflection implementation needs to call protected methods directly, // The reflection implementation needs to call protected methods directly,
// reinterpreting pointers as being to Message instead of a specific Message // reinterpreting pointers as being to Message instead of a specific Message
// subclass. // subclass.
@ -923,8 +933,12 @@ class RepeatedPtrField final : private internal::RepeatedPtrFieldBase {
explicit RepeatedPtrField(Arena* arena); explicit RepeatedPtrField(Arena* arena);
RepeatedPtrField(const RepeatedPtrField& other); RepeatedPtrField(const RepeatedPtrField& other);
template <typename Iter>
RepeatedPtrField(Iter begin, const Iter& end); template <typename Iter,
typename = typename std::enable_if<std::is_constructible<
Element, decltype(*std::declval<Iter>())>::value>::type>
RepeatedPtrField(Iter begin, Iter end);
~RepeatedPtrField(); ~RepeatedPtrField();
RepeatedPtrField& operator=(const RepeatedPtrField& other); RepeatedPtrField& operator=(const RepeatedPtrField& other);
@ -1197,8 +1211,8 @@ inline RepeatedField<Element>::RepeatedField(const RepeatedField& other)
} }
template <typename Element> template <typename Element>
template <typename Iter> template <typename Iter, typename>
RepeatedField<Element>::RepeatedField(Iter begin, const Iter& end) RepeatedField<Element>::RepeatedField(Iter begin, Iter end)
: current_size_(0), total_size_(0), arena_or_elements_(nullptr) { : current_size_(0), total_size_(0), arena_or_elements_(nullptr) {
Add(begin, end); Add(begin, end);
} }
@ -1747,14 +1761,10 @@ inline typename TypeHandler::Type* RepeatedPtrFieldBase::Add(
if (rep_ != NULL && current_size_ < rep_->allocated_size) { if (rep_ != NULL && current_size_ < rep_->allocated_size) {
return cast<TypeHandler>(rep_->elements[current_size_++]); return cast<TypeHandler>(rep_->elements[current_size_++]);
} }
if (!rep_ || rep_->allocated_size == total_size_) {
Reserve(total_size_ + 1);
}
++rep_->allocated_size;
typename TypeHandler::Type* result = typename TypeHandler::Type* result =
TypeHandler::NewFromPrototype(prototype, arena_); TypeHandler::NewFromPrototype(prototype, arena_);
rep_->elements[current_size_++] = result; return reinterpret_cast<typename TypeHandler::Type*>(
return result; AddOutOfLineHelper(result));
} }
template <typename TypeHandler, template <typename TypeHandler,
@ -1828,9 +1838,19 @@ template <typename TypeHandler>
void RepeatedPtrFieldBase::MergeFromInnerLoop(void** our_elems, void RepeatedPtrFieldBase::MergeFromInnerLoop(void** our_elems,
void** other_elems, int length, void** other_elems, int length,
int already_allocated) { int already_allocated) {
// Split into two loops, over ranges [0, allocated) and [allocated, length), if (already_allocated < length) {
// to avoid a branch within the loop. Arena* arena = GetArena();
for (int i = 0; i < already_allocated && i < length; i++) { typename TypeHandler::Type* elem_prototype =
reinterpret_cast<typename TypeHandler::Type*>(other_elems[0]);
for (int i = already_allocated; i < length; i++) {
// Allocate a new empty element that we'll merge into below
typename TypeHandler::Type* new_elem =
TypeHandler::NewFromPrototype(elem_prototype, arena);
our_elems[i] = new_elem;
}
}
// Main loop that does the actual merging
for (int i = 0; i < length; i++) {
// Already allocated: use existing element. // Already allocated: use existing element.
typename TypeHandler::Type* other_elem = typename TypeHandler::Type* other_elem =
reinterpret_cast<typename TypeHandler::Type*>(other_elems[i]); reinterpret_cast<typename TypeHandler::Type*>(other_elems[i]);
@ -1838,16 +1858,6 @@ void RepeatedPtrFieldBase::MergeFromInnerLoop(void** our_elems,
reinterpret_cast<typename TypeHandler::Type*>(our_elems[i]); reinterpret_cast<typename TypeHandler::Type*>(our_elems[i]);
TypeHandler::Merge(*other_elem, new_elem); TypeHandler::Merge(*other_elem, new_elem);
} }
Arena* arena = GetArena();
for (int i = already_allocated; i < length; i++) {
// Not allocated: alloc a new element first, then merge it.
typename TypeHandler::Type* other_elem =
reinterpret_cast<typename TypeHandler::Type*>(other_elems[i]);
typename TypeHandler::Type* new_elem =
TypeHandler::NewFromPrototype(other_elem, arena);
TypeHandler::Merge(*other_elem, new_elem);
our_elems[i] = new_elem;
}
} }
template <typename TypeHandler> template <typename TypeHandler>
@ -2110,9 +2120,8 @@ inline RepeatedPtrField<Element>::RepeatedPtrField(
} }
template <typename Element> template <typename Element>
template <typename Iter> template <typename Iter, typename>
inline RepeatedPtrField<Element>::RepeatedPtrField(Iter begin, inline RepeatedPtrField<Element>::RepeatedPtrField(Iter begin, Iter end) {
const Iter& end) {
int reserve = internal::CalculateReserve(begin, end); int reserve = internal::CalculateReserve(begin, end);
if (reserve != -1) { if (reserve != -1) {
Reserve(reserve); Reserve(reserve);

@ -65,10 +65,8 @@ const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google
schemas, file_default_instances, TableStruct_google_2fprotobuf_2fsource_5fcontext_2eproto::offsets, schemas, file_default_instances, TableStruct_google_2fprotobuf_2fsource_5fcontext_2eproto::offsets,
file_level_metadata_google_2fprotobuf_2fsource_5fcontext_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fsource_5fcontext_2eproto, file_level_service_descriptors_google_2fprotobuf_2fsource_5fcontext_2eproto, file_level_metadata_google_2fprotobuf_2fsource_5fcontext_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fsource_5fcontext_2eproto, file_level_service_descriptors_google_2fprotobuf_2fsource_5fcontext_2eproto,
}; };
PROTOBUF_ATTRIBUTE_WEAK ::PROTOBUF_NAMESPACE_ID::Metadata PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto_getter() {
descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto_metadata_getter(int index) { return &descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto;
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto);
return descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto.file_level_metadata[index];
} }
// Force running AddDescriptors() at dynamic initialization time. // Force running AddDescriptors() at dynamic initialization time.
@ -271,10 +269,11 @@ void SourceContext::InternalSwap(SourceContext* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata SourceContext::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata SourceContext::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto_getter, &descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto_once,
file_level_metadata_google_2fprotobuf_2fsource_5fcontext_2eproto[0]);
} }
// @@protoc_insertion_point(namespace_scope) // @@protoc_insertion_point(namespace_scope)
PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_CLOSE
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN

@ -53,7 +53,6 @@ struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fsource_5fcontext_2eproto
static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
}; };
extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto; extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto;
PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Metadata descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto_metadata_getter(int index);
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN
class SourceContext; class SourceContext;
struct SourceContextDefaultTypeInternal; struct SourceContextDefaultTypeInternal;
@ -96,10 +95,10 @@ class PROTOBUF_EXPORT SourceContext PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const SourceContext& default_instance() { static const SourceContext& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -167,12 +166,6 @@ class PROTOBUF_EXPORT SourceContext PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -184,10 +177,8 @@ class PROTOBUF_EXPORT SourceContext PROTOBUF_FINAL :
// string file_name = 1; // string file_name = 1;
void clear_file_name(); void clear_file_name();
const std::string& file_name() const; const std::string& file_name() const;
void set_file_name(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_file_name(std::string&& value); void set_file_name(ArgT0&& arg0, ArgT... args);
void set_file_name(const char* value);
void set_file_name(const char* value, size_t size);
std::string* mutable_file_name(); std::string* mutable_file_name();
std::string* release_file_name(); std::string* release_file_name();
void set_allocated_file_name(std::string* file_name); void set_allocated_file_name(std::string* file_name);
@ -227,8 +218,11 @@ inline const std::string& SourceContext::file_name() const {
// @@protoc_insertion_point(field_get:google.protobuf.SourceContext.file_name) // @@protoc_insertion_point(field_get:google.protobuf.SourceContext.file_name)
return _internal_file_name(); return _internal_file_name();
} }
inline void SourceContext::set_file_name(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_file_name(value); PROTOBUF_ALWAYS_INLINE
inline void SourceContext::set_file_name(ArgT0&& arg0, ArgT... args) {
file_name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.SourceContext.file_name) // @@protoc_insertion_point(field_set:google.protobuf.SourceContext.file_name)
} }
inline std::string* SourceContext::mutable_file_name() { inline std::string* SourceContext::mutable_file_name() {
@ -242,25 +236,6 @@ inline void SourceContext::_internal_set_file_name(const std::string& value) {
file_name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); file_name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void SourceContext::set_file_name(std::string&& value) {
file_name_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.SourceContext.file_name)
}
inline void SourceContext::set_file_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
file_name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.SourceContext.file_name)
}
inline void SourceContext::set_file_name(const char* value,
size_t size) {
file_name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.SourceContext.file_name)
}
inline std::string* SourceContext::_internal_mutable_file_name() { inline std::string* SourceContext::_internal_mutable_file_name() {
return file_name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return file_name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());

@ -143,10 +143,8 @@ const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google
schemas, file_default_instances, TableStruct_google_2fprotobuf_2fstruct_2eproto::offsets, schemas, file_default_instances, TableStruct_google_2fprotobuf_2fstruct_2eproto::offsets,
file_level_metadata_google_2fprotobuf_2fstruct_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fstruct_2eproto, file_level_service_descriptors_google_2fprotobuf_2fstruct_2eproto, file_level_metadata_google_2fprotobuf_2fstruct_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fstruct_2eproto, file_level_service_descriptors_google_2fprotobuf_2fstruct_2eproto,
}; };
PROTOBUF_ATTRIBUTE_WEAK ::PROTOBUF_NAMESPACE_ID::Metadata PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter() {
descriptor_table_google_2fprotobuf_2fstruct_2eproto_metadata_getter(int index) { return &descriptor_table_google_2fprotobuf_2fstruct_2eproto;
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fstruct_2eproto);
return descriptor_table_google_2fprotobuf_2fstruct_2eproto.file_level_metadata[index];
} }
// Force running AddDescriptors() at dynamic initialization time. // Force running AddDescriptors() at dynamic initialization time.
@ -175,7 +173,9 @@ void Struct_FieldsEntry_DoNotUse::MergeFrom(const Struct_FieldsEntry_DoNotUse& o
MergeFromInternal(other); MergeFromInternal(other);
} }
::PROTOBUF_NAMESPACE_ID::Metadata Struct_FieldsEntry_DoNotUse::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Struct_FieldsEntry_DoNotUse::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter, &descriptor_table_google_2fprotobuf_2fstruct_2eproto_once,
file_level_metadata_google_2fprotobuf_2fstruct_2eproto[0]);
} }
void Struct_FieldsEntry_DoNotUse::MergeFrom( void Struct_FieldsEntry_DoNotUse::MergeFrom(
const ::PROTOBUF_NAMESPACE_ID::Message& other) { const ::PROTOBUF_NAMESPACE_ID::Message& other) {
@ -408,10 +408,11 @@ void Struct::InternalSwap(Struct* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Struct::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Struct::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter, &descriptor_table_google_2fprotobuf_2fstruct_2eproto_once,
file_level_metadata_google_2fprotobuf_2fstruct_2eproto[1]);
} }
// =================================================================== // ===================================================================
class Value::_Internal { class Value::_Internal {
@ -847,10 +848,11 @@ void Value::InternalSwap(Value* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Value::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Value::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter, &descriptor_table_google_2fprotobuf_2fstruct_2eproto_once,
file_level_metadata_google_2fprotobuf_2fstruct_2eproto[2]);
} }
// =================================================================== // ===================================================================
class ListValue::_Internal { class ListValue::_Internal {
@ -1041,10 +1043,11 @@ void ListValue::InternalSwap(ListValue* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata ListValue::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata ListValue::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter, &descriptor_table_google_2fprotobuf_2fstruct_2eproto_once,
file_level_metadata_google_2fprotobuf_2fstruct_2eproto[3]);
} }
// @@protoc_insertion_point(namespace_scope) // @@protoc_insertion_point(namespace_scope)
PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_CLOSE
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN

@ -57,7 +57,6 @@ struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fstruct_2eproto {
static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
}; };
extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fstruct_2eproto; extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fstruct_2eproto;
PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Metadata descriptor_table_google_2fprotobuf_2fstruct_2eproto_metadata_getter(int index);
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN
class ListValue; class ListValue;
struct ListValueDefaultTypeInternal; struct ListValueDefaultTypeInternal;
@ -127,13 +126,6 @@ public:
static bool ValidateValue(void*) { return true; } static bool ValidateValue(void*) { return true; }
void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& other) final; void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& other) final;
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_google_2fprotobuf_2fstruct_2eproto);
return ::descriptor_table_google_2fprotobuf_2fstruct_2eproto.file_level_metadata[0];
}
public:
}; };
// ------------------------------------------------------------------- // -------------------------------------------------------------------
@ -168,10 +160,10 @@ class PROTOBUF_EXPORT Struct PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Struct& default_instance() { static const Struct& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -239,12 +231,6 @@ class PROTOBUF_EXPORT Struct PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fstruct_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -318,10 +304,10 @@ class PROTOBUF_EXPORT Value PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Value& default_instance() { static const Value& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -399,12 +385,6 @@ class PROTOBUF_EXPORT Value PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fstruct_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -451,10 +431,8 @@ class PROTOBUF_EXPORT Value PROTOBUF_FINAL :
public: public:
void clear_string_value(); void clear_string_value();
const std::string& string_value() const; const std::string& string_value() const;
void set_string_value(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_string_value(std::string&& value); void set_string_value(ArgT0&& arg0, ArgT... args);
void set_string_value(const char* value);
void set_string_value(const char* value, size_t size);
std::string* mutable_string_value(); std::string* mutable_string_value();
std::string* release_string_value(); std::string* release_string_value();
void set_allocated_string_value(std::string* string_value); void set_allocated_string_value(std::string* string_value);
@ -578,10 +556,10 @@ class PROTOBUF_EXPORT ListValue PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const ListValue& default_instance() { static const ListValue& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -649,12 +627,6 @@ class PROTOBUF_EXPORT ListValue PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fstruct_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -834,8 +806,14 @@ inline const std::string& Value::string_value() const {
// @@protoc_insertion_point(field_get:google.protobuf.Value.string_value) // @@protoc_insertion_point(field_get:google.protobuf.Value.string_value)
return _internal_string_value(); return _internal_string_value();
} }
inline void Value::set_string_value(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_string_value(value); inline void Value::set_string_value(ArgT0&& arg0, ArgT... args) {
if (!_internal_has_string_value()) {
clear_kind();
set_has_string_value();
kind_.string_value_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
kind_.string_value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Value.string_value) // @@protoc_insertion_point(field_set:google.protobuf.Value.string_value)
} }
inline std::string* Value::mutable_string_value() { inline std::string* Value::mutable_string_value() {
@ -856,41 +834,6 @@ inline void Value::_internal_set_string_value(const std::string& value) {
} }
kind_.string_value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); kind_.string_value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Value::set_string_value(std::string&& value) {
// @@protoc_insertion_point(field_set:google.protobuf.Value.string_value)
if (!_internal_has_string_value()) {
clear_kind();
set_has_string_value();
kind_.string_value_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
kind_.string_value_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Value.string_value)
}
inline void Value::set_string_value(const char* value) {
GOOGLE_DCHECK(value != nullptr);
if (!_internal_has_string_value()) {
clear_kind();
set_has_string_value();
kind_.string_value_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
kind_.string_value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{},
::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Value.string_value)
}
inline void Value::set_string_value(const char* value,
size_t size) {
if (!_internal_has_string_value()) {
clear_kind();
set_has_string_value();
kind_.string_value_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
kind_.string_value_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size),
GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Value.string_value)
}
inline std::string* Value::_internal_mutable_string_value() { inline std::string* Value::_internal_mutable_string_value() {
if (!_internal_has_string_value()) { if (!_internal_has_string_value()) {
clear_kind(); clear_kind();

@ -67,10 +67,8 @@ const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google
schemas, file_default_instances, TableStruct_google_2fprotobuf_2ftimestamp_2eproto::offsets, schemas, file_default_instances, TableStruct_google_2fprotobuf_2ftimestamp_2eproto::offsets,
file_level_metadata_google_2fprotobuf_2ftimestamp_2eproto, file_level_enum_descriptors_google_2fprotobuf_2ftimestamp_2eproto, file_level_service_descriptors_google_2fprotobuf_2ftimestamp_2eproto, file_level_metadata_google_2fprotobuf_2ftimestamp_2eproto, file_level_enum_descriptors_google_2fprotobuf_2ftimestamp_2eproto, file_level_service_descriptors_google_2fprotobuf_2ftimestamp_2eproto,
}; };
PROTOBUF_ATTRIBUTE_WEAK ::PROTOBUF_NAMESPACE_ID::Metadata PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_google_2fprotobuf_2ftimestamp_2eproto_getter() {
descriptor_table_google_2fprotobuf_2ftimestamp_2eproto_metadata_getter(int index) { return &descriptor_table_google_2fprotobuf_2ftimestamp_2eproto;
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2ftimestamp_2eproto);
return descriptor_table_google_2fprotobuf_2ftimestamp_2eproto.file_level_metadata[index];
} }
// Force running AddDescriptors() at dynamic initialization time. // Force running AddDescriptors() at dynamic initialization time.
@ -297,10 +295,11 @@ void Timestamp::InternalSwap(Timestamp* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Timestamp::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Timestamp::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2ftimestamp_2eproto_getter, &descriptor_table_google_2fprotobuf_2ftimestamp_2eproto_once,
file_level_metadata_google_2fprotobuf_2ftimestamp_2eproto[0]);
} }
// @@protoc_insertion_point(namespace_scope) // @@protoc_insertion_point(namespace_scope)
PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_CLOSE
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN

@ -53,7 +53,6 @@ struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2ftimestamp_2eproto {
static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
}; };
extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2ftimestamp_2eproto; extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2ftimestamp_2eproto;
PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Metadata descriptor_table_google_2fprotobuf_2ftimestamp_2eproto_metadata_getter(int index);
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN
class Timestamp; class Timestamp;
struct TimestampDefaultTypeInternal; struct TimestampDefaultTypeInternal;
@ -96,10 +95,10 @@ class PROTOBUF_EXPORT Timestamp PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Timestamp& default_instance() { static const Timestamp& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -167,12 +166,6 @@ class PROTOBUF_EXPORT Timestamp PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2ftimestamp_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------

@ -229,10 +229,8 @@ const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google
schemas, file_default_instances, TableStruct_google_2fprotobuf_2ftype_2eproto::offsets, schemas, file_default_instances, TableStruct_google_2fprotobuf_2ftype_2eproto::offsets,
file_level_metadata_google_2fprotobuf_2ftype_2eproto, file_level_enum_descriptors_google_2fprotobuf_2ftype_2eproto, file_level_service_descriptors_google_2fprotobuf_2ftype_2eproto, file_level_metadata_google_2fprotobuf_2ftype_2eproto, file_level_enum_descriptors_google_2fprotobuf_2ftype_2eproto, file_level_service_descriptors_google_2fprotobuf_2ftype_2eproto,
}; };
PROTOBUF_ATTRIBUTE_WEAK ::PROTOBUF_NAMESPACE_ID::Metadata PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_google_2fprotobuf_2ftype_2eproto_getter() {
descriptor_table_google_2fprotobuf_2ftype_2eproto_metadata_getter(int index) { return &descriptor_table_google_2fprotobuf_2ftype_2eproto;
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2ftype_2eproto);
return descriptor_table_google_2fprotobuf_2ftype_2eproto.file_level_metadata[index];
} }
// Force running AddDescriptors() at dynamic initialization time. // Force running AddDescriptors() at dynamic initialization time.
@ -712,10 +710,11 @@ void Type::InternalSwap(Type* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Type::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Type::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2ftype_2eproto_getter, &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
file_level_metadata_google_2fprotobuf_2ftype_2eproto[0]);
} }
// =================================================================== // ===================================================================
class Field::_Internal { class Field::_Internal {
@ -1189,10 +1188,11 @@ void Field::InternalSwap(Field* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Field::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Field::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2ftype_2eproto_getter, &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
file_level_metadata_google_2fprotobuf_2ftype_2eproto[1]);
} }
// =================================================================== // ===================================================================
class Enum::_Internal { class Enum::_Internal {
@ -1535,10 +1535,11 @@ void Enum::InternalSwap(Enum* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Enum::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Enum::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2ftype_2eproto_getter, &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
file_level_metadata_google_2fprotobuf_2ftype_2eproto[2]);
} }
// =================================================================== // ===================================================================
class EnumValue::_Internal { class EnumValue::_Internal {
@ -1794,10 +1795,11 @@ void EnumValue::InternalSwap(EnumValue* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata EnumValue::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata EnumValue::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2ftype_2eproto_getter, &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
file_level_metadata_google_2fprotobuf_2ftype_2eproto[3]);
} }
// =================================================================== // ===================================================================
class Option::_Internal { class Option::_Internal {
@ -2042,10 +2044,11 @@ void Option::InternalSwap(Option* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Option::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Option::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2ftype_2eproto_getter, &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
file_level_metadata_google_2fprotobuf_2ftype_2eproto[4]);
} }
// @@protoc_insertion_point(namespace_scope) // @@protoc_insertion_point(namespace_scope)
PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_CLOSE
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN

@ -56,7 +56,6 @@ struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2ftype_2eproto {
static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
}; };
extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2ftype_2eproto; extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2ftype_2eproto;
PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Metadata descriptor_table_google_2fprotobuf_2ftype_2eproto_metadata_getter(int index);
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN
class Enum; class Enum;
struct EnumDefaultTypeInternal; struct EnumDefaultTypeInternal;
@ -209,10 +208,10 @@ class PROTOBUF_EXPORT Type PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Type& default_instance() { static const Type& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -280,12 +279,6 @@ class PROTOBUF_EXPORT Type PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2ftype_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -362,10 +355,8 @@ class PROTOBUF_EXPORT Type PROTOBUF_FINAL :
// string name = 1; // string name = 1;
void clear_name(); void clear_name();
const std::string& name() const; const std::string& name() const;
void set_name(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_name(std::string&& value); void set_name(ArgT0&& arg0, ArgT... args);
void set_name(const char* value);
void set_name(const char* value, size_t size);
std::string* mutable_name(); std::string* mutable_name();
std::string* release_name(); std::string* release_name();
void set_allocated_name(std::string* name); void set_allocated_name(std::string* name);
@ -450,10 +441,10 @@ class PROTOBUF_EXPORT Field PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Field& default_instance() { static const Field& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -521,12 +512,6 @@ class PROTOBUF_EXPORT Field PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2ftype_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -663,10 +648,8 @@ class PROTOBUF_EXPORT Field PROTOBUF_FINAL :
// string name = 4; // string name = 4;
void clear_name(); void clear_name();
const std::string& name() const; const std::string& name() const;
void set_name(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_name(std::string&& value); void set_name(ArgT0&& arg0, ArgT... args);
void set_name(const char* value);
void set_name(const char* value, size_t size);
std::string* mutable_name(); std::string* mutable_name();
std::string* release_name(); std::string* release_name();
void set_allocated_name(std::string* name); void set_allocated_name(std::string* name);
@ -679,10 +662,8 @@ class PROTOBUF_EXPORT Field PROTOBUF_FINAL :
// string type_url = 6; // string type_url = 6;
void clear_type_url(); void clear_type_url();
const std::string& type_url() const; const std::string& type_url() const;
void set_type_url(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_type_url(std::string&& value); void set_type_url(ArgT0&& arg0, ArgT... args);
void set_type_url(const char* value);
void set_type_url(const char* value, size_t size);
std::string* mutable_type_url(); std::string* mutable_type_url();
std::string* release_type_url(); std::string* release_type_url();
void set_allocated_type_url(std::string* type_url); void set_allocated_type_url(std::string* type_url);
@ -695,10 +676,8 @@ class PROTOBUF_EXPORT Field PROTOBUF_FINAL :
// string json_name = 10; // string json_name = 10;
void clear_json_name(); void clear_json_name();
const std::string& json_name() const; const std::string& json_name() const;
void set_json_name(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_json_name(std::string&& value); void set_json_name(ArgT0&& arg0, ArgT... args);
void set_json_name(const char* value);
void set_json_name(const char* value, size_t size);
std::string* mutable_json_name(); std::string* mutable_json_name();
std::string* release_json_name(); std::string* release_json_name();
void set_allocated_json_name(std::string* json_name); void set_allocated_json_name(std::string* json_name);
@ -711,10 +690,8 @@ class PROTOBUF_EXPORT Field PROTOBUF_FINAL :
// string default_value = 11; // string default_value = 11;
void clear_default_value(); void clear_default_value();
const std::string& default_value() const; const std::string& default_value() const;
void set_default_value(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_default_value(std::string&& value); void set_default_value(ArgT0&& arg0, ArgT... args);
void set_default_value(const char* value);
void set_default_value(const char* value, size_t size);
std::string* mutable_default_value(); std::string* mutable_default_value();
std::string* release_default_value(); std::string* release_default_value();
void set_allocated_default_value(std::string* default_value); void set_allocated_default_value(std::string* default_value);
@ -821,10 +798,10 @@ class PROTOBUF_EXPORT Enum PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Enum& default_instance() { static const Enum& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -892,12 +869,6 @@ class PROTOBUF_EXPORT Enum PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2ftype_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -949,10 +920,8 @@ class PROTOBUF_EXPORT Enum PROTOBUF_FINAL :
// string name = 1; // string name = 1;
void clear_name(); void clear_name();
const std::string& name() const; const std::string& name() const;
void set_name(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_name(std::string&& value); void set_name(ArgT0&& arg0, ArgT... args);
void set_name(const char* value);
void set_name(const char* value, size_t size);
std::string* mutable_name(); std::string* mutable_name();
std::string* release_name(); std::string* release_name();
void set_allocated_name(std::string* name); void set_allocated_name(std::string* name);
@ -1036,10 +1005,10 @@ class PROTOBUF_EXPORT EnumValue PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const EnumValue& default_instance() { static const EnumValue& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -1107,12 +1076,6 @@ class PROTOBUF_EXPORT EnumValue PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2ftype_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -1144,10 +1107,8 @@ class PROTOBUF_EXPORT EnumValue PROTOBUF_FINAL :
// string name = 1; // string name = 1;
void clear_name(); void clear_name();
const std::string& name() const; const std::string& name() const;
void set_name(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_name(std::string&& value); void set_name(ArgT0&& arg0, ArgT... args);
void set_name(const char* value);
void set_name(const char* value, size_t size);
std::string* mutable_name(); std::string* mutable_name();
std::string* release_name(); std::string* release_name();
void set_allocated_name(std::string* name); void set_allocated_name(std::string* name);
@ -1211,10 +1172,10 @@ class PROTOBUF_EXPORT Option PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Option& default_instance() { static const Option& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -1282,12 +1243,6 @@ class PROTOBUF_EXPORT Option PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2ftype_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -1300,10 +1255,8 @@ class PROTOBUF_EXPORT Option PROTOBUF_FINAL :
// string name = 1; // string name = 1;
void clear_name(); void clear_name();
const std::string& name() const; const std::string& name() const;
void set_name(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_name(std::string&& value); void set_name(ArgT0&& arg0, ArgT... args);
void set_name(const char* value);
void set_name(const char* value, size_t size);
std::string* mutable_name(); std::string* mutable_name();
std::string* release_name(); std::string* release_name();
void set_allocated_name(std::string* name); void set_allocated_name(std::string* name);
@ -1362,8 +1315,11 @@ inline const std::string& Type::name() const {
// @@protoc_insertion_point(field_get:google.protobuf.Type.name) // @@protoc_insertion_point(field_get:google.protobuf.Type.name)
return _internal_name(); return _internal_name();
} }
inline void Type::set_name(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_name(value); PROTOBUF_ALWAYS_INLINE
inline void Type::set_name(ArgT0&& arg0, ArgT... args) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Type.name) // @@protoc_insertion_point(field_set:google.protobuf.Type.name)
} }
inline std::string* Type::mutable_name() { inline std::string* Type::mutable_name() {
@ -1377,25 +1333,6 @@ inline void Type::_internal_set_name(const std::string& value) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Type::set_name(std::string&& value) {
name_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Type.name)
}
inline void Type::set_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Type.name)
}
inline void Type::set_name(const char* value,
size_t size) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Type.name)
}
inline std::string* Type::_internal_mutable_name() { inline std::string* Type::_internal_mutable_name() {
return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1736,8 +1673,11 @@ inline const std::string& Field::name() const {
// @@protoc_insertion_point(field_get:google.protobuf.Field.name) // @@protoc_insertion_point(field_get:google.protobuf.Field.name)
return _internal_name(); return _internal_name();
} }
inline void Field::set_name(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_name(value); PROTOBUF_ALWAYS_INLINE
inline void Field::set_name(ArgT0&& arg0, ArgT... args) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Field.name) // @@protoc_insertion_point(field_set:google.protobuf.Field.name)
} }
inline std::string* Field::mutable_name() { inline std::string* Field::mutable_name() {
@ -1751,25 +1691,6 @@ inline void Field::_internal_set_name(const std::string& value) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Field::set_name(std::string&& value) {
name_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Field.name)
}
inline void Field::set_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Field.name)
}
inline void Field::set_name(const char* value,
size_t size) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Field.name)
}
inline std::string* Field::_internal_mutable_name() { inline std::string* Field::_internal_mutable_name() {
return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1797,8 +1718,11 @@ inline const std::string& Field::type_url() const {
// @@protoc_insertion_point(field_get:google.protobuf.Field.type_url) // @@protoc_insertion_point(field_get:google.protobuf.Field.type_url)
return _internal_type_url(); return _internal_type_url();
} }
inline void Field::set_type_url(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_type_url(value); PROTOBUF_ALWAYS_INLINE
inline void Field::set_type_url(ArgT0&& arg0, ArgT... args) {
type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Field.type_url) // @@protoc_insertion_point(field_set:google.protobuf.Field.type_url)
} }
inline std::string* Field::mutable_type_url() { inline std::string* Field::mutable_type_url() {
@ -1812,25 +1736,6 @@ inline void Field::_internal_set_type_url(const std::string& value) {
type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Field::set_type_url(std::string&& value) {
type_url_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Field.type_url)
}
inline void Field::set_type_url(const char* value) {
GOOGLE_DCHECK(value != nullptr);
type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Field.type_url)
}
inline void Field::set_type_url(const char* value,
size_t size) {
type_url_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Field.type_url)
}
inline std::string* Field::_internal_mutable_type_url() { inline std::string* Field::_internal_mutable_type_url() {
return type_url_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return type_url_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1937,8 +1842,11 @@ inline const std::string& Field::json_name() const {
// @@protoc_insertion_point(field_get:google.protobuf.Field.json_name) // @@protoc_insertion_point(field_get:google.protobuf.Field.json_name)
return _internal_json_name(); return _internal_json_name();
} }
inline void Field::set_json_name(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_json_name(value); PROTOBUF_ALWAYS_INLINE
inline void Field::set_json_name(ArgT0&& arg0, ArgT... args) {
json_name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Field.json_name) // @@protoc_insertion_point(field_set:google.protobuf.Field.json_name)
} }
inline std::string* Field::mutable_json_name() { inline std::string* Field::mutable_json_name() {
@ -1952,25 +1860,6 @@ inline void Field::_internal_set_json_name(const std::string& value) {
json_name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); json_name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Field::set_json_name(std::string&& value) {
json_name_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Field.json_name)
}
inline void Field::set_json_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
json_name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Field.json_name)
}
inline void Field::set_json_name(const char* value,
size_t size) {
json_name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Field.json_name)
}
inline std::string* Field::_internal_mutable_json_name() { inline std::string* Field::_internal_mutable_json_name() {
return json_name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return json_name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1998,8 +1887,11 @@ inline const std::string& Field::default_value() const {
// @@protoc_insertion_point(field_get:google.protobuf.Field.default_value) // @@protoc_insertion_point(field_get:google.protobuf.Field.default_value)
return _internal_default_value(); return _internal_default_value();
} }
inline void Field::set_default_value(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_default_value(value); PROTOBUF_ALWAYS_INLINE
inline void Field::set_default_value(ArgT0&& arg0, ArgT... args) {
default_value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Field.default_value) // @@protoc_insertion_point(field_set:google.protobuf.Field.default_value)
} }
inline std::string* Field::mutable_default_value() { inline std::string* Field::mutable_default_value() {
@ -2013,25 +1905,6 @@ inline void Field::_internal_set_default_value(const std::string& value) {
default_value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); default_value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Field::set_default_value(std::string&& value) {
default_value_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Field.default_value)
}
inline void Field::set_default_value(const char* value) {
GOOGLE_DCHECK(value != nullptr);
default_value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Field.default_value)
}
inline void Field::set_default_value(const char* value,
size_t size) {
default_value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Field.default_value)
}
inline std::string* Field::_internal_mutable_default_value() { inline std::string* Field::_internal_mutable_default_value() {
return default_value_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return default_value_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -2063,8 +1936,11 @@ inline const std::string& Enum::name() const {
// @@protoc_insertion_point(field_get:google.protobuf.Enum.name) // @@protoc_insertion_point(field_get:google.protobuf.Enum.name)
return _internal_name(); return _internal_name();
} }
inline void Enum::set_name(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_name(value); PROTOBUF_ALWAYS_INLINE
inline void Enum::set_name(ArgT0&& arg0, ArgT... args) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Enum.name) // @@protoc_insertion_point(field_set:google.protobuf.Enum.name)
} }
inline std::string* Enum::mutable_name() { inline std::string* Enum::mutable_name() {
@ -2078,25 +1954,6 @@ inline void Enum::_internal_set_name(const std::string& value) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Enum::set_name(std::string&& value) {
name_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Enum.name)
}
inline void Enum::set_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Enum.name)
}
inline void Enum::set_name(const char* value,
size_t size) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Enum.name)
}
inline std::string* Enum::_internal_mutable_name() { inline std::string* Enum::_internal_mutable_name() {
return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -2303,8 +2160,11 @@ inline const std::string& EnumValue::name() const {
// @@protoc_insertion_point(field_get:google.protobuf.EnumValue.name) // @@protoc_insertion_point(field_get:google.protobuf.EnumValue.name)
return _internal_name(); return _internal_name();
} }
inline void EnumValue::set_name(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_name(value); PROTOBUF_ALWAYS_INLINE
inline void EnumValue::set_name(ArgT0&& arg0, ArgT... args) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.EnumValue.name) // @@protoc_insertion_point(field_set:google.protobuf.EnumValue.name)
} }
inline std::string* EnumValue::mutable_name() { inline std::string* EnumValue::mutable_name() {
@ -2318,25 +2178,6 @@ inline void EnumValue::_internal_set_name(const std::string& value) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void EnumValue::set_name(std::string&& value) {
name_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.EnumValue.name)
}
inline void EnumValue::set_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.EnumValue.name)
}
inline void EnumValue::set_name(const char* value,
size_t size) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.EnumValue.name)
}
inline std::string* EnumValue::_internal_mutable_name() { inline std::string* EnumValue::_internal_mutable_name() {
return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -2427,8 +2268,11 @@ inline const std::string& Option::name() const {
// @@protoc_insertion_point(field_get:google.protobuf.Option.name) // @@protoc_insertion_point(field_get:google.protobuf.Option.name)
return _internal_name(); return _internal_name();
} }
inline void Option::set_name(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_name(value); PROTOBUF_ALWAYS_INLINE
inline void Option::set_name(ArgT0&& arg0, ArgT... args) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Option.name) // @@protoc_insertion_point(field_set:google.protobuf.Option.name)
} }
inline std::string* Option::mutable_name() { inline std::string* Option::mutable_name() {
@ -2442,25 +2286,6 @@ inline void Option::_internal_set_name(const std::string& value) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void Option::set_name(std::string&& value) {
name_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.Option.name)
}
inline void Option::set_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.Option.name)
}
inline void Option::set_name(const char* value,
size_t size) {
name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Option.name)
}
inline std::string* Option::_internal_mutable_name() { inline std::string* Option::_internal_mutable_name() {
return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());

@ -494,3 +494,8 @@ message DupEnum {
BAR2 = 2; BAR2 = 2;
} }
} }
message RecursiveMessage {
optional RecursiveMessage recurse = 1;
optional bytes payload = 2;
}

@ -32,6 +32,8 @@ syntax = "proto3";
package protobuf_unittest; package protobuf_unittest;
import "google/protobuf/descriptor.proto";
option java_multiple_files = true; option java_multiple_files = true;
option java_package = "com.google.protobuf.testing.proto"; option java_package = "com.google.protobuf.testing.proto";
@ -86,3 +88,13 @@ message TestProto3OptionalMessage {
NestedMessage nested_message = 1; NestedMessage nested_message = 1;
optional NestedMessage optional_nested_message = 2; optional NestedMessage optional_nested_message = 2;
} }
message Proto3OptionalExtensions {
option (protobuf_unittest.Proto3OptionalExtensions.ext_no_optional) = 8;
option (protobuf_unittest.Proto3OptionalExtensions.ext_with_optional) = 16;
extend google.protobuf.MessageOptions {
int32 ext_no_optional = 355886728;
optional int32 ext_with_optional = 355886729;
}
}

@ -31,6 +31,8 @@
#ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_CONSTANTS_H__ #ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_CONSTANTS_H__
#define GOOGLE_PROTOBUF_UTIL_CONVERTER_CONSTANTS_H__ #define GOOGLE_PROTOBUF_UTIL_CONVERTER_CONSTANTS_H__
#include <cstdint>
#include <google/protobuf/stubs/common.h> #include <google/protobuf/stubs/common.h>
// This file contains constants used by //net/proto2/util/converter. // This file contains constants used by //net/proto2/util/converter.
@ -50,19 +52,19 @@ const char kRfc3339TimeFormat[] = "%E4Y-%m-%dT%H:%M:%S";
const char kRfc3339TimeFormatNoPadding[] = "%Y-%m-%dT%H:%M:%S"; const char kRfc3339TimeFormatNoPadding[] = "%Y-%m-%dT%H:%M:%S";
// Minimum seconds allowed in a google.protobuf.Timestamp value. // Minimum seconds allowed in a google.protobuf.Timestamp value.
const int64 kTimestampMinSeconds = -62135596800LL; const int64_t kTimestampMinSeconds = -62135596800LL;
// Maximum seconds allowed in a google.protobuf.Timestamp value. // Maximum seconds allowed in a google.protobuf.Timestamp value.
const int64 kTimestampMaxSeconds = 253402300799LL; const int64_t kTimestampMaxSeconds = 253402300799LL;
// Minimum seconds allowed in a google.protobuf.Duration value. // Minimum seconds allowed in a google.protobuf.Duration value.
const int64 kDurationMinSeconds = -315576000000LL; const int64_t kDurationMinSeconds = -315576000000LL;
// Maximum seconds allowed in a google.protobuf.Duration value. // Maximum seconds allowed in a google.protobuf.Duration value.
const int64 kDurationMaxSeconds = 315576000000LL; const int64_t kDurationMaxSeconds = 315576000000LL;
// Nano seconds in a second. // Nano seconds in a second.
const int32 kNanosPerSecond = 1000000000; const int32_t kNanosPerSecond = 1000000000;
// Type url representing NULL values in google.protobuf.Struct type. // Type url representing NULL values in google.protobuf.Struct type.
const char kStructNullValueTypeUrl[] = const char kStructNullValueTypeUrl[] =

@ -31,6 +31,7 @@
#include <google/protobuf/util/internal/datapiece.h> #include <google/protobuf/util/internal/datapiece.h>
#include <cmath> #include <cmath>
#include <cstdint>
#include <limits> #include <limits>
#include <google/protobuf/struct.pb.h> #include <google/protobuf/struct.pb.h>
@ -114,54 +115,56 @@ util::StatusOr<float> DoubleToFloat(double before) {
} // namespace } // namespace
util::StatusOr<int32> DataPiece::ToInt32() const { util::StatusOr<int32_t> DataPiece::ToInt32() const {
if (type_ == TYPE_STRING) return StringToNumber<int32>(safe_strto32); if (type_ == TYPE_STRING)
return StringToNumber<int32_t>(safe_strto32);
if (type_ == TYPE_DOUBLE) if (type_ == TYPE_DOUBLE)
return FloatingPointToIntConvertAndCheck<int32, double>(double_); return FloatingPointToIntConvertAndCheck<int32_t, double>(double_);
if (type_ == TYPE_FLOAT) if (type_ == TYPE_FLOAT)
return FloatingPointToIntConvertAndCheck<int32, float>(float_); return FloatingPointToIntConvertAndCheck<int32_t, float>(float_);
return GenericConvert<int32>(); return GenericConvert<int32_t>();
} }
util::StatusOr<uint32> DataPiece::ToUint32() const { util::StatusOr<uint32_t> DataPiece::ToUint32() const {
if (type_ == TYPE_STRING) if (type_ == TYPE_STRING)
return StringToNumber<uint32>(safe_strtou32); return StringToNumber<uint32_t>(safe_strtou32);
if (type_ == TYPE_DOUBLE) if (type_ == TYPE_DOUBLE)
return FloatingPointToIntConvertAndCheck<uint32, double>(double_); return FloatingPointToIntConvertAndCheck<uint32_t, double>(double_);
if (type_ == TYPE_FLOAT) if (type_ == TYPE_FLOAT)
return FloatingPointToIntConvertAndCheck<uint32, float>(float_); return FloatingPointToIntConvertAndCheck<uint32_t, float>(float_);
return GenericConvert<uint32>(); return GenericConvert<uint32_t>();
} }
util::StatusOr<int64> DataPiece::ToInt64() const { util::StatusOr<int64_t> DataPiece::ToInt64() const {
if (type_ == TYPE_STRING) return StringToNumber<int64>(safe_strto64); if (type_ == TYPE_STRING)
return StringToNumber<int64_t>(safe_strto64);
if (type_ == TYPE_DOUBLE) if (type_ == TYPE_DOUBLE)
return FloatingPointToIntConvertAndCheck<int64, double>(double_); return FloatingPointToIntConvertAndCheck<int64_t, double>(double_);
if (type_ == TYPE_FLOAT) if (type_ == TYPE_FLOAT)
return FloatingPointToIntConvertAndCheck<int64, float>(float_); return FloatingPointToIntConvertAndCheck<int64_t, float>(float_);
return GenericConvert<int64>(); return GenericConvert<int64_t>();
} }
util::StatusOr<uint64> DataPiece::ToUint64() const { util::StatusOr<uint64_t> DataPiece::ToUint64() const {
if (type_ == TYPE_STRING) if (type_ == TYPE_STRING)
return StringToNumber<uint64>(safe_strtou64); return StringToNumber<uint64_t>(safe_strtou64);
if (type_ == TYPE_DOUBLE) if (type_ == TYPE_DOUBLE)
return FloatingPointToIntConvertAndCheck<uint64, double>(double_); return FloatingPointToIntConvertAndCheck<uint64_t, double>(double_);
if (type_ == TYPE_FLOAT) if (type_ == TYPE_FLOAT)
return FloatingPointToIntConvertAndCheck<uint64, float>(float_); return FloatingPointToIntConvertAndCheck<uint64_t, float>(float_);
return GenericConvert<uint64>(); return GenericConvert<uint64_t>();
} }
util::StatusOr<double> DataPiece::ToDouble() const { util::StatusOr<double> DataPiece::ToDouble() const {
@ -286,7 +289,7 @@ util::StatusOr<int> DataPiece::ToEnum(const google::protobuf::Enum* enum_type,
if (value != nullptr) return value->number(); if (value != nullptr) return value->number();
// Check if int version of enum is sent as string. // Check if int version of enum is sent as string.
util::StatusOr<int32> int_value = ToInt32(); util::StatusOr<int32_t> int_value = ToInt32();
if (int_value.ok()) { if (int_value.ok()) {
if (const google::protobuf::EnumValue* enum_value = if (const google::protobuf::EnumValue* enum_value =
FindEnumValueByNumberOrNull(enum_type, int_value.value())) { FindEnumValueByNumberOrNull(enum_type, int_value.value())) {
@ -334,13 +337,13 @@ template <typename To>
util::StatusOr<To> DataPiece::GenericConvert() const { util::StatusOr<To> DataPiece::GenericConvert() const {
switch (type_) { switch (type_) {
case TYPE_INT32: case TYPE_INT32:
return NumberConvertAndCheck<To, int32>(i32_); return NumberConvertAndCheck<To, int32_t>(i32_);
case TYPE_INT64: case TYPE_INT64:
return NumberConvertAndCheck<To, int64>(i64_); return NumberConvertAndCheck<To, int64_t>(i64_);
case TYPE_UINT32: case TYPE_UINT32:
return NumberConvertAndCheck<To, uint32>(u32_); return NumberConvertAndCheck<To, uint32_t>(u32_);
case TYPE_UINT64: case TYPE_UINT64:
return NumberConvertAndCheck<To, uint64>(u64_); return NumberConvertAndCheck<To, uint64_t>(u64_);
case TYPE_DOUBLE: case TYPE_DOUBLE:
return NumberConvertAndCheck<To, double>(double_); return NumberConvertAndCheck<To, double>(double_);
case TYPE_FLOAT: case TYPE_FLOAT:

@ -31,6 +31,7 @@
#ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_DATAPIECE_H__ #ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_DATAPIECE_H__
#define GOOGLE_PROTOBUF_UTIL_CONVERTER_DATAPIECE_H__ #define GOOGLE_PROTOBUF_UTIL_CONVERTER_DATAPIECE_H__
#include <cstdint>
#include <string> #include <string>
#include <google/protobuf/stubs/common.h> #include <google/protobuf/stubs/common.h>
@ -75,13 +76,13 @@ class PROTOBUF_EXPORT DataPiece {
}; };
// Constructors and Destructor // Constructors and Destructor
explicit DataPiece(const int32 value) explicit DataPiece(const int32_t value)
: type_(TYPE_INT32), i32_(value), use_strict_base64_decoding_(false) {} : type_(TYPE_INT32), i32_(value), use_strict_base64_decoding_(false) {}
explicit DataPiece(const int64 value) explicit DataPiece(const int64_t value)
: type_(TYPE_INT64), i64_(value), use_strict_base64_decoding_(false) {} : type_(TYPE_INT64), i64_(value), use_strict_base64_decoding_(false) {}
explicit DataPiece(const uint32 value) explicit DataPiece(const uint32_t value)
: type_(TYPE_UINT32), u32_(value), use_strict_base64_decoding_(false) {} : type_(TYPE_UINT32), u32_(value), use_strict_base64_decoding_(false) {}
explicit DataPiece(const uint64 value) explicit DataPiece(const uint64_t value)
: type_(TYPE_UINT64), u64_(value), use_strict_base64_decoding_(false) {} : type_(TYPE_UINT64), u64_(value), use_strict_base64_decoding_(false) {}
explicit DataPiece(const double value) explicit DataPiece(const double value)
: type_(TYPE_DOUBLE), : type_(TYPE_DOUBLE),
@ -125,16 +126,16 @@ class PROTOBUF_EXPORT DataPiece {
// Parses, casts or converts the value stored in the DataPiece into an int32. // Parses, casts or converts the value stored in the DataPiece into an int32.
util::StatusOr<int32> ToInt32() const; util::StatusOr<int32_t> ToInt32() const;
// Parses, casts or converts the value stored in the DataPiece into a uint32. // Parses, casts or converts the value stored in the DataPiece into a uint32.
util::StatusOr<uint32> ToUint32() const; util::StatusOr<uint32_t> ToUint32() const;
// Parses, casts or converts the value stored in the DataPiece into an int64. // Parses, casts or converts the value stored in the DataPiece into an int64.
util::StatusOr<int64> ToInt64() const; util::StatusOr<int64_t> ToInt64() const;
// Parses, casts or converts the value stored in the DataPiece into a uint64. // Parses, casts or converts the value stored in the DataPiece into a uint64.
util::StatusOr<uint64> ToUint64() const; util::StatusOr<uint64_t> ToUint64() const;
// Parses, casts or converts the value stored in the DataPiece into a double. // Parses, casts or converts the value stored in the DataPiece into a double.
util::StatusOr<double> ToDouble() const; util::StatusOr<double> ToDouble() const;
@ -161,7 +162,7 @@ class PROTOBUF_EXPORT DataPiece {
DataPiece(); DataPiece();
// Helper to create NULL or ENUM types. // Helper to create NULL or ENUM types.
DataPiece(Type type, int32 val) DataPiece(Type type, int32_t val)
: type_(type), i32_(val), use_strict_base64_decoding_(false) {} : type_(type), i32_(val), use_strict_base64_decoding_(false) {}
// Same as the ToEnum() method above but with additional flag to ignore // Same as the ToEnum() method above but with additional flag to ignore
@ -195,10 +196,10 @@ class PROTOBUF_EXPORT DataPiece {
// Stored piece of data. // Stored piece of data.
union { union {
int32 i32_; int32_t i32_;
int64 i64_; int64_t i64_;
uint32 u32_; uint32_t u32_;
uint64 u64_; uint64_t u64_;
double double_; double double_;
float float_; float float_;
bool bool_; bool bool_;

@ -30,6 +30,7 @@
#include <google/protobuf/util/internal/default_value_objectwriter.h> #include <google/protobuf/util/internal/default_value_objectwriter.h>
#include <cstdint>
#include <unordered_map> #include <unordered_map>
#include <google/protobuf/util/internal/constants.h> #include <google/protobuf/util/internal/constants.h>
@ -85,7 +86,7 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::RenderBool(
} }
DefaultValueObjectWriter* DefaultValueObjectWriter::RenderInt32( DefaultValueObjectWriter* DefaultValueObjectWriter::RenderInt32(
StringPiece name, int32 value) { StringPiece name, int32_t value) {
if (current_ == nullptr) { if (current_ == nullptr) {
ow_->RenderInt32(name, value); ow_->RenderInt32(name, value);
} else { } else {
@ -95,7 +96,7 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::RenderInt32(
} }
DefaultValueObjectWriter* DefaultValueObjectWriter::RenderUint32( DefaultValueObjectWriter* DefaultValueObjectWriter::RenderUint32(
StringPiece name, uint32 value) { StringPiece name, uint32_t value) {
if (current_ == nullptr) { if (current_ == nullptr) {
ow_->RenderUint32(name, value); ow_->RenderUint32(name, value);
} else { } else {
@ -105,7 +106,7 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::RenderUint32(
} }
DefaultValueObjectWriter* DefaultValueObjectWriter::RenderInt64( DefaultValueObjectWriter* DefaultValueObjectWriter::RenderInt64(
StringPiece name, int64 value) { StringPiece name, int64_t value) {
if (current_ == nullptr) { if (current_ == nullptr) {
ow_->RenderInt64(name, value); ow_->RenderInt64(name, value);
} else { } else {
@ -115,7 +116,7 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::RenderInt64(
} }
DefaultValueObjectWriter* DefaultValueObjectWriter::RenderUint64( DefaultValueObjectWriter* DefaultValueObjectWriter::RenderUint64(
StringPiece name, uint64 value) { StringPiece name, uint64_t value) {
if (current_ == nullptr) { if (current_ == nullptr) {
ow_->RenderUint64(name, value); ow_->RenderUint64(name, value);
} else { } else {
@ -445,19 +446,20 @@ DataPiece DefaultValueObjectWriter::CreateDefaultDataPieceForField(
case google::protobuf::Field::TYPE_INT64: case google::protobuf::Field::TYPE_INT64:
case google::protobuf::Field::TYPE_SINT64: case google::protobuf::Field::TYPE_SINT64:
case google::protobuf::Field::TYPE_SFIXED64: { case google::protobuf::Field::TYPE_SFIXED64: {
return DataPiece(ConvertTo<int64>( return DataPiece(ConvertTo<int64_t>(
field.default_value(), &DataPiece::ToInt64, static_cast<int64>(0))); field.default_value(), &DataPiece::ToInt64, static_cast<int64_t>(0)));
} }
case google::protobuf::Field::TYPE_UINT64: case google::protobuf::Field::TYPE_UINT64:
case google::protobuf::Field::TYPE_FIXED64: { case google::protobuf::Field::TYPE_FIXED64: {
return DataPiece(ConvertTo<uint64>( return DataPiece(ConvertTo<uint64_t>(field.default_value(),
field.default_value(), &DataPiece::ToUint64, static_cast<uint64>(0))); &DataPiece::ToUint64,
static_cast<uint64_t>(0)));
} }
case google::protobuf::Field::TYPE_INT32: case google::protobuf::Field::TYPE_INT32:
case google::protobuf::Field::TYPE_SINT32: case google::protobuf::Field::TYPE_SINT32:
case google::protobuf::Field::TYPE_SFIXED32: { case google::protobuf::Field::TYPE_SFIXED32: {
return DataPiece(ConvertTo<int32>( return DataPiece(ConvertTo<int32_t>(
field.default_value(), &DataPiece::ToInt32, static_cast<int32>(0))); field.default_value(), &DataPiece::ToInt32, static_cast<int32_t>(0)));
} }
case google::protobuf::Field::TYPE_BOOL: { case google::protobuf::Field::TYPE_BOOL: {
return DataPiece( return DataPiece(
@ -471,8 +473,9 @@ DataPiece DefaultValueObjectWriter::CreateDefaultDataPieceForField(
} }
case google::protobuf::Field::TYPE_UINT32: case google::protobuf::Field::TYPE_UINT32:
case google::protobuf::Field::TYPE_FIXED32: { case google::protobuf::Field::TYPE_FIXED32: {
return DataPiece(ConvertTo<uint32>( return DataPiece(ConvertTo<uint32_t>(field.default_value(),
field.default_value(), &DataPiece::ToUint32, static_cast<uint32>(0))); &DataPiece::ToUint32,
static_cast<uint32_t>(0)));
} }
case google::protobuf::Field::TYPE_ENUM: { case google::protobuf::Field::TYPE_ENUM: {
return FindEnumDefault(field, typeinfo, use_ints_for_enums); return FindEnumDefault(field, typeinfo, use_ints_for_enums);

@ -31,6 +31,7 @@
#ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_DEFAULT_VALUE_OBJECTWRITER_H__ #ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_DEFAULT_VALUE_OBJECTWRITER_H__
#define GOOGLE_PROTOBUF_UTIL_CONVERTER_DEFAULT_VALUE_OBJECTWRITER_H__ #define GOOGLE_PROTOBUF_UTIL_CONVERTER_DEFAULT_VALUE_OBJECTWRITER_H__
#include <cstdint>
#include <functional> #include <functional>
#include <memory> #include <memory>
#include <stack> #include <stack>
@ -95,16 +96,16 @@ class PROTOBUF_EXPORT DefaultValueObjectWriter : public ObjectWriter {
bool value) override; bool value) override;
DefaultValueObjectWriter* RenderInt32(StringPiece name, DefaultValueObjectWriter* RenderInt32(StringPiece name,
int32 value) override; int32_t value) override;
DefaultValueObjectWriter* RenderUint32(StringPiece name, DefaultValueObjectWriter* RenderUint32(StringPiece name,
uint32 value) override; uint32_t value) override;
DefaultValueObjectWriter* RenderInt64(StringPiece name, DefaultValueObjectWriter* RenderInt64(StringPiece name,
int64 value) override; int64_t value) override;
DefaultValueObjectWriter* RenderUint64(StringPiece name, DefaultValueObjectWriter* RenderUint64(StringPiece name,
uint64 value) override; uint64_t value) override;
DefaultValueObjectWriter* RenderDouble(StringPiece name, DefaultValueObjectWriter* RenderDouble(StringPiece name,
double value) override; double value) override;

@ -50,6 +50,8 @@
// ->RenderString("key", "value") // ->RenderString("key", "value")
// ->EndObject(); // ->EndObject();
#include <cstdint>
#include <google/protobuf/stubs/common.h> #include <google/protobuf/stubs/common.h>
#include <google/protobuf/util/internal/object_writer.h> #include <google/protobuf/util/internal/object_writer.h>
#include <gmock/gmock.h> #include <gmock/gmock.h>
@ -77,13 +79,13 @@ class MockObjectWriter : public ObjectWriter {
MOCK_METHOD(ObjectWriter*, StartList, (StringPiece), (override)); MOCK_METHOD(ObjectWriter*, StartList, (StringPiece), (override));
MOCK_METHOD(ObjectWriter*, EndList, (), (override)); MOCK_METHOD(ObjectWriter*, EndList, (), (override));
MOCK_METHOD(ObjectWriter*, RenderBool, (StringPiece, bool), (override)); MOCK_METHOD(ObjectWriter*, RenderBool, (StringPiece, bool), (override));
MOCK_METHOD(ObjectWriter*, RenderInt32, (StringPiece, int32), MOCK_METHOD(ObjectWriter*, RenderInt32, (StringPiece, int32_t),
(override)); (override));
MOCK_METHOD(ObjectWriter*, RenderUint32, (StringPiece, uint32), MOCK_METHOD(ObjectWriter*, RenderUint32, (StringPiece, uint32_t),
(override)); (override));
MOCK_METHOD(ObjectWriter*, RenderInt64, (StringPiece, int64), MOCK_METHOD(ObjectWriter*, RenderInt64, (StringPiece, int64_t),
(override)); (override));
MOCK_METHOD(ObjectWriter*, RenderUint64, (StringPiece, uint64), MOCK_METHOD(ObjectWriter*, RenderUint64, (StringPiece, uint64_t),
(override)); (override));
MOCK_METHOD(ObjectWriter*, RenderDouble, (StringPiece, double), MOCK_METHOD(ObjectWriter*, RenderDouble, (StringPiece, double),
(override)); (override));
@ -139,41 +141,41 @@ class ExpectingObjectWriter : public ObjectWriter {
return this; return this;
} }
virtual ObjectWriter* RenderInt32(StringPiece name, int32 value) { virtual ObjectWriter* RenderInt32(StringPiece name, int32_t value) {
(name.empty() (name.empty()
? EXPECT_CALL(*mock_, RenderInt32(IsEmpty(), TypedEq<int32>(value))) ? EXPECT_CALL(*mock_, RenderInt32(IsEmpty(), TypedEq<int32_t>(value)))
: EXPECT_CALL(*mock_, RenderInt32(Eq(std::string(name)), : EXPECT_CALL(*mock_, RenderInt32(Eq(std::string(name)),
TypedEq<int32>(value)))) TypedEq<int32_t>(value))))
.WillOnce(Return(mock_)) .WillOnce(Return(mock_))
.RetiresOnSaturation(); .RetiresOnSaturation();
return this; return this;
} }
virtual ObjectWriter* RenderUint32(StringPiece name, uint32 value) { virtual ObjectWriter* RenderUint32(StringPiece name, uint32_t value) {
(name.empty() (name.empty() ? EXPECT_CALL(*mock_, RenderUint32(IsEmpty(),
? EXPECT_CALL(*mock_, RenderUint32(IsEmpty(), TypedEq<uint32>(value))) TypedEq<uint32_t>(value)))
: EXPECT_CALL(*mock_, RenderUint32(Eq(std::string(name)), : EXPECT_CALL(*mock_, RenderUint32(Eq(std::string(name)),
TypedEq<uint32>(value)))) TypedEq<uint32_t>(value))))
.WillOnce(Return(mock_)) .WillOnce(Return(mock_))
.RetiresOnSaturation(); .RetiresOnSaturation();
return this; return this;
} }
virtual ObjectWriter* RenderInt64(StringPiece name, int64 value) { virtual ObjectWriter* RenderInt64(StringPiece name, int64_t value) {
(name.empty() (name.empty()
? EXPECT_CALL(*mock_, RenderInt64(IsEmpty(), TypedEq<int64>(value))) ? EXPECT_CALL(*mock_, RenderInt64(IsEmpty(), TypedEq<int64_t>(value)))
: EXPECT_CALL(*mock_, RenderInt64(Eq(std::string(name)), : EXPECT_CALL(*mock_, RenderInt64(Eq(std::string(name)),
TypedEq<int64>(value)))) TypedEq<int64_t>(value))))
.WillOnce(Return(mock_)) .WillOnce(Return(mock_))
.RetiresOnSaturation(); .RetiresOnSaturation();
return this; return this;
} }
virtual ObjectWriter* RenderUint64(StringPiece name, uint64 value) { virtual ObjectWriter* RenderUint64(StringPiece name, uint64_t value) {
(name.empty() (name.empty() ? EXPECT_CALL(*mock_, RenderUint64(IsEmpty(),
? EXPECT_CALL(*mock_, RenderUint64(IsEmpty(), TypedEq<uint64>(value))) TypedEq<uint64_t>(value)))
: EXPECT_CALL(*mock_, RenderUint64(Eq(std::string(name)), : EXPECT_CALL(*mock_, RenderUint64(Eq(std::string(name)),
TypedEq<uint64>(value)))) TypedEq<uint64_t>(value))))
.WillOnce(Return(mock_)) .WillOnce(Return(mock_))
.RetiresOnSaturation(); .RetiresOnSaturation();
return this; return this;

@ -30,6 +30,8 @@
#include <google/protobuf/util/internal/json_escaping.h> #include <google/protobuf/util/internal/json_escaping.h>
#include <cstdint>
#include <google/protobuf/stubs/logging.h> #include <google/protobuf/stubs/logging.h>
#include <google/protobuf/stubs/common.h> #include <google/protobuf/stubs/common.h>
@ -77,7 +79,7 @@ static const char kCommonEscapes[160][7] = {
// Determines if the given char value is a unicode surrogate code unit (either // Determines if the given char value is a unicode surrogate code unit (either
// high-surrogate or low-surrogate). // high-surrogate or low-surrogate).
inline bool IsSurrogate(uint32 c) { inline bool IsSurrogate(uint32_t c) {
// Optimized form of: // Optimized form of:
// return c >= kMinHighSurrogate && c <= kMaxLowSurrogate; // return c >= kMinHighSurrogate && c <= kMaxLowSurrogate;
// (Reduced from 3 ALU instructions to 2 ALU instructions) // (Reduced from 3 ALU instructions to 2 ALU instructions)
@ -86,13 +88,13 @@ inline bool IsSurrogate(uint32 c) {
// Returns true if the given unicode code point cp is a valid // Returns true if the given unicode code point cp is a valid
// unicode code point (i.e. in the range 0 <= cp <= kMaxCodePoint). // unicode code point (i.e. in the range 0 <= cp <= kMaxCodePoint).
inline bool IsValidCodePoint(uint32 cp) { inline bool IsValidCodePoint(uint32_t cp) {
return cp <= JsonEscaping::kMaxCodePoint; return cp <= JsonEscaping::kMaxCodePoint;
} }
// Returns the low surrogate for the given unicode code point. The result is // Returns the low surrogate for the given unicode code point. The result is
// meaningless if the given code point is not a supplementary character. // meaningless if the given code point is not a supplementary character.
inline uint16 ToLowSurrogate(uint32 cp) { inline uint16_t ToLowSurrogate(uint32_t cp) {
return (cp & return (cp &
(JsonEscaping::kMaxLowSurrogate - JsonEscaping::kMinLowSurrogate)) + (JsonEscaping::kMaxLowSurrogate - JsonEscaping::kMinLowSurrogate)) +
JsonEscaping::kMinLowSurrogate; JsonEscaping::kMinLowSurrogate;
@ -100,7 +102,7 @@ inline uint16 ToLowSurrogate(uint32 cp) {
// Returns the high surrogate for the given unicode code point. The result is // Returns the high surrogate for the given unicode code point. The result is
// meaningless if the given code point is not a supplementary character. // meaningless if the given code point is not a supplementary character.
inline uint16 ToHighSurrogate(uint32 cp) { inline uint16_t ToHighSurrogate(uint32_t cp) {
return (cp >> 10) + (JsonEscaping::kMinHighSurrogate - return (cp >> 10) + (JsonEscaping::kMinHighSurrogate -
(JsonEscaping::kMinSupplementaryCodePoint >> 10)); (JsonEscaping::kMinSupplementaryCodePoint >> 10));
} }
@ -125,11 +127,11 @@ inline uint16 ToHighSurrogate(uint32 cp) {
// Returns false if we encounter an invalid UTF-8 string. Returns true // Returns false if we encounter an invalid UTF-8 string. Returns true
// otherwise, including the case when we reach the end of the input (str) // otherwise, including the case when we reach the end of the input (str)
// before a complete unicode code point is read. // before a complete unicode code point is read.
bool ReadCodePoint(StringPiece str, int index, uint32* cp, int* num_left, bool ReadCodePoint(StringPiece str, int index, uint32_t* cp,
int* num_read) { int* num_left, int* num_read) {
if (*num_left == 0) { if (*num_left == 0) {
// Last read was complete. Start reading a new unicode code point. // Last read was complete. Start reading a new unicode code point.
*cp = static_cast<uint8>(str[index++]); *cp = static_cast<uint8_t>(str[index++]);
*num_read = 1; *num_read = 1;
// The length of the code point is determined from reading the first byte. // The length of the code point is determined from reading the first byte.
// //
@ -178,7 +180,7 @@ bool ReadCodePoint(StringPiece str, int index, uint32* cp, int* num_left,
*num_read = 0; *num_read = 0;
} }
while (*num_left > 0 && index < str.size()) { while (*num_left > 0 && index < str.size()) {
uint32 ch = static_cast<uint8>(str[index++]); uint32_t ch = static_cast<uint8_t>(str[index++]);
--(*num_left); --(*num_left);
++(*num_read); ++(*num_read);
*cp = (*cp << 6) | (ch & 0x3f); *cp = (*cp << 6) | (ch & 0x3f);
@ -190,7 +192,7 @@ bool ReadCodePoint(StringPiece str, int index, uint32* cp, int* num_left,
// Stores the 16-bit unicode code point as its hexadecimal digits in buffer // Stores the 16-bit unicode code point as its hexadecimal digits in buffer
// and returns a StringPiece that points to this buffer. The input buffer needs // and returns a StringPiece that points to this buffer. The input buffer needs
// to be at least 6 bytes long. // to be at least 6 bytes long.
StringPiece ToHex(uint16 cp, char* buffer) { StringPiece ToHex(uint16_t cp, char* buffer) {
buffer[5] = kHex[cp & 0x0f]; buffer[5] = kHex[cp & 0x0f];
cp >>= 4; cp >>= 4;
buffer[4] = kHex[cp & 0x0f]; buffer[4] = kHex[cp & 0x0f];
@ -204,9 +206,9 @@ StringPiece ToHex(uint16 cp, char* buffer) {
// Stores the 32-bit unicode code point as its hexadecimal digits in buffer // Stores the 32-bit unicode code point as its hexadecimal digits in buffer
// and returns a StringPiece that points to this buffer. The input buffer needs // and returns a StringPiece that points to this buffer. The input buffer needs
// to be at least 12 bytes long. // to be at least 12 bytes long.
StringPiece ToSurrogateHex(uint32 cp, char* buffer) { StringPiece ToSurrogateHex(uint32_t cp, char* buffer) {
uint16 low = ToLowSurrogate(cp); uint16_t low = ToLowSurrogate(cp);
uint16 high = ToHighSurrogate(cp); uint16_t high = ToHighSurrogate(cp);
buffer[11] = kHex[low & 0x0f]; buffer[11] = kHex[low & 0x0f];
low >>= 4; low >>= 4;
@ -234,7 +236,7 @@ StringPiece ToSurrogateHex(uint32 cp, char* buffer) {
// //
// If the given unicode code point does not need escaping, an empty // If the given unicode code point does not need escaping, an empty
// StringPiece is returned. // StringPiece is returned.
StringPiece EscapeCodePoint(uint32 cp, char* buffer) { StringPiece EscapeCodePoint(uint32_t cp, char* buffer) {
if (cp < 0xa0) return kCommonEscapes[cp]; if (cp < 0xa0) return kCommonEscapes[cp];
switch (cp) { switch (cp) {
// These are not required by json spec // These are not required by json spec
@ -272,7 +274,8 @@ StringPiece EscapeCodePoint(uint32 cp, char* buffer) {
// Tries to escape the given code point first. If the given code point // Tries to escape the given code point first. If the given code point
// does not need to be escaped, but force_output is true, then render // does not need to be escaped, but force_output is true, then render
// the given multi-byte code point in UTF8 in the buffer and returns it. // the given multi-byte code point in UTF8 in the buffer and returns it.
StringPiece EscapeCodePoint(uint32 cp, char* buffer, bool force_output) { StringPiece EscapeCodePoint(uint32_t cp, char* buffer,
bool force_output) {
StringPiece sp = EscapeCodePoint(cp, buffer); StringPiece sp = EscapeCodePoint(cp, buffer);
if (force_output && sp.empty()) { if (force_output && sp.empty()) {
buffer[5] = (cp & 0x3f) | 0x80; buffer[5] = (cp & 0x3f) | 0x80;
@ -301,7 +304,7 @@ StringPiece EscapeCodePoint(uint32 cp, char* buffer, bool force_output) {
void JsonEscaping::Escape(strings::ByteSource* input, void JsonEscaping::Escape(strings::ByteSource* input,
strings::ByteSink* output) { strings::ByteSink* output) {
char buffer[12] = "\\udead\\ubee"; char buffer[12] = "\\udead\\ubee";
uint32 cp = 0; // Current unicode code point. uint32_t cp = 0; // Current unicode code point.
int num_left = 0; // Num of chars to read to complete the code point. int num_left = 0; // Num of chars to read to complete the code point.
while (input->Available() > 0) { while (input->Available() > 0) {
StringPiece str = input->Peek(); StringPiece str = input->Peek();

@ -31,6 +31,8 @@
#ifndef GOOGLE_PROTOBUF_UTIL_INTERNAL__JSON_ESCAPING_H__ #ifndef GOOGLE_PROTOBUF_UTIL_INTERNAL__JSON_ESCAPING_H__
#define GOOGLE_PROTOBUF_UTIL_INTERNAL__JSON_ESCAPING_H__ #define GOOGLE_PROTOBUF_UTIL_INTERNAL__JSON_ESCAPING_H__
#include <cstdint>
#include <google/protobuf/stubs/common.h> #include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/bytestream.h> #include <google/protobuf/stubs/bytestream.h>
@ -44,34 +46,34 @@ class JsonEscaping {
// The minimum value of a unicode high-surrogate code unit in the utf-16 // The minimum value of a unicode high-surrogate code unit in the utf-16
// encoding. A high-surrogate is also known as a leading-surrogate. // encoding. A high-surrogate is also known as a leading-surrogate.
// See http://www.unicode.org/glossary/#high_surrogate_code_unit // See http://www.unicode.org/glossary/#high_surrogate_code_unit
static constexpr uint16 kMinHighSurrogate = 0xd800; static constexpr uint16_t kMinHighSurrogate = 0xd800;
// The maximum value of a unicide high-surrogate code unit in the utf-16 // The maximum value of a unicide high-surrogate code unit in the utf-16
// encoding. A high-surrogate is also known as a leading-surrogate. // encoding. A high-surrogate is also known as a leading-surrogate.
// See http://www.unicode.org/glossary/#high_surrogate_code_unit // See http://www.unicode.org/glossary/#high_surrogate_code_unit
static constexpr uint16 kMaxHighSurrogate = 0xdbff; static constexpr uint16_t kMaxHighSurrogate = 0xdbff;
// The minimum value of a unicode low-surrogate code unit in the utf-16 // The minimum value of a unicode low-surrogate code unit in the utf-16
// encoding. A low-surrogate is also known as a trailing-surrogate. // encoding. A low-surrogate is also known as a trailing-surrogate.
// See http://www.unicode.org/glossary/#low_surrogate_code_unit // See http://www.unicode.org/glossary/#low_surrogate_code_unit
static constexpr uint16 kMinLowSurrogate = 0xdc00; static constexpr uint16_t kMinLowSurrogate = 0xdc00;
// The maximum value of a unicode low-surrogate code unit in the utf-16 // The maximum value of a unicode low-surrogate code unit in the utf-16
// encoding. A low-surrogate is also known as a trailing surrogate. // encoding. A low-surrogate is also known as a trailing surrogate.
// See http://www.unicode.org/glossary/#low_surrogate_code_unit // See http://www.unicode.org/glossary/#low_surrogate_code_unit
static constexpr uint16 kMaxLowSurrogate = 0xdfff; static constexpr uint16_t kMaxLowSurrogate = 0xdfff;
// The minimum value of a unicode supplementary code point. // The minimum value of a unicode supplementary code point.
// See http://www.unicode.org/glossary/#supplementary_code_point // See http://www.unicode.org/glossary/#supplementary_code_point
static constexpr uint32 kMinSupplementaryCodePoint = 0x010000; static constexpr uint32_t kMinSupplementaryCodePoint = 0x010000;
// The minimum value of a unicode code point. // The minimum value of a unicode code point.
// See http://www.unicode.org/glossary/#code_point // See http://www.unicode.org/glossary/#code_point
static constexpr uint32 kMinCodePoint = 0x000000; static constexpr uint32_t kMinCodePoint = 0x000000;
// The maximum value of a unicode code point. // The maximum value of a unicode code point.
// See http://www.unicode.org/glossary/#code_point // See http://www.unicode.org/glossary/#code_point
static constexpr uint32 kMaxCodePoint = 0x10ffff; static constexpr uint32_t kMaxCodePoint = 0x10ffff;
JsonEscaping() {} JsonEscaping() {}
virtual ~JsonEscaping() {} virtual ~JsonEscaping() {}

@ -31,6 +31,7 @@
#include <google/protobuf/util/internal/json_objectwriter.h> #include <google/protobuf/util/internal/json_objectwriter.h>
#include <cmath> #include <cmath>
#include <cstdint>
#include <limits> #include <limits>
#include <google/protobuf/stubs/casts.h> #include <google/protobuf/stubs/casts.h>
@ -86,17 +87,17 @@ JsonObjectWriter* JsonObjectWriter::RenderBool(StringPiece name,
} }
JsonObjectWriter* JsonObjectWriter::RenderInt32(StringPiece name, JsonObjectWriter* JsonObjectWriter::RenderInt32(StringPiece name,
int32 value) { int32_t value) {
return RenderSimple(name, StrCat(value)); return RenderSimple(name, StrCat(value));
} }
JsonObjectWriter* JsonObjectWriter::RenderUint32(StringPiece name, JsonObjectWriter* JsonObjectWriter::RenderUint32(StringPiece name,
uint32 value) { uint32_t value) {
return RenderSimple(name, StrCat(value)); return RenderSimple(name, StrCat(value));
} }
JsonObjectWriter* JsonObjectWriter::RenderInt64(StringPiece name, JsonObjectWriter* JsonObjectWriter::RenderInt64(StringPiece name,
int64 value) { int64_t value) {
WritePrefix(name); WritePrefix(name);
WriteChar('"'); WriteChar('"');
WriteRawString(StrCat(value)); WriteRawString(StrCat(value));
@ -105,7 +106,7 @@ JsonObjectWriter* JsonObjectWriter::RenderInt64(StringPiece name,
} }
JsonObjectWriter* JsonObjectWriter::RenderUint64(StringPiece name, JsonObjectWriter* JsonObjectWriter::RenderUint64(StringPiece name,
uint64 value) { uint64_t value) {
WritePrefix(name); WritePrefix(name);
WriteChar('"'); WriteChar('"');
WriteRawString(StrCat(value)); WriteRawString(StrCat(value));

@ -31,6 +31,7 @@
#ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_JSON_OBJECTWRITER_H__ #ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_JSON_OBJECTWRITER_H__
#define GOOGLE_PROTOBUF_UTIL_CONVERTER_JSON_OBJECTWRITER_H__ #define GOOGLE_PROTOBUF_UTIL_CONVERTER_JSON_OBJECTWRITER_H__
#include <cstdint>
#include <memory> #include <memory>
#include <string> #include <string>
@ -118,10 +119,12 @@ class PROTOBUF_EXPORT JsonObjectWriter : public StructuredObjectWriter {
JsonObjectWriter* StartList(StringPiece name) override; JsonObjectWriter* StartList(StringPiece name) override;
JsonObjectWriter* EndList() override; JsonObjectWriter* EndList() override;
JsonObjectWriter* RenderBool(StringPiece name, bool value) override; JsonObjectWriter* RenderBool(StringPiece name, bool value) override;
JsonObjectWriter* RenderInt32(StringPiece name, int32 value) override; JsonObjectWriter* RenderInt32(StringPiece name, int32_t value) override;
JsonObjectWriter* RenderUint32(StringPiece name, uint32 value) override; JsonObjectWriter* RenderUint32(StringPiece name,
JsonObjectWriter* RenderInt64(StringPiece name, int64 value) override; uint32_t value) override;
JsonObjectWriter* RenderUint64(StringPiece name, uint64 value) override; JsonObjectWriter* RenderInt64(StringPiece name, int64_t value) override;
JsonObjectWriter* RenderUint64(StringPiece name,
uint64_t value) override;
JsonObjectWriter* RenderDouble(StringPiece name, double value) override; JsonObjectWriter* RenderDouble(StringPiece name, double value) override;
JsonObjectWriter* RenderFloat(StringPiece name, float value) override; JsonObjectWriter* RenderFloat(StringPiece name, float value) override;
JsonObjectWriter* RenderString(StringPiece name, JsonObjectWriter* RenderString(StringPiece name,
@ -218,7 +221,7 @@ class PROTOBUF_EXPORT JsonObjectWriter : public StructuredObjectWriter {
// Take the slow-path if we don't have sufficient characters remaining in // Take the slow-path if we don't have sufficient characters remaining in
// our buffer or we have a non-trivial indent string which would prevent // our buffer or we have a non-trivial indent string which would prevent
// us from using memset. // us from using memset.
uint8* out = nullptr; uint8_t* out = nullptr;
if (indent_count_ > 0) { if (indent_count_ > 0) {
out = stream_->GetDirectBufferForNBytesAndAdvance(len); out = stream_->GetDirectBufferForNBytesAndAdvance(len);
} }

@ -30,6 +30,8 @@
#include <google/protobuf/util/internal/json_objectwriter.h> #include <google/protobuf/util/internal/json_objectwriter.h>
#include <cstdint>
#include <google/protobuf/io/zero_copy_stream_impl_lite.h> #include <google/protobuf/io/zero_copy_stream_impl_lite.h>
#include <google/protobuf/util/internal/utility.h> #include <google/protobuf/util/internal/utility.h>
#include <gtest/gtest.h> #include <gtest/gtest.h>
@ -147,8 +149,8 @@ TEST_F(JsonObjectWriterTest, RenderPrimitives) {
->RenderBool("bool", true) ->RenderBool("bool", true)
->RenderDouble("double", std::numeric_limits<double>::max()) ->RenderDouble("double", std::numeric_limits<double>::max())
->RenderFloat("float", std::numeric_limits<float>::max()) ->RenderFloat("float", std::numeric_limits<float>::max())
->RenderInt32("int", std::numeric_limits<int32>::min()) ->RenderInt32("int", std::numeric_limits<int32_t>::min())
->RenderInt64("long", std::numeric_limits<int64>::min()) ->RenderInt64("long", std::numeric_limits<int64_t>::min())
->RenderBytes("bytes", "abracadabra") ->RenderBytes("bytes", "abracadabra")
->RenderString("string", "string") ->RenderString("string", "string")
->RenderBytes("emptybytes", "") ->RenderBytes("emptybytes", "")

@ -32,16 +32,15 @@
#include <algorithm> #include <algorithm>
#include <cctype> #include <cctype>
#include <cerrno>
#include <cmath> #include <cmath>
#include <cstdlib>
#include <cstring>
#include <limits>
#include <memory> #include <memory>
#include <stack>
#include <string>
#include <google/protobuf/stubs/logging.h>
#include <google/protobuf/stubs/common.h> #include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/logging.h>
#include <google/protobuf/stubs/strutil.h> #include <google/protobuf/stubs/strutil.h>
#include <google/protobuf/stubs/status.h>
#include <google/protobuf/util/internal/object_writer.h> #include <google/protobuf/util/internal/object_writer.h>
#include <google/protobuf/util/internal/json_escaping.h> #include <google/protobuf/util/internal/json_escaping.h>
@ -50,14 +49,6 @@ namespace google {
namespace protobuf { namespace protobuf {
namespace util { namespace util {
// Allow these symbols to be referenced as util::Status, util::error::* in
// this file.
namespace error {
using util::error::CANCELLED;
using util::error::INTERNAL;
using util::error::INVALID_ARGUMENT;
} // namespace error
namespace converter { namespace converter {
// Number of digits in an escaped UTF-16 code unit ('\\' 'u' X X X X) // Number of digits in an escaped UTF-16 code unit ('\\' 'u' X X X X)
@ -146,6 +137,8 @@ JsonStreamParser::JsonStreamParser(ObjectWriter* ow)
key_(), key_(),
key_storage_(), key_storage_(),
finishing_(false), finishing_(false),
seen_non_whitespace_(false),
allow_no_root_element_(false),
parsed_(), parsed_(),
parsed_storage_(), parsed_storage_(),
string_open_(0), string_open_(0),
@ -214,7 +207,8 @@ util::Status JsonStreamParser::FinishParse() {
} else { } else {
p_ = json_ = leftover_; p_ = json_ = leftover_;
if (!is_valid_utf8) { if (!is_valid_utf8) {
return ReportFailure("Encountered non UTF-8 code points."); return ReportFailure("Encountered non UTF-8 code points.",
ParseErrorType::NON_UTF_8);
} }
} }
@ -225,7 +219,9 @@ util::Status JsonStreamParser::FinishParse() {
if (result.ok()) { if (result.ok()) {
SkipWhitespace(); SkipWhitespace();
if (!p_.empty()) { if (!p_.empty()) {
result = ReportFailure("Parsing terminated before end of input."); result =
ReportFailure("Parsing terminated before end of input.",
ParseErrorType::PARSING_TERMINATED_BEFORE_END_OF_INPUT);
} }
} }
return result; return result;
@ -249,7 +245,9 @@ util::Status JsonStreamParser::ParseChunk(StringPiece chunk) {
// If we do not expect anything i.e. stack is empty, and we have non-empty // If we do not expect anything i.e. stack is empty, and we have non-empty
// string left to parse, we report an error. // string left to parse, we report an error.
if (stack_.empty()) { if (stack_.empty()) {
return ReportFailure("Parsing terminated before end of input."); return ReportFailure(
"Parsing terminated before end of input.",
ParseErrorType::PARSING_TERMINATED_BEFORE_END_OF_INPUT);
} }
// If we expect future data i.e. stack is non-empty, and we have some // If we expect future data i.e. stack is non-empty, and we have some
// unparsed data left, we save it for later parse. // unparsed data left, we save it for later parse.
@ -258,6 +256,17 @@ util::Status JsonStreamParser::ParseChunk(StringPiece chunk) {
return util::Status(); return util::Status();
} }
bool JsonStreamParser::IsInputAllWhiteSpaces(TokenType type) {
// Conclude the whole input is full of white spaces by:
// - it is at the finishing stage
// - we have run out of the input data
// - haven't seen non-whitespace char so far
if (finishing_ && p_.empty() && type == UNKNOWN && !seen_non_whitespace_) {
return true;
}
return false;
}
util::Status JsonStreamParser::RunParser() { util::Status JsonStreamParser::RunParser() {
while (!stack_.empty()) { while (!stack_.empty()) {
ParseType type = stack_.top(); ParseType type = stack_.top();
@ -266,6 +275,9 @@ util::Status JsonStreamParser::RunParser() {
util::Status result; util::Status result;
switch (type) { switch (type) {
case VALUE: case VALUE:
if (allow_no_root_element_ && IsInputAllWhiteSpaces(t)) {
return util::Status();
}
result = ParseValue(t); result = ParseValue(t);
break; break;
@ -330,7 +342,7 @@ util::Status JsonStreamParser::ParseValue(TokenType type) {
case BEGIN_NULL: case BEGIN_NULL:
return ParseNull(); return ParseNull();
case UNKNOWN: case UNKNOWN:
return ReportUnknown("Expected a value."); return ReportUnknown("Expected a value.", ParseErrorType::EXPECTED_VALUE);
default: { default: {
if (allow_empty_null_ && IsEmptyNullAllowed(type)) { if (allow_empty_null_ && IsEmptyNullAllowed(type)) {
return ParseEmptyNull(); return ParseEmptyNull();
@ -343,7 +355,8 @@ util::Status JsonStreamParser::ParseValue(TokenType type) {
if (!finishing_ && p_.length() < kKeywordFalse.length()) { if (!finishing_ && p_.length() < kKeywordFalse.length()) {
return util::Status(util::error::CANCELLED, ""); return util::Status(util::error::CANCELLED, "");
} }
return ReportFailure("Unexpected token."); return ReportFailure("Unexpected token.",
ParseErrorType::UNEXPECTED_TOKEN);
} }
} }
} }
@ -381,7 +394,8 @@ util::Status JsonStreamParser::ParseStringHelper() {
if (!finishing_) { if (!finishing_) {
return util::Status(util::error::CANCELLED, ""); return util::Status(util::error::CANCELLED, "");
} }
return ReportFailure("Closing quote expected in string."); return ReportFailure("Closing quote expected in string.",
ParseErrorType::EXPECTED_CLOSING_QUOTE);
} }
// Parse a unicode escape if we found \u in the string. // Parse a unicode escape if we found \u in the string.
if (data[1] == 'u') { if (data[1] == 'u') {
@ -451,7 +465,8 @@ util::Status JsonStreamParser::ParseStringHelper() {
} }
// End of string reached without a closing quote, report an error. // End of string reached without a closing quote, report an error.
string_open_ = 0; string_open_ = 0;
return ReportFailure("Closing quote expected in string."); return ReportFailure("Closing quote expected in string.",
ParseErrorType::EXPECTED_CLOSING_QUOTE);
} }
// Converts a unicode escaped character to a decimal value stored in a char32 // Converts a unicode escaped character to a decimal value stored in a char32
@ -466,14 +481,16 @@ util::Status JsonStreamParser::ParseUnicodeEscape() {
if (!finishing_) { if (!finishing_) {
return util::Status(util::error::CANCELLED, ""); return util::Status(util::error::CANCELLED, "");
} }
return ReportFailure("Illegal hex string."); return ReportFailure("Illegal hex string.",
ParseErrorType::ILLEGAL_HEX_STRING);
} }
GOOGLE_DCHECK_EQ('\\', p_.data()[0]); GOOGLE_DCHECK_EQ('\\', p_.data()[0]);
GOOGLE_DCHECK_EQ('u', p_.data()[1]); GOOGLE_DCHECK_EQ('u', p_.data()[1]);
uint32 code = 0; uint32 code = 0;
for (int i = 2; i < kUnicodeEscapedLength; ++i) { for (int i = 2; i < kUnicodeEscapedLength; ++i) {
if (!isxdigit(p_.data()[i])) { if (!isxdigit(p_.data()[i])) {
return ReportFailure("Invalid escape sequence."); return ReportFailure("Invalid escape sequence.",
ParseErrorType::INVALID_ESCAPE_SEQUENCE);
} }
code = (code << 4) + hex_digit_to_int(p_.data()[i]); code = (code << 4) + hex_digit_to_int(p_.data()[i]);
} }
@ -484,7 +501,8 @@ util::Status JsonStreamParser::ParseUnicodeEscape() {
return util::Status(util::error::CANCELLED, ""); return util::Status(util::error::CANCELLED, "");
} }
if (!coerce_to_utf8_) { if (!coerce_to_utf8_) {
return ReportFailure("Missing low surrogate."); return ReportFailure("Missing low surrogate.",
ParseErrorType::MISSING_LOW_SURROGATE);
} }
} else if (p_.data()[kUnicodeEscapedLength] == '\\' && } else if (p_.data()[kUnicodeEscapedLength] == '\\' &&
p_.data()[kUnicodeEscapedLength + 1] == 'u') { p_.data()[kUnicodeEscapedLength + 1] == 'u') {
@ -492,7 +510,8 @@ util::Status JsonStreamParser::ParseUnicodeEscape() {
for (int i = kUnicodeEscapedLength + 2; i < 2 * kUnicodeEscapedLength; for (int i = kUnicodeEscapedLength + 2; i < 2 * kUnicodeEscapedLength;
++i) { ++i) {
if (!isxdigit(p_.data()[i])) { if (!isxdigit(p_.data()[i])) {
return ReportFailure("Invalid escape sequence."); return ReportFailure("Invalid escape sequence.",
ParseErrorType::INVALID_ESCAPE_SEQUENCE);
} }
low_code = (low_code << 4) + hex_digit_to_int(p_.data()[i]); low_code = (low_code << 4) + hex_digit_to_int(p_.data()[i]);
} }
@ -504,14 +523,17 @@ util::Status JsonStreamParser::ParseUnicodeEscape() {
// Advance past the first code unit escape. // Advance past the first code unit escape.
p_.remove_prefix(kUnicodeEscapedLength); p_.remove_prefix(kUnicodeEscapedLength);
} else if (!coerce_to_utf8_) { } else if (!coerce_to_utf8_) {
return ReportFailure("Invalid low surrogate."); return ReportFailure("Invalid low surrogate.",
ParseErrorType::INVALID_LOW_SURROGATE);
} }
} else if (!coerce_to_utf8_) { } else if (!coerce_to_utf8_) {
return ReportFailure("Missing low surrogate."); return ReportFailure("Missing low surrogate.",
ParseErrorType::MISSING_LOW_SURROGATE);
} }
} }
if (!coerce_to_utf8_ && !IsValidCodePoint(code)) { if (!coerce_to_utf8_ && !IsValidCodePoint(code)) {
return ReportFailure("Invalid unicode code point."); return ReportFailure("Invalid unicode code point.",
ParseErrorType::INVALID_UNICODE);
} }
char buf[UTFmax]; char buf[UTFmax];
int len = EncodeAsUTF8Char(code, buf); int len = EncodeAsUTF8Char(code, buf);
@ -542,7 +564,8 @@ util::Status JsonStreamParser::ParseNumber() {
break; break;
default: default:
return ReportFailure("Unable to parse number."); return ReportFailure("Unable to parse number.",
ParseErrorType::UNABLE_TO_PARSE_NUMBER);
} }
} }
return result; return result;
@ -551,10 +574,12 @@ util::Status JsonStreamParser::ParseNumber() {
util::Status JsonStreamParser::ParseDoubleHelper(const std::string& number, util::Status JsonStreamParser::ParseDoubleHelper(const std::string& number,
NumberResult* result) { NumberResult* result) {
if (!safe_strtod(number, &result->double_val)) { if (!safe_strtod(number, &result->double_val)) {
return ReportFailure("Unable to parse number."); return ReportFailure("Unable to parse number.",
ParseErrorType::UNABLE_TO_PARSE_NUMBER);
} }
if (!loose_float_number_conversion_ && !std::isfinite(result->double_val)) { if (!loose_float_number_conversion_ && !std::isfinite(result->double_val)) {
return ReportFailure("Number exceeds the range of double."); return ReportFailure("Number exceeds the range of double.",
ParseErrorType::NUMBER_EXCEEDS_RANGE_DOUBLE);
} }
result->type = NumberResult::DOUBLE; result->type = NumberResult::DOUBLE;
return util::Status(); return util::Status();
@ -606,7 +631,9 @@ util::Status JsonStreamParser::ParseNumberHelper(NumberResult* result) {
if (!negative) { if (!negative) {
// Octal/Hex numbers are not valid JSON values. // Octal/Hex numbers are not valid JSON values.
if (number.length() >= 2 && number[0] == '0') { if (number.length() >= 2 && number[0] == '0') {
return ReportFailure("Octal/hex numbers are not valid JSON values."); return ReportFailure(
"Octal/hex numbers are not valid JSON values.",
ParseErrorType::OCTAL_OR_HEX_ARE_NOT_VALID_JSON_VALUES);
} }
if (safe_strtou64(number, &result->uint_val)) { if (safe_strtou64(number, &result->uint_val)) {
result->type = NumberResult::UINT; result->type = NumberResult::UINT;
@ -624,7 +651,9 @@ util::Status JsonStreamParser::ParseNumberHelper(NumberResult* result) {
// Octal/Hex numbers are not valid JSON values. // Octal/Hex numbers are not valid JSON values.
if (number.length() >= 3 && number[1] == '0') { if (number.length() >= 3 && number[1] == '0') {
return ReportFailure("Octal/hex numbers are not valid JSON values."); return ReportFailure(
"Octal/hex numbers are not valid JSON values.",
ParseErrorType::OCTAL_OR_HEX_ARE_NOT_VALID_JSON_VALUES);
} }
// Negative non-floating point number, parse as an int64. // Negative non-floating point number, parse as an int64.
if (safe_strto64(number, &result->int_val)) { if (safe_strto64(number, &result->int_val)) {
@ -656,7 +685,8 @@ util::Status JsonStreamParser::HandleBeginObject() {
util::Status JsonStreamParser::ParseObjectMid(TokenType type) { util::Status JsonStreamParser::ParseObjectMid(TokenType type) {
if (type == UNKNOWN) { if (type == UNKNOWN) {
return ReportUnknown("Expected , or } after key:value pair."); return ReportUnknown("Expected , or } after key:value pair.",
ParseErrorType::EXPECTED_COMMA_OR_BRACES);
} }
// Object is complete, advance past the comma and render the EndObject. // Object is complete, advance past the comma and render the EndObject.
@ -673,12 +703,14 @@ util::Status JsonStreamParser::ParseObjectMid(TokenType type) {
return util::Status(); return util::Status();
} }
// Illegal token after key:value pair. // Illegal token after key:value pair.
return ReportFailure("Expected , or } after key:value pair."); return ReportFailure("Expected , or } after key:value pair.",
ParseErrorType::EXPECTED_COMMA_OR_BRACES);
} }
util::Status JsonStreamParser::ParseEntry(TokenType type) { util::Status JsonStreamParser::ParseEntry(TokenType type) {
if (type == UNKNOWN) { if (type == UNKNOWN) {
return ReportUnknown("Expected an object key or }."); return ReportUnknown("Expected an object key or }.",
ParseErrorType::EXPECTED_OBJECT_KEY_OR_BRACES);
} }
// Close the object and return. This allows for trailing commas. // Close the object and return. This allows for trailing commas.
@ -711,11 +743,13 @@ util::Status JsonStreamParser::ParseEntry(TokenType type) {
result = ParseKey(); result = ParseKey();
if (result.ok() && (key_ == kKeywordNull || key_ == kKeywordTrue || if (result.ok() && (key_ == kKeywordNull || key_ == kKeywordTrue ||
key_ == kKeywordFalse)) { key_ == kKeywordFalse)) {
result = ReportFailure("Expected an object key or }."); result = ReportFailure("Expected an object key or }.",
ParseErrorType::EXPECTED_OBJECT_KEY_OR_BRACES);
} }
} else { } else {
// Unknown key type, report an error. // Unknown key type, report an error.
result = ReportFailure("Expected an object key or }."); result = ReportFailure("Expected an object key or }.",
ParseErrorType::EXPECTED_OBJECT_KEY_OR_BRACES);
} }
// On success we next expect an entry mid ':' then an object mid ',' or '}' // On success we next expect an entry mid ':' then an object mid ',' or '}'
if (result.ok()) { if (result.ok()) {
@ -727,14 +761,16 @@ util::Status JsonStreamParser::ParseEntry(TokenType type) {
util::Status JsonStreamParser::ParseEntryMid(TokenType type) { util::Status JsonStreamParser::ParseEntryMid(TokenType type) {
if (type == UNKNOWN) { if (type == UNKNOWN) {
return ReportUnknown("Expected : between key:value pair."); return ReportUnknown("Expected : between key:value pair.",
ParseErrorType::EXPECTED_COLON);
} }
if (type == ENTRY_SEPARATOR) { if (type == ENTRY_SEPARATOR) {
Advance(); Advance();
stack_.push(VALUE); stack_.push(VALUE);
return util::Status(); return util::Status();
} }
return ReportFailure("Expected : between key:value pair."); return ReportFailure("Expected : between key:value pair.",
ParseErrorType::EXPECTED_COLON);
} }
util::Status JsonStreamParser::HandleBeginArray() { util::Status JsonStreamParser::HandleBeginArray() {
@ -748,7 +784,8 @@ util::Status JsonStreamParser::HandleBeginArray() {
util::Status JsonStreamParser::ParseArrayValue(TokenType type) { util::Status JsonStreamParser::ParseArrayValue(TokenType type) {
if (type == UNKNOWN) { if (type == UNKNOWN) {
return ReportUnknown("Expected a value or ] within an array."); return ReportUnknown("Expected a value or ] within an array.",
ParseErrorType::EXPECTED_VALUE_OR_BRACKET);
} }
if (type == END_ARRAY) { if (type == END_ARRAY) {
@ -772,7 +809,8 @@ util::Status JsonStreamParser::ParseArrayValue(TokenType type) {
util::Status JsonStreamParser::ParseArrayMid(TokenType type) { util::Status JsonStreamParser::ParseArrayMid(TokenType type) {
if (type == UNKNOWN) { if (type == UNKNOWN) {
return ReportUnknown("Expected , or ] after array value."); return ReportUnknown("Expected , or ] after array value.",
ParseErrorType::EXPECTED_COMMA_OR_BRACKET);
} }
if (type == END_ARRAY) { if (type == END_ARRAY) {
@ -788,7 +826,8 @@ util::Status JsonStreamParser::ParseArrayMid(TokenType type) {
return util::Status(); return util::Status();
} }
// Illegal token after array value. // Illegal token after array value.
return ReportFailure("Expected , or ] after array value."); return ReportFailure("Expected , or ] after array value.",
ParseErrorType::EXPECTED_COMMA_OR_BRACKET);
} }
util::Status JsonStreamParser::ParseTrue() { util::Status JsonStreamParser::ParseTrue() {
@ -824,7 +863,8 @@ bool JsonStreamParser::IsEmptyNullAllowed(TokenType type) {
stack_.top() == OBJ_MID; stack_.top() == OBJ_MID;
} }
util::Status JsonStreamParser::ReportFailure(StringPiece message) { util::Status JsonStreamParser::ReportFailure(StringPiece message,
ParseErrorType parse_code) {
static const int kContextLength = 20; static const int kContextLength = 20;
const char* p_start = p_.data(); const char* p_start = p_.data();
const char* json_start = json_.data(); const char* json_start = json_.data();
@ -834,19 +874,24 @@ util::Status JsonStreamParser::ReportFailure(StringPiece message) {
StringPiece segment(begin, end - begin); StringPiece segment(begin, end - begin);
std::string location(p_start - begin, ' '); std::string location(p_start - begin, ' ');
location.push_back('^'); location.push_back('^');
return util::Status(util::error::INVALID_ARGUMENT, auto status =
StrCat(message, "\n", segment, "\n", location)); util::Status(util::error::INVALID_ARGUMENT,
StrCat(message, "\n", segment, "\n", location));
return status;
} }
util::Status JsonStreamParser::ReportUnknown(StringPiece message) { util::Status JsonStreamParser::ReportUnknown(StringPiece message,
ParseErrorType parse_code) {
// If we aren't finishing the parse, cancel parsing and try later. // If we aren't finishing the parse, cancel parsing and try later.
if (!finishing_) { if (!finishing_) {
return util::Status(util::error::CANCELLED, ""); return util::Status(util::error::CANCELLED, "");
} }
if (p_.empty()) { if (p_.empty()) {
return ReportFailure(StrCat("Unexpected end of string. ", message)); return ReportFailure(StrCat("Unexpected end of string. ", message),
parse_code);
} }
return ReportFailure(message); return ReportFailure(message, parse_code);
} }
util::Status JsonStreamParser::IncrementRecursionDepth( util::Status JsonStreamParser::IncrementRecursionDepth(
@ -864,6 +909,9 @@ void JsonStreamParser::SkipWhitespace() {
while (!p_.empty() && ascii_isspace(*p_.data())) { while (!p_.empty() && ascii_isspace(*p_.data())) {
Advance(); Advance();
} }
if (!p_.empty() && !ascii_isspace(*p_.data())) {
seen_non_whitespace_ = true;
}
} }
void JsonStreamParser::Advance() { void JsonStreamParser::Advance() {
@ -878,11 +926,13 @@ util::Status JsonStreamParser::ParseKey() {
if (allow_permissive_key_naming_) { if (allow_permissive_key_naming_) {
if (!ConsumeKeyPermissive(&p_, &key_)) { if (!ConsumeKeyPermissive(&p_, &key_)) {
return ReportFailure("Invalid key or variable name."); return ReportFailure("Invalid key or variable name.",
ParseErrorType::INVALID_KEY_OR_VARIABLE_NAME);
} }
} else { } else {
if (!ConsumeKey(&p_, &key_)) { if (!ConsumeKey(&p_, &key_)) {
return ReportFailure("Invalid key or variable name."); return ReportFailure("Invalid key or variable name.",
ParseErrorType::INVALID_KEY_OR_VARIABLE_NAME);
} }
} }

@ -31,6 +31,7 @@
#ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_JSON_STREAM_PARSER_H__ #ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_JSON_STREAM_PARSER_H__
#define GOOGLE_PROTOBUF_UTIL_CONVERTER_JSON_STREAM_PARSER_H__ #define GOOGLE_PROTOBUF_UTIL_CONVERTER_JSON_STREAM_PARSER_H__
#include <cstdint>
#include <stack> #include <stack>
#include <string> #include <string>
@ -46,6 +47,7 @@ namespace protobuf {
namespace util { namespace util {
namespace converter { namespace converter {
class ObjectWriter; class ObjectWriter;
// A JSON parser that can parse a stream of JSON chunks rather than needing the // A JSON parser that can parse a stream of JSON chunks rather than needing the
@ -74,11 +76,17 @@ class PROTOBUF_EXPORT JsonStreamParser {
explicit JsonStreamParser(ObjectWriter* ow); explicit JsonStreamParser(ObjectWriter* ow);
virtual ~JsonStreamParser(); virtual ~JsonStreamParser();
// Parses a UTF-8 encoded JSON string from a StringPiece. // Parses a UTF-8 encoded JSON string from a StringPiece. If the returned
// status is non-ok, the status might contain a payload ParseErrorType with
// type_url kParseErrorTypeUrl and a payload containing string snippet of the
// error with type_url kParseErrorSnippetUrl.
util::Status Parse(StringPiece json); util::Status Parse(StringPiece json);
// Finish parsing the JSON string. // Finish parsing the JSON string. If the returned status is non-ok, the
// status might contain a payload ParseErrorType with type_url
// kParseErrorTypeUrl and a payload containing string snippet of the error
// with type_url kParseErrorSnippetUrl.
util::Status FinishParse(); util::Status FinishParse();
@ -89,6 +97,30 @@ class PROTOBUF_EXPORT JsonStreamParser {
max_recursion_depth_ = max_depth; max_recursion_depth_ = max_depth;
} }
// Denotes the cause of error.
enum ParseErrorType {
UNKNOWN_PARSE_ERROR,
OCTAL_OR_HEX_ARE_NOT_VALID_JSON_VALUES,
EXPECTED_COLON,
EXPECTED_COMMA_OR_BRACKET,
EXPECTED_VALUE,
EXPECTED_COMMA_OR_BRACES,
EXPECTED_OBJECT_KEY_OR_BRACES,
EXPECTED_VALUE_OR_BRACKET,
INVALID_KEY_OR_VARIABLE_NAME,
NON_UTF_8,
PARSING_TERMINATED_BEFORE_END_OF_INPUT,
UNEXPECTED_TOKEN,
EXPECTED_CLOSING_QUOTE,
ILLEGAL_HEX_STRING,
INVALID_ESCAPE_SEQUENCE,
MISSING_LOW_SURROGATE,
INVALID_LOW_SURROGATE,
INVALID_UNICODE,
UNABLE_TO_PARSE_NUMBER,
NUMBER_EXCEEDS_RANGE_DOUBLE
};
private: private:
friend class JsonStreamParserTest; friend class JsonStreamParserTest;
// Return the current recursion depth. // Return the current recursion depth.
@ -125,8 +157,8 @@ class PROTOBUF_EXPORT JsonStreamParser {
Type type; Type type;
union { union {
double double_val; double double_val;
int64 int_val; int64_t int_val;
uint64 uint_val; uint64_t uint_val;
}; };
}; };
@ -198,13 +230,18 @@ class PROTOBUF_EXPORT JsonStreamParser {
// Whether an empty-null is allowed in the current state. // Whether an empty-null is allowed in the current state.
bool IsEmptyNullAllowed(TokenType type); bool IsEmptyNullAllowed(TokenType type);
// Whether the whole input is all whitespaces.
bool IsInputAllWhiteSpaces(TokenType type);
// Report a failure as a util::Status. // Report a failure as a util::Status.
util::Status ReportFailure(StringPiece message); util::Status ReportFailure(StringPiece message,
ParseErrorType parse_code);
// Report a failure due to an UNKNOWN token type. We check if we hit the // Report a failure due to an UNKNOWN token type. We check if we hit the
// end of the stream and if we're finishing or not to detect what type of // end of the stream and if we're finishing or not to detect what type of
// status to return in this case. // status to return in this case.
util::Status ReportUnknown(StringPiece message); util::Status ReportUnknown(StringPiece message,
ParseErrorType parse_code);
// Helper function to check recursion depth and increment it. It will return // Helper function to check recursion depth and increment it. It will return
// Status::OK if the current depth is allowed. Otherwise an error is returned. // Status::OK if the current depth is allowed. Otherwise an error is returned.
@ -253,6 +290,15 @@ class PROTOBUF_EXPORT JsonStreamParser {
// trying during the next chunk, but during FinishParse() it is an error. // trying during the next chunk, but during FinishParse() it is an error.
bool finishing_; bool finishing_;
// Whether non whitespace tokens have been seen during parsing.
// It is used to handle the case of a pure whitespace stream input.
bool seen_non_whitespace_;
// The JsonStreamParser requires a root element by default and it will raise
// error if the root element is missing. If `allow_no_root_element_` is true,
// the JsonStreamParser can also handle this case.
bool allow_no_root_element_;
// String we parsed during a call to ParseStringHelper(). // String we parsed during a call to ParseStringHelper().
StringPiece parsed_; StringPiece parsed_;

@ -30,6 +30,8 @@
#include <google/protobuf/util/internal/json_stream_parser.h> #include <google/protobuf/util/internal/json_stream_parser.h>
#include <cstdint>
#include <google/protobuf/stubs/logging.h> #include <google/protobuf/stubs/logging.h>
#include <google/protobuf/stubs/common.h> #include <google/protobuf/stubs/common.h>
#include <google/protobuf/util/internal/expecting_objectwriter.h> #include <google/protobuf/util/internal/expecting_objectwriter.h>
@ -42,11 +44,11 @@
namespace google { namespace google {
namespace protobuf { namespace protobuf {
namespace util { namespace util {
namespace error {
using util::error::INVALID_ARGUMENT;
} // namespace error
namespace converter { namespace converter {
using ParseErrorType =
::google::protobuf::util::converter::JsonStreamParser::ParseErrorType;
// Tests for the JSON Stream Parser. These tests are intended to be // Tests for the JSON Stream Parser. These tests are intended to be
// comprehensive and cover the following: // comprehensive and cover the following:
@ -141,6 +143,17 @@ class JsonStreamParserTest : public ::testing::Test {
EXPECT_EQ(error_prefix, error_message.substr(0, error_prefix.size())); EXPECT_EQ(error_prefix, error_message.substr(0, error_prefix.size()));
} }
void DoErrorTest(
StringPiece json, int split, StringPiece error_prefix,
ParseErrorType expected_parse_error_type,
std::function<void(JsonStreamParser*)> setup = [](JsonStreamParser* p) {
}) {
util::Status result = RunTest(json, split, setup);
EXPECT_EQ(util::error::INVALID_ARGUMENT, result.code());
StringPiece error_message(result.error_message());
EXPECT_EQ(error_prefix, error_message.substr(0, error_prefix.size()));
}
#ifndef _MSC_VER #ifndef _MSC_VER
// TODO(xiaofeng): We have to disable InSequence check for MSVC because it // TODO(xiaofeng): We have to disable InSequence check for MSVC because it
@ -233,7 +246,7 @@ TEST_F(JsonStreamParserTest, SimpleInt) {
TEST_F(JsonStreamParserTest, SimpleNegativeInt) { TEST_F(JsonStreamParserTest, SimpleNegativeInt) {
StringPiece str = "-79497823553162765"; StringPiece str = "-79497823553162765";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.RenderInt64("", int64{-79497823553162765}); ow_.RenderInt64("", int64_t{-79497823553162765});
DoTest(str, i); DoTest(str, i);
} }
} }
@ -241,7 +254,7 @@ TEST_F(JsonStreamParserTest, SimpleNegativeInt) {
TEST_F(JsonStreamParserTest, SimpleUnsignedInt) { TEST_F(JsonStreamParserTest, SimpleUnsignedInt) {
StringPiece str = "11779497823553162765"; StringPiece str = "11779497823553162765";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.RenderUint64("", uint64{11779497823553162765u}); ow_.RenderUint64("", uint64_t{11779497823553162765u});
DoTest(str, i); DoTest(str, i);
} }
} }
@ -249,26 +262,31 @@ TEST_F(JsonStreamParserTest, SimpleUnsignedInt) {
TEST_F(JsonStreamParserTest, OctalNumberIsInvalid) { TEST_F(JsonStreamParserTest, OctalNumberIsInvalid) {
StringPiece str = "01234"; StringPiece str = "01234";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Octal/hex numbers are not valid JSON values."); DoErrorTest(str, i, "Octal/hex numbers are not valid JSON values.",
ParseErrorType::OCTAL_OR_HEX_ARE_NOT_VALID_JSON_VALUES);
} }
str = "-01234"; str = "-01234";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Octal/hex numbers are not valid JSON values."); DoErrorTest(str, i, "Octal/hex numbers are not valid JSON values.",
ParseErrorType::OCTAL_OR_HEX_ARE_NOT_VALID_JSON_VALUES);
} }
} }
TEST_F(JsonStreamParserTest, HexNumberIsInvalid) { TEST_F(JsonStreamParserTest, HexNumberIsInvalid) {
StringPiece str = "0x1234"; StringPiece str = "0x1234";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Octal/hex numbers are not valid JSON values."); DoErrorTest(str, i, "Octal/hex numbers are not valid JSON values.",
ParseErrorType::OCTAL_OR_HEX_ARE_NOT_VALID_JSON_VALUES);
} }
str = "-0x1234"; str = "-0x1234";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Octal/hex numbers are not valid JSON values."); DoErrorTest(str, i, "Octal/hex numbers are not valid JSON values.",
ParseErrorType::OCTAL_OR_HEX_ARE_NOT_VALID_JSON_VALUES);
} }
str = "12x34"; str = "12x34";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Unable to parse number."); DoErrorTest(str, i, "Unable to parse number.",
ParseErrorType::UNABLE_TO_PARSE_NUMBER);
} }
} }
@ -338,14 +356,16 @@ TEST_F(JsonStreamParserTest, UnquotedObjectKeyWithReservedPrefxes) {
TEST_F(JsonStreamParserTest, UnquotedObjectKeyWithReservedKeyword) { TEST_F(JsonStreamParserTest, UnquotedObjectKeyWithReservedKeyword) {
StringPiece str = "{ null: \"a\", true: \"b\", false: \"c\"}"; StringPiece str = "{ null: \"a\", true: \"b\", false: \"c\"}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Expected an object key or }."); DoErrorTest(str, i, "Expected an object key or }.",
ParseErrorType::EXPECTED_OBJECT_KEY_OR_BRACES);
} }
} }
TEST_F(JsonStreamParserTest, UnquotedObjectKeyWithEmbeddedNonAlphanumeric) { TEST_F(JsonStreamParserTest, UnquotedObjectKeyWithEmbeddedNonAlphanumeric) {
StringPiece str = "{ foo-bar-baz: \"a\"}"; StringPiece str = "{ foo-bar-baz: \"a\"}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Expected : between key:value pair."); DoErrorTest(str, i, "Expected : between key:value pair.",
ParseErrorType::EXPECTED_COLON);
} }
} }
@ -376,7 +396,7 @@ TEST_F(JsonStreamParserTest, ArrayComplexValues) {
->RenderInt64("", -127) ->RenderInt64("", -127)
->RenderDouble("", 45.3) ->RenderDouble("", 45.3)
->RenderDouble("", -1056.4) ->RenderDouble("", -1056.4)
->RenderUint64("", uint64{11779497823553162765u}) ->RenderUint64("", uint64_t{11779497823553162765u})
->EndList() ->EndList()
->StartObject("") ->StartObject("")
->RenderBool("key", true) ->RenderBool("key", true)
@ -404,7 +424,7 @@ TEST_F(JsonStreamParserTest, ObjectValues) {
->RenderInt64("ni", -127) ->RenderInt64("ni", -127)
->RenderDouble("pd", 45.3) ->RenderDouble("pd", 45.3)
->RenderDouble("nd", -1056.4) ->RenderDouble("nd", -1056.4)
->RenderUint64("pl", uint64{11779497823553162765u}) ->RenderUint64("pl", uint64_t{11779497823553162765u})
->StartList("l") ->StartList("l")
->StartList("") ->StartList("")
->EndList() ->EndList()
@ -421,13 +441,16 @@ TEST_F(JsonStreamParserTest, ObjectValues) {
TEST_F(JsonStreamParserTest, RejectNonUtf8WhenNotCoerced) { TEST_F(JsonStreamParserTest, RejectNonUtf8WhenNotCoerced) {
StringPiece json = "{\"address\":\xFF\"חרושת 23, רעננה, ישראל\"}"; StringPiece json = "{\"address\":\xFF\"חרושת 23, רעננה, ישראל\"}";
for (int i = 0; i <= json.length(); ++i) { for (int i = 0; i <= json.length(); ++i) {
DoErrorTest(json, i, "Encountered non UTF-8 code points."); DoErrorTest(json, i, "Encountered non UTF-8 code points.",
ParseErrorType::NON_UTF_8);
} }
json = "{\"address\": \"חרושת 23,\xFFרעננה, ישראל\"}"; json = "{\"address\": \"חרושת 23,\xFFרעננה, ישראל\"}";
for (int i = 0; i <= json.length(); ++i) { for (int i = 0; i <= json.length(); ++i) {
DoErrorTest(json, i, "Encountered non UTF-8 code points."); DoErrorTest(json, i, "Encountered non UTF-8 code points.",
ParseErrorType::NON_UTF_8);
} }
DoErrorTest("\xFF{}", 0, "Encountered non UTF-8 code points."); DoErrorTest("\xFF{}", 0, "Encountered non UTF-8 code points.",
ParseErrorType::NON_UTF_8);
} }
// - unicode handling in strings // - unicode handling in strings
@ -460,7 +483,8 @@ TEST_F(JsonStreamParserTest, UnicodeEscapingInvalidCodePointWhenNotCoerced) {
// A low surrogate alone. // A low surrogate alone.
StringPiece str = "[\"\\ude36\"]"; StringPiece str = "[\"\\ude36\"]";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Invalid unicode code point."); DoErrorTest(str, i, "Invalid unicode code point.",
ParseErrorType::INVALID_UNICODE);
} }
} }
@ -468,22 +492,26 @@ TEST_F(JsonStreamParserTest, UnicodeEscapingMissingLowSurrogateWhenNotCoerced) {
// A high surrogate alone. // A high surrogate alone.
StringPiece str = "[\"\\ud83d\"]"; StringPiece str = "[\"\\ud83d\"]";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Missing low surrogate."); DoErrorTest(str, i, "Missing low surrogate.",
ParseErrorType::MISSING_LOW_SURROGATE);
} }
// A high surrogate with some trailing characters. // A high surrogate with some trailing characters.
str = "[\"\\ud83d|ude36\"]"; str = "[\"\\ud83d|ude36\"]";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Missing low surrogate."); DoErrorTest(str, i, "Missing low surrogate.",
ParseErrorType::MISSING_LOW_SURROGATE);
} }
// A high surrogate with half a low surrogate. // A high surrogate with half a low surrogate.
str = "[\"\\ud83d\\ude--\"]"; str = "[\"\\ud83d\\ude--\"]";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Invalid escape sequence."); DoErrorTest(str, i, "Invalid escape sequence.",
ParseErrorType::INVALID_ESCAPE_SEQUENCE);
} }
// Two high surrogates. // Two high surrogates.
str = "[\"\\ud83d\\ud83d\"]"; str = "[\"\\ud83d\\ud83d\"]";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Invalid low surrogate."); DoErrorTest(str, i, "Invalid low surrogate.",
ParseErrorType::INVALID_LOW_SURROGATE);
} }
} }
@ -527,21 +555,24 @@ TEST_F(JsonStreamParserTest, ExtraTextAfterTrue) {
StringPiece str = "truee"; StringPiece str = "truee";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.RenderBool("", true); ow_.RenderBool("", true);
DoErrorTest(str, i, "Parsing terminated before end of input."); DoErrorTest(str, i, "Parsing terminated before end of input.",
ParseErrorType::PARSING_TERMINATED_BEFORE_END_OF_INPUT);
} }
} }
TEST_F(JsonStreamParserTest, InvalidNumberDashOnly) { TEST_F(JsonStreamParserTest, InvalidNumberDashOnly) {
StringPiece str = "-"; StringPiece str = "-";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Unable to parse number."); DoErrorTest(str, i, "Unable to parse number.",
ParseErrorType::UNABLE_TO_PARSE_NUMBER);
} }
} }
TEST_F(JsonStreamParserTest, InvalidNumberDashName) { TEST_F(JsonStreamParserTest, InvalidNumberDashName) {
StringPiece str = "-foo"; StringPiece str = "-foo";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Unable to parse number."); DoErrorTest(str, i, "Unable to parse number.",
ParseErrorType::UNABLE_TO_PARSE_NUMBER);
} }
} }
@ -549,7 +580,7 @@ TEST_F(JsonStreamParserTest, InvalidLiteralInArray) {
StringPiece str = "[nule]"; StringPiece str = "[nule]";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartList(""); ow_.StartList("");
DoErrorTest(str, i, "Unexpected token."); DoErrorTest(str, i, "Unexpected token.", ParseErrorType::UNEXPECTED_TOKEN);
} }
} }
@ -557,7 +588,8 @@ TEST_F(JsonStreamParserTest, InvalidLiteralInObject) {
StringPiece str = "{123false}"; StringPiece str = "{123false}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject(""); ow_.StartObject("");
DoErrorTest(str, i, "Expected an object key or }."); DoErrorTest(str, i, "Expected an object key or }.",
ParseErrorType::EXPECTED_OBJECT_KEY_OR_BRACES);
} }
} }
@ -565,14 +597,16 @@ TEST_F(JsonStreamParserTest, InvalidLiteralInObject) {
TEST_F(JsonStreamParserTest, MismatchedSingleQuotedLiteral) { TEST_F(JsonStreamParserTest, MismatchedSingleQuotedLiteral) {
StringPiece str = "'Some str\""; StringPiece str = "'Some str\"";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Closing quote expected in string."); DoErrorTest(str, i, "Closing quote expected in string.",
ParseErrorType::EXPECTED_CLOSING_QUOTE);
} }
} }
TEST_F(JsonStreamParserTest, MismatchedDoubleQuotedLiteral) { TEST_F(JsonStreamParserTest, MismatchedDoubleQuotedLiteral) {
StringPiece str = "\"Another string that ends poorly!'"; StringPiece str = "\"Another string that ends poorly!'";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Closing quote expected in string."); DoErrorTest(str, i, "Closing quote expected in string.",
ParseErrorType::EXPECTED_CLOSING_QUOTE);
} }
} }
@ -580,14 +614,16 @@ TEST_F(JsonStreamParserTest, MismatchedDoubleQuotedLiteral) {
TEST_F(JsonStreamParserTest, UnterminatedLiteralString) { TEST_F(JsonStreamParserTest, UnterminatedLiteralString) {
StringPiece str = "\"Forgot the rest of i"; StringPiece str = "\"Forgot the rest of i";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Closing quote expected in string."); DoErrorTest(str, i, "Closing quote expected in string.",
ParseErrorType::EXPECTED_CLOSING_QUOTE);
} }
} }
TEST_F(JsonStreamParserTest, UnterminatedStringEscape) { TEST_F(JsonStreamParserTest, UnterminatedStringEscape) {
StringPiece str = "\"Forgot the rest of \\"; StringPiece str = "\"Forgot the rest of \\";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Closing quote expected in string."); DoErrorTest(str, i, "Closing quote expected in string.",
ParseErrorType::EXPECTED_CLOSING_QUOTE);
} }
} }
@ -595,7 +631,8 @@ TEST_F(JsonStreamParserTest, UnterminatedStringInArray) {
StringPiece str = "[\"Forgot to close the string]"; StringPiece str = "[\"Forgot to close the string]";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartList(""); ow_.StartList("");
DoErrorTest(str, i, "Closing quote expected in string."); DoErrorTest(str, i, "Closing quote expected in string.",
ParseErrorType::EXPECTED_CLOSING_QUOTE);
} }
} }
@ -603,7 +640,8 @@ TEST_F(JsonStreamParserTest, UnterminatedStringInObject) {
StringPiece str = "{f: \"Forgot to close the string}"; StringPiece str = "{f: \"Forgot to close the string}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject(""); ow_.StartObject("");
DoErrorTest(str, i, "Closing quote expected in string."); DoErrorTest(str, i, "Closing quote expected in string.",
ParseErrorType::EXPECTED_CLOSING_QUOTE);
} }
} }
@ -611,7 +649,8 @@ TEST_F(JsonStreamParserTest, UnterminatedObject) {
StringPiece str = "{"; StringPiece str = "{";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject(""); ow_.StartObject("");
DoErrorTest(str, i, "Unexpected end of string."); DoErrorTest(str, i, "Unexpected end of string.",
ParseErrorType::EXPECTED_OBJECT_KEY_OR_BRACES);
} }
} }
@ -621,7 +660,8 @@ TEST_F(JsonStreamParserTest, MismatchedCloseObject) {
StringPiece str = "{'key': true]"; StringPiece str = "{'key': true]";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject("")->RenderBool("key", true); ow_.StartObject("")->RenderBool("key", true);
DoErrorTest(str, i, "Expected , or } after key:value pair."); DoErrorTest(str, i, "Expected , or } after key:value pair.",
ParseErrorType::EXPECTED_COMMA_OR_BRACES);
} }
} }
@ -629,7 +669,8 @@ TEST_F(JsonStreamParserTest, MismatchedCloseArray) {
StringPiece str = "[true, null}"; StringPiece str = "[true, null}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartList("")->RenderBool("", true)->RenderNull(""); ow_.StartList("")->RenderBool("", true)->RenderNull("");
DoErrorTest(str, i, "Expected , or ] after array value."); DoErrorTest(str, i, "Expected , or ] after array value.",
ParseErrorType::EXPECTED_COMMA_OR_BRACKET);
} }
} }
@ -638,7 +679,8 @@ TEST_F(JsonStreamParserTest, InvalidNumericObjectKey) {
StringPiece str = "{42: true}"; StringPiece str = "{42: true}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject(""); ow_.StartObject("");
DoErrorTest(str, i, "Expected an object key or }."); DoErrorTest(str, i, "Expected an object key or }.",
ParseErrorType::EXPECTED_OBJECT_KEY_OR_BRACES);
} }
} }
@ -646,7 +688,8 @@ TEST_F(JsonStreamParserTest, InvalidLiteralObjectInObject) {
StringPiece str = "{{bob: true}}"; StringPiece str = "{{bob: true}}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject(""); ow_.StartObject("");
DoErrorTest(str, i, "Expected an object key or }."); DoErrorTest(str, i, "Expected an object key or }.",
ParseErrorType::EXPECTED_OBJECT_KEY_OR_BRACES);
} }
} }
@ -654,7 +697,8 @@ TEST_F(JsonStreamParserTest, InvalidLiteralArrayInObject) {
StringPiece str = "{[null]}"; StringPiece str = "{[null]}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject(""); ow_.StartObject("");
DoErrorTest(str, i, "Expected an object key or }."); DoErrorTest(str, i, "Expected an object key or }.",
ParseErrorType::EXPECTED_OBJECT_KEY_OR_BRACES);
} }
} }
@ -662,7 +706,8 @@ TEST_F(JsonStreamParserTest, InvalidLiteralValueInObject) {
StringPiece str = "{false}"; StringPiece str = "{false}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject(""); ow_.StartObject("");
DoErrorTest(str, i, "Expected an object key or }."); DoErrorTest(str, i, "Expected an object key or }.",
ParseErrorType::EXPECTED_OBJECT_KEY_OR_BRACES);
} }
} }
@ -670,7 +715,8 @@ TEST_F(JsonStreamParserTest, MissingColonAfterStringInObject) {
StringPiece str = "{\"key\"}"; StringPiece str = "{\"key\"}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject(""); ow_.StartObject("");
DoErrorTest(str, i, "Expected : between key:value pair."); DoErrorTest(str, i, "Expected : between key:value pair.",
ParseErrorType::EXPECTED_COLON);
} }
} }
@ -678,7 +724,8 @@ TEST_F(JsonStreamParserTest, MissingColonAfterKeyInObject) {
StringPiece str = "{key}"; StringPiece str = "{key}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject(""); ow_.StartObject("");
DoErrorTest(str, i, "Expected : between key:value pair."); DoErrorTest(str, i, "Expected : between key:value pair.",
ParseErrorType::EXPECTED_COLON);
} }
} }
@ -686,7 +733,8 @@ TEST_F(JsonStreamParserTest, EndOfTextAfterKeyInObject) {
StringPiece str = "{key"; StringPiece str = "{key";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject(""); ow_.StartObject("");
DoErrorTest(str, i, "Unexpected end of string."); DoErrorTest(str, i, "Unexpected end of string.",
ParseErrorType::EXPECTED_COLON);
} }
} }
@ -694,7 +742,7 @@ TEST_F(JsonStreamParserTest, MissingValueAfterColonInObject) {
StringPiece str = "{key:}"; StringPiece str = "{key:}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject(""); ow_.StartObject("");
DoErrorTest(str, i, "Unexpected token."); DoErrorTest(str, i, "Unexpected token.", ParseErrorType::UNEXPECTED_TOKEN);
} }
} }
@ -702,7 +750,8 @@ TEST_F(JsonStreamParserTest, MissingCommaBetweenObjectEntries) {
StringPiece str = "{key:20 'hello': true}"; StringPiece str = "{key:20 'hello': true}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject("")->RenderUint64("key", 20); ow_.StartObject("")->RenderUint64("key", 20);
DoErrorTest(str, i, "Expected , or } after key:value pair."); DoErrorTest(str, i, "Expected , or } after key:value pair.",
ParseErrorType::EXPECTED_COMMA_OR_BRACES);
} }
} }
@ -710,7 +759,8 @@ TEST_F(JsonStreamParserTest, InvalidLiteralAsObjectKey) {
StringPiece str = "{false: 20}"; StringPiece str = "{false: 20}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject(""); ow_.StartObject("");
DoErrorTest(str, i, "Expected an object key or }."); DoErrorTest(str, i, "Expected an object key or }.",
ParseErrorType::EXPECTED_OBJECT_KEY_OR_BRACES);
} }
} }
@ -718,7 +768,8 @@ TEST_F(JsonStreamParserTest, ExtraCharactersAfterObject) {
StringPiece str = "{}}"; StringPiece str = "{}}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject("")->EndObject(); ow_.StartObject("")->EndObject();
DoErrorTest(str, i, "Parsing terminated before end of input."); DoErrorTest(str, i, "Parsing terminated before end of input.",
ParseErrorType::PARSING_TERMINATED_BEFORE_END_OF_INPUT);
} }
} }
@ -742,12 +793,14 @@ TEST_F(JsonStreamParserTest, DoubleTooBig) {
StringPiece str = "[1.89769e+308]"; StringPiece str = "[1.89769e+308]";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartList(""); ow_.StartList("");
DoErrorTest(str, i, "Number exceeds the range of double."); DoErrorTest(str, i, "Number exceeds the range of double.",
ParseErrorType::NUMBER_EXCEEDS_RANGE_DOUBLE);
} }
str = "[-1.89769e+308]"; str = "[-1.89769e+308]";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartList(""); ow_.StartList("");
DoErrorTest(str, i, "Number exceeds the range of double."); DoErrorTest(str, i, "Number exceeds the range of double.",
ParseErrorType::NUMBER_EXCEEDS_RANGE_DOUBLE);
} }
} }
@ -756,7 +809,8 @@ TEST_F(JsonStreamParserTest, DoubleTooBig) {
TEST_F(JsonStreamParserTest, UnfinishedEscape) { TEST_F(JsonStreamParserTest, UnfinishedEscape) {
StringPiece str = "\"\\"; StringPiece str = "\"\\";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Closing quote expected in string."); DoErrorTest(str, i, "Closing quote expected in string.",
ParseErrorType::EXPECTED_CLOSING_QUOTE);
} }
} }
@ -764,7 +818,8 @@ TEST_F(JsonStreamParserTest, UnfinishedEscape) {
TEST_F(JsonStreamParserTest, UnfinishedUnicodeEscape) { TEST_F(JsonStreamParserTest, UnfinishedUnicodeEscape) {
StringPiece str = "\"\\u"; StringPiece str = "\"\\u";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Illegal hex string."); DoErrorTest(str, i, "Illegal hex string.",
ParseErrorType::ILLEGAL_HEX_STRING);
} }
} }
@ -772,7 +827,8 @@ TEST_F(JsonStreamParserTest, UnfinishedUnicodeEscape) {
TEST_F(JsonStreamParserTest, UnicodeEscapeCutOff) { TEST_F(JsonStreamParserTest, UnicodeEscapeCutOff) {
StringPiece str = "\"\\u12"; StringPiece str = "\"\\u12";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Illegal hex string."); DoErrorTest(str, i, "Illegal hex string.",
ParseErrorType::ILLEGAL_HEX_STRING);
} }
} }
@ -780,7 +836,8 @@ TEST_F(JsonStreamParserTest, UnicodeEscapeCutOff) {
TEST_F(JsonStreamParserTest, BracketedUnicodeEscape) { TEST_F(JsonStreamParserTest, BracketedUnicodeEscape) {
StringPiece str = "\"\\u{1f36f}\""; StringPiece str = "\"\\u{1f36f}\"";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Invalid escape sequence."); DoErrorTest(str, i, "Invalid escape sequence.",
ParseErrorType::INVALID_ESCAPE_SEQUENCE);
} }
} }
@ -788,7 +845,8 @@ TEST_F(JsonStreamParserTest, BracketedUnicodeEscape) {
TEST_F(JsonStreamParserTest, UnicodeEscapeInvalidCharacters) { TEST_F(JsonStreamParserTest, UnicodeEscapeInvalidCharacters) {
StringPiece str = "\"\\u12$4hello"; StringPiece str = "\"\\u12$4hello";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Invalid escape sequence."); DoErrorTest(str, i, "Invalid escape sequence.",
ParseErrorType::INVALID_ESCAPE_SEQUENCE);
} }
} }
@ -796,7 +854,8 @@ TEST_F(JsonStreamParserTest, UnicodeEscapeInvalidCharacters) {
TEST_F(JsonStreamParserTest, UnicodeEscapeLowHalfSurrogateInvalidCharacters) { TEST_F(JsonStreamParserTest, UnicodeEscapeLowHalfSurrogateInvalidCharacters) {
StringPiece str = "\"\\ud800\\udcfg\""; StringPiece str = "\"\\ud800\\udcfg\"";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Invalid escape sequence."); DoErrorTest(str, i, "Invalid escape sequence.",
ParseErrorType::INVALID_ESCAPE_SEQUENCE);
} }
} }
@ -805,7 +864,8 @@ TEST_F(JsonStreamParserTest, ExtraCommaInObject) {
StringPiece str = "{'k1': true,,'k2': false}"; StringPiece str = "{'k1': true,,'k2': false}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject("")->RenderBool("k1", true); ow_.StartObject("")->RenderBool("k1", true);
DoErrorTest(str, i, "Expected an object key or }."); DoErrorTest(str, i, "Expected an object key or }.",
ParseErrorType::EXPECTED_OBJECT_KEY_OR_BRACES);
} }
} }
@ -813,7 +873,7 @@ TEST_F(JsonStreamParserTest, ExtraCommaInArray) {
StringPiece str = "[true,,false}"; StringPiece str = "[true,,false}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartList("")->RenderBool("", true); ow_.StartList("")->RenderBool("", true);
DoErrorTest(str, i, "Unexpected token."); DoErrorTest(str, i, "Unexpected token.", ParseErrorType::UNEXPECTED_TOKEN);
} }
} }
@ -822,7 +882,8 @@ TEST_F(JsonStreamParserTest, ExtraTextAfterLiteral) {
StringPiece str = "'hello', 'world'"; StringPiece str = "'hello', 'world'";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.RenderString("", "hello"); ow_.RenderString("", "hello");
DoErrorTest(str, i, "Parsing terminated before end of input."); DoErrorTest(str, i, "Parsing terminated before end of input.",
ParseErrorType::PARSING_TERMINATED_BEFORE_END_OF_INPUT);
} }
} }
@ -830,7 +891,8 @@ TEST_F(JsonStreamParserTest, ExtraTextAfterObject) {
StringPiece str = "{'key': true} 'oops'"; StringPiece str = "{'key': true} 'oops'";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject("")->RenderBool("key", true)->EndObject(); ow_.StartObject("")->RenderBool("key", true)->EndObject();
DoErrorTest(str, i, "Parsing terminated before end of input."); DoErrorTest(str, i, "Parsing terminated before end of input.",
ParseErrorType::PARSING_TERMINATED_BEFORE_END_OF_INPUT);
} }
} }
@ -838,7 +900,8 @@ TEST_F(JsonStreamParserTest, ExtraTextAfterArray) {
StringPiece str = "[null] 'oops'"; StringPiece str = "[null] 'oops'";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartList("")->RenderNull("")->EndList(); ow_.StartList("")->RenderNull("")->EndList();
DoErrorTest(str, i, "Parsing terminated before end of input."); DoErrorTest(str, i, "Parsing terminated before end of input.",
ParseErrorType::PARSING_TERMINATED_BEFORE_END_OF_INPUT);
} }
} }
@ -846,7 +909,7 @@ TEST_F(JsonStreamParserTest, ExtraTextAfterArray) {
TEST_F(JsonStreamParserTest, UnknownCharactersAsValue) { TEST_F(JsonStreamParserTest, UnknownCharactersAsValue) {
StringPiece str = "*&#25"; StringPiece str = "*&#25";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
DoErrorTest(str, i, "Expected a value."); DoErrorTest(str, i, "Expected a value.", ParseErrorType::EXPECTED_VALUE);
} }
} }
@ -854,7 +917,8 @@ TEST_F(JsonStreamParserTest, UnknownCharactersInArray) {
StringPiece str = "[*&#25]"; StringPiece str = "[*&#25]";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartList(""); ow_.StartList("");
DoErrorTest(str, i, "Expected a value or ] within an array."); DoErrorTest(str, i, "Expected a value or ] within an array.",
ParseErrorType::EXPECTED_VALUE_OR_BRACKET);
} }
} }
@ -862,7 +926,7 @@ TEST_F(JsonStreamParserTest, UnknownCharactersInObject) {
StringPiece str = "{'key': *&#25}"; StringPiece str = "{'key': *&#25}";
for (int i = 0; i <= str.length(); ++i) { for (int i = 0; i <= str.length(); ++i) {
ow_.StartObject(""); ow_.StartObject("");
DoErrorTest(str, i, "Expected a value."); DoErrorTest(str, i, "Expected a value.", ParseErrorType::EXPECTED_VALUE);
} }
} }

@ -31,6 +31,8 @@
#ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_OBJECT_WRITER_H__ #ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_OBJECT_WRITER_H__
#define GOOGLE_PROTOBUF_UTIL_CONVERTER_OBJECT_WRITER_H__ #define GOOGLE_PROTOBUF_UTIL_CONVERTER_OBJECT_WRITER_H__
#include <cstdint>
#include <google/protobuf/stubs/common.h> #include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/strutil.h> #include <google/protobuf/stubs/strutil.h>
@ -79,16 +81,18 @@ class PROTOBUF_EXPORT ObjectWriter {
virtual ObjectWriter* RenderBool(StringPiece name, bool value) = 0; virtual ObjectWriter* RenderBool(StringPiece name, bool value) = 0;
// Renders an 32-bit integer value. // Renders an 32-bit integer value.
virtual ObjectWriter* RenderInt32(StringPiece name, int32 value) = 0; virtual ObjectWriter* RenderInt32(StringPiece name, int32_t value) = 0;
// Renders an 32-bit unsigned integer value. // Renders an 32-bit unsigned integer value.
virtual ObjectWriter* RenderUint32(StringPiece name, uint32 value) = 0; virtual ObjectWriter* RenderUint32(StringPiece name,
uint32_t value) = 0;
// Renders a 64-bit integer value. // Renders a 64-bit integer value.
virtual ObjectWriter* RenderInt64(StringPiece name, int64 value) = 0; virtual ObjectWriter* RenderInt64(StringPiece name, int64_t value) = 0;
// Renders an 64-bit unsigned integer value. // Renders an 64-bit unsigned integer value.
virtual ObjectWriter* RenderUint64(StringPiece name, uint64 value) = 0; virtual ObjectWriter* RenderUint64(StringPiece name,
uint64_t value) = 0;
// Renders a double value. // Renders a double value.

@ -30,6 +30,7 @@
#include <google/protobuf/util/internal/proto_writer.h> #include <google/protobuf/util/internal/proto_writer.h>
#include <cstdint>
#include <functional> #include <functional>
#include <stack> #include <stack>
@ -122,7 +123,7 @@ namespace {
// Writes an INT32 field, including tag to the stream. // Writes an INT32 field, including tag to the stream.
inline util::Status WriteInt32(int field_number, const DataPiece& data, inline util::Status WriteInt32(int field_number, const DataPiece& data,
CodedOutputStream* stream) { CodedOutputStream* stream) {
util::StatusOr<int32> i32 = data.ToInt32(); util::StatusOr<int32_t> i32 = data.ToInt32();
if (i32.ok()) { if (i32.ok()) {
WireFormatLite::WriteInt32(field_number, i32.value(), stream); WireFormatLite::WriteInt32(field_number, i32.value(), stream);
} }
@ -132,7 +133,7 @@ inline util::Status WriteInt32(int field_number, const DataPiece& data,
// writes an SFIXED32 field, including tag, to the stream. // writes an SFIXED32 field, including tag, to the stream.
inline util::Status WriteSFixed32(int field_number, const DataPiece& data, inline util::Status WriteSFixed32(int field_number, const DataPiece& data,
CodedOutputStream* stream) { CodedOutputStream* stream) {
util::StatusOr<int32> i32 = data.ToInt32(); util::StatusOr<int32_t> i32 = data.ToInt32();
if (i32.ok()) { if (i32.ok()) {
WireFormatLite::WriteSFixed32(field_number, i32.value(), stream); WireFormatLite::WriteSFixed32(field_number, i32.value(), stream);
} }
@ -142,7 +143,7 @@ inline util::Status WriteSFixed32(int field_number, const DataPiece& data,
// Writes an SINT32 field, including tag, to the stream. // Writes an SINT32 field, including tag, to the stream.
inline util::Status WriteSInt32(int field_number, const DataPiece& data, inline util::Status WriteSInt32(int field_number, const DataPiece& data,
CodedOutputStream* stream) { CodedOutputStream* stream) {
util::StatusOr<int32> i32 = data.ToInt32(); util::StatusOr<int32_t> i32 = data.ToInt32();
if (i32.ok()) { if (i32.ok()) {
WireFormatLite::WriteSInt32(field_number, i32.value(), stream); WireFormatLite::WriteSInt32(field_number, i32.value(), stream);
} }
@ -152,7 +153,7 @@ inline util::Status WriteSInt32(int field_number, const DataPiece& data,
// Writes a FIXED32 field, including tag, to the stream. // Writes a FIXED32 field, including tag, to the stream.
inline util::Status WriteFixed32(int field_number, const DataPiece& data, inline util::Status WriteFixed32(int field_number, const DataPiece& data,
CodedOutputStream* stream) { CodedOutputStream* stream) {
util::StatusOr<uint32> u32 = data.ToUint32(); util::StatusOr<uint32_t> u32 = data.ToUint32();
if (u32.ok()) { if (u32.ok()) {
WireFormatLite::WriteFixed32(field_number, u32.value(), stream); WireFormatLite::WriteFixed32(field_number, u32.value(), stream);
} }
@ -162,7 +163,7 @@ inline util::Status WriteFixed32(int field_number, const DataPiece& data,
// Writes a UINT32 field, including tag, to the stream. // Writes a UINT32 field, including tag, to the stream.
inline util::Status WriteUInt32(int field_number, const DataPiece& data, inline util::Status WriteUInt32(int field_number, const DataPiece& data,
CodedOutputStream* stream) { CodedOutputStream* stream) {
util::StatusOr<uint32> u32 = data.ToUint32(); util::StatusOr<uint32_t> u32 = data.ToUint32();
if (u32.ok()) { if (u32.ok()) {
WireFormatLite::WriteUInt32(field_number, u32.value(), stream); WireFormatLite::WriteUInt32(field_number, u32.value(), stream);
} }
@ -172,7 +173,7 @@ inline util::Status WriteUInt32(int field_number, const DataPiece& data,
// Writes an INT64 field, including tag, to the stream. // Writes an INT64 field, including tag, to the stream.
inline util::Status WriteInt64(int field_number, const DataPiece& data, inline util::Status WriteInt64(int field_number, const DataPiece& data,
CodedOutputStream* stream) { CodedOutputStream* stream) {
util::StatusOr<int64> i64 = data.ToInt64(); util::StatusOr<int64_t> i64 = data.ToInt64();
if (i64.ok()) { if (i64.ok()) {
WireFormatLite::WriteInt64(field_number, i64.value(), stream); WireFormatLite::WriteInt64(field_number, i64.value(), stream);
} }
@ -182,7 +183,7 @@ inline util::Status WriteInt64(int field_number, const DataPiece& data,
// Writes an SFIXED64 field, including tag, to the stream. // Writes an SFIXED64 field, including tag, to the stream.
inline util::Status WriteSFixed64(int field_number, const DataPiece& data, inline util::Status WriteSFixed64(int field_number, const DataPiece& data,
CodedOutputStream* stream) { CodedOutputStream* stream) {
util::StatusOr<int64> i64 = data.ToInt64(); util::StatusOr<int64_t> i64 = data.ToInt64();
if (i64.ok()) { if (i64.ok()) {
WireFormatLite::WriteSFixed64(field_number, i64.value(), stream); WireFormatLite::WriteSFixed64(field_number, i64.value(), stream);
} }
@ -192,7 +193,7 @@ inline util::Status WriteSFixed64(int field_number, const DataPiece& data,
// Writes an SINT64 field, including tag, to the stream. // Writes an SINT64 field, including tag, to the stream.
inline util::Status WriteSInt64(int field_number, const DataPiece& data, inline util::Status WriteSInt64(int field_number, const DataPiece& data,
CodedOutputStream* stream) { CodedOutputStream* stream) {
util::StatusOr<int64> i64 = data.ToInt64(); util::StatusOr<int64_t> i64 = data.ToInt64();
if (i64.ok()) { if (i64.ok()) {
WireFormatLite::WriteSInt64(field_number, i64.value(), stream); WireFormatLite::WriteSInt64(field_number, i64.value(), stream);
} }
@ -202,7 +203,7 @@ inline util::Status WriteSInt64(int field_number, const DataPiece& data,
// Writes a FIXED64 field, including tag, to the stream. // Writes a FIXED64 field, including tag, to the stream.
inline util::Status WriteFixed64(int field_number, const DataPiece& data, inline util::Status WriteFixed64(int field_number, const DataPiece& data,
CodedOutputStream* stream) { CodedOutputStream* stream) {
util::StatusOr<uint64> u64 = data.ToUint64(); util::StatusOr<uint64_t> u64 = data.ToUint64();
if (u64.ok()) { if (u64.ok()) {
WireFormatLite::WriteFixed64(field_number, u64.value(), stream); WireFormatLite::WriteFixed64(field_number, u64.value(), stream);
} }
@ -212,7 +213,7 @@ inline util::Status WriteFixed64(int field_number, const DataPiece& data,
// Writes a UINT64 field, including tag, to the stream. // Writes a UINT64 field, including tag, to the stream.
inline util::Status WriteUInt64(int field_number, const DataPiece& data, inline util::Status WriteUInt64(int field_number, const DataPiece& data,
CodedOutputStream* stream) { CodedOutputStream* stream) {
util::StatusOr<uint64> u64 = data.ToUint64(); util::StatusOr<uint64_t> u64 = data.ToUint64();
if (u64.ok()) { if (u64.ok()) {
WireFormatLite::WriteUInt64(field_number, u64.value(), stream); WireFormatLite::WriteUInt64(field_number, u64.value(), stream);
} }
@ -431,11 +432,11 @@ std::string ProtoWriter::ProtoElement::ToString() const {
return loc; return loc;
} }
bool ProtoWriter::ProtoElement::IsOneofIndexTaken(int32 index) { bool ProtoWriter::ProtoElement::IsOneofIndexTaken(int32_t index) {
return oneof_indices_[index]; return oneof_indices_[index];
} }
void ProtoWriter::ProtoElement::TakeOneofIndex(int32 index) { void ProtoWriter::ProtoElement::TakeOneofIndex(int32_t index) {
oneof_indices_[index] = true; oneof_indices_[index] = true;
} }
@ -801,8 +802,8 @@ void ProtoWriter::WriteRootMessage() {
// size_insert_.front().size: the size (integer) to be inserted. // size_insert_.front().size: the size (integer) to be inserted.
if (!size_insert_.empty() && curr_pos == size_insert_.front().pos) { if (!size_insert_.empty() && curr_pos == size_insert_.front().pos) {
// Varint32 occupies at most 10 bytes. // Varint32 occupies at most 10 bytes.
uint8 insert_buffer[10]; uint8_t insert_buffer[10];
uint8* insert_buffer_pos = CodedOutputStream::WriteVarint32ToArray( uint8_t* insert_buffer_pos = CodedOutputStream::WriteVarint32ToArray(
size_insert_.front().size, insert_buffer); size_insert_.front().size, insert_buffer);
output_->Append(reinterpret_cast<const char*>(insert_buffer), output_->Append(reinterpret_cast<const char*>(insert_buffer),
insert_buffer_pos - insert_buffer); insert_buffer_pos - insert_buffer);

@ -31,6 +31,7 @@
#ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_PROTO_WRITER_H__ #ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_PROTO_WRITER_H__
#define GOOGLE_PROTOBUF_UTIL_CONVERTER_PROTO_WRITER_H__ #define GOOGLE_PROTOBUF_UTIL_CONVERTER_PROTO_WRITER_H__
#include <cstdint>
#include <deque> #include <deque>
#include <string> #include <string>
#include <vector> #include <vector>
@ -82,16 +83,16 @@ class PROTOBUF_EXPORT ProtoWriter : public StructuredObjectWriter {
ProtoWriter* RenderBool(StringPiece name, bool value) override { ProtoWriter* RenderBool(StringPiece name, bool value) override {
return RenderDataPiece(name, DataPiece(value)); return RenderDataPiece(name, DataPiece(value));
} }
ProtoWriter* RenderInt32(StringPiece name, int32 value) override { ProtoWriter* RenderInt32(StringPiece name, int32_t value) override {
return RenderDataPiece(name, DataPiece(value)); return RenderDataPiece(name, DataPiece(value));
} }
ProtoWriter* RenderUint32(StringPiece name, uint32 value) override { ProtoWriter* RenderUint32(StringPiece name, uint32_t value) override {
return RenderDataPiece(name, DataPiece(value)); return RenderDataPiece(name, DataPiece(value));
} }
ProtoWriter* RenderInt64(StringPiece name, int64 value) override { ProtoWriter* RenderInt64(StringPiece name, int64_t value) override {
return RenderDataPiece(name, DataPiece(value)); return RenderDataPiece(name, DataPiece(value));
} }
ProtoWriter* RenderUint64(StringPiece name, uint64 value) override { ProtoWriter* RenderUint64(StringPiece name, uint64_t value) override {
return RenderDataPiece(name, DataPiece(value)); return RenderDataPiece(name, DataPiece(value));
} }
ProtoWriter* RenderDouble(StringPiece name, double value) override { ProtoWriter* RenderDouble(StringPiece name, double value) override {
@ -204,11 +205,11 @@ class PROTOBUF_EXPORT ProtoWriter : public StructuredObjectWriter {
} }
// Returns true if the index is already taken by a preceding oneof input. // Returns true if the index is already taken by a preceding oneof input.
bool IsOneofIndexTaken(int32 index); bool IsOneofIndexTaken(int32_t index);
// Marks the oneof 'index' as taken. Future inputs to this oneof will // Marks the oneof 'index' as taken. Future inputs to this oneof will
// generate an error. // generate an error.
void TakeOneofIndex(int32 index); void TakeOneofIndex(int32_t index);
bool proto3() { return proto3_; } bool proto3() { return proto3_; }

@ -30,6 +30,7 @@
#include <google/protobuf/util/internal/protostream_objectsource.h> #include <google/protobuf/util/internal/protostream_objectsource.h>
#include <cstdint>
#include <unordered_map> #include <unordered_map>
#include <utility> #include <utility>
@ -83,7 +84,7 @@ const google::protobuf::EnumValue* FindEnumValueByNumber(
const google::protobuf::Enum& tech_enum, int number); const google::protobuf::Enum& tech_enum, int number);
// Utility function to format nanos. // Utility function to format nanos.
const std::string FormatNanos(uint32 nanos, bool with_trailing_zeros); const std::string FormatNanos(uint32_t nanos, bool with_trailing_zeros);
util::StatusOr<std::string> MapKeyDefaultValueAsString( util::StatusOr<std::string> MapKeyDefaultValueAsString(
const google::protobuf::Field& field) { const google::protobuf::Field& field) {
@ -148,7 +149,7 @@ util::Status ProtoStreamObjectSource::NamedWriteTo(StringPiece name,
} }
const google::protobuf::Field* ProtoStreamObjectSource::FindAndVerifyField( const google::protobuf::Field* ProtoStreamObjectSource::FindAndVerifyField(
const google::protobuf::Type& type, uint32 tag) const { const google::protobuf::Type& type, uint32_t tag) const {
// Lookup the new field in the type by tag number. // Lookup the new field in the type by tag number.
const google::protobuf::Field* field = FindFieldByNumber(type, tag >> 3); const google::protobuf::Field* field = FindFieldByNumber(type, tag >> 3);
// Verify if the field corresponds to the wire type in tag. // Verify if the field corresponds to the wire type in tag.
@ -169,7 +170,8 @@ const google::protobuf::Field* ProtoStreamObjectSource::FindAndVerifyField(
util::Status ProtoStreamObjectSource::WriteMessage( util::Status ProtoStreamObjectSource::WriteMessage(
const google::protobuf::Type& type, StringPiece name, const google::protobuf::Type& type, StringPiece name,
const uint32 end_tag, bool include_start_and_end, ObjectWriter* ow) const { const uint32_t end_tag, bool include_start_and_end,
ObjectWriter* ow) const {
const TypeRenderer* type_renderer = FindTypeRenderer(type.name()); const TypeRenderer* type_renderer = FindTypeRenderer(type.name());
if (type_renderer != nullptr) { if (type_renderer != nullptr) {
@ -179,7 +181,7 @@ util::Status ProtoStreamObjectSource::WriteMessage(
const google::protobuf::Field* field = nullptr; const google::protobuf::Field* field = nullptr;
std::string field_name; std::string field_name;
// last_tag set to dummy value that is different from tag. // last_tag set to dummy value that is different from tag.
uint32 tag = stream_->ReadTag(), last_tag = tag + 1; uint32_t tag = stream_->ReadTag(), last_tag = tag + 1;
UnknownFieldSet unknown_fields; UnknownFieldSet unknown_fields;
@ -230,10 +232,10 @@ util::Status ProtoStreamObjectSource::WriteMessage(
return util::Status(); return util::Status();
} }
util::StatusOr<uint32> ProtoStreamObjectSource::RenderList( util::StatusOr<uint32_t> ProtoStreamObjectSource::RenderList(
const google::protobuf::Field* field, StringPiece name, const google::protobuf::Field* field, StringPiece name,
uint32 list_tag, ObjectWriter* ow) const { uint32_t list_tag, ObjectWriter* ow) const {
uint32 tag_to_return = 0; uint32_t tag_to_return = 0;
ow->StartList(name); ow->StartList(name);
if (IsPackable(*field) && if (IsPackable(*field) &&
list_tag == list_tag ==
@ -252,19 +254,20 @@ util::StatusOr<uint32> ProtoStreamObjectSource::RenderList(
return tag_to_return; return tag_to_return;
} }
util::StatusOr<uint32> ProtoStreamObjectSource::RenderMap( util::StatusOr<uint32_t> ProtoStreamObjectSource::RenderMap(
const google::protobuf::Field* field, StringPiece name, const google::protobuf::Field* field, StringPiece name,
uint32 list_tag, ObjectWriter* ow) const { uint32_t list_tag, ObjectWriter* ow) const {
const google::protobuf::Type* field_type = const google::protobuf::Type* field_type =
typeinfo_->GetTypeByTypeUrl(field->type_url()); typeinfo_->GetTypeByTypeUrl(field->type_url());
uint32 tag_to_return = 0; uint32_t tag_to_return = 0;
do { do {
// Render map entry message type. // Render map entry message type.
uint32 buffer32; uint32_t buffer32;
stream_->ReadVarint32(&buffer32); // message length stream_->ReadVarint32(&buffer32); // message length
int old_limit = stream_->PushLimit(buffer32); int old_limit = stream_->PushLimit(buffer32);
std::string map_key; std::string map_key;
for (uint32 tag = stream_->ReadTag(); tag != 0; tag = stream_->ReadTag()) { for (uint32_t tag = stream_->ReadTag(); tag != 0;
tag = stream_->ReadTag()) {
const google::protobuf::Field* field = const google::protobuf::Field* field =
FindAndVerifyField(*field_type, tag); FindAndVerifyField(*field_type, tag);
if (field == nullptr) { if (field == nullptr) {
@ -301,7 +304,7 @@ util::StatusOr<uint32> ProtoStreamObjectSource::RenderMap(
util::Status ProtoStreamObjectSource::RenderPacked( util::Status ProtoStreamObjectSource::RenderPacked(
const google::protobuf::Field* field, ObjectWriter* ow) const { const google::protobuf::Field* field, ObjectWriter* ow) const {
uint32 length; uint32_t length;
stream_->ReadVarint32(&length); stream_->ReadVarint32(&length);
int old_limit = stream_->PushLimit(length); int old_limit = stream_->PushLimit(length);
while (stream_->BytesUntilLimit() > 0) { while (stream_->BytesUntilLimit() > 0) {
@ -314,9 +317,9 @@ util::Status ProtoStreamObjectSource::RenderPacked(
util::Status ProtoStreamObjectSource::RenderTimestamp( util::Status ProtoStreamObjectSource::RenderTimestamp(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
std::pair<int64, int32> p = os->ReadSecondsAndNanos(type); std::pair<int64_t, int32_t> p = os->ReadSecondsAndNanos(type);
int64 seconds = p.first; int64_t seconds = p.first;
int32 nanos = p.second; int32_t nanos = p.second;
if (seconds > kTimestampMaxSeconds || seconds < kTimestampMinSeconds) { if (seconds > kTimestampMaxSeconds || seconds < kTimestampMinSeconds) {
return util::Status( return util::Status(
util::error::INTERNAL, util::error::INTERNAL,
@ -339,9 +342,9 @@ util::Status ProtoStreamObjectSource::RenderTimestamp(
util::Status ProtoStreamObjectSource::RenderDuration( util::Status ProtoStreamObjectSource::RenderDuration(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
std::pair<int64, int32> p = os->ReadSecondsAndNanos(type); std::pair<int64_t, int32_t> p = os->ReadSecondsAndNanos(type);
int64 seconds = p.first; int64_t seconds = p.first;
int32 nanos = p.second; int32_t nanos = p.second;
if (seconds > kDurationMaxSeconds || seconds < kDurationMinSeconds) { if (seconds > kDurationMaxSeconds || seconds < kDurationMinSeconds) {
return util::Status( return util::Status(
util::error::INTERNAL, util::error::INTERNAL,
@ -384,8 +387,8 @@ util::Status ProtoStreamObjectSource::RenderDuration(
util::Status ProtoStreamObjectSource::RenderDouble( util::Status ProtoStreamObjectSource::RenderDouble(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
uint32 tag = os->stream_->ReadTag(); uint32_t tag = os->stream_->ReadTag();
uint64 buffer64 = 0; // default value of Double wrapper value uint64_t buffer64 = 0; // default value of Double wrapper value
if (tag != 0) { if (tag != 0) {
os->stream_->ReadLittleEndian64(&buffer64); os->stream_->ReadLittleEndian64(&buffer64);
os->stream_->ReadTag(); os->stream_->ReadTag();
@ -397,8 +400,8 @@ util::Status ProtoStreamObjectSource::RenderDouble(
util::Status ProtoStreamObjectSource::RenderFloat( util::Status ProtoStreamObjectSource::RenderFloat(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
uint32 tag = os->stream_->ReadTag(); uint32_t tag = os->stream_->ReadTag();
uint32 buffer32 = 0; // default value of Float wrapper value uint32_t buffer32 = 0; // default value of Float wrapper value
if (tag != 0) { if (tag != 0) {
os->stream_->ReadLittleEndian32(&buffer32); os->stream_->ReadLittleEndian32(&buffer32);
os->stream_->ReadTag(); os->stream_->ReadTag();
@ -410,61 +413,61 @@ util::Status ProtoStreamObjectSource::RenderFloat(
util::Status ProtoStreamObjectSource::RenderInt64( util::Status ProtoStreamObjectSource::RenderInt64(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
uint32 tag = os->stream_->ReadTag(); uint32_t tag = os->stream_->ReadTag();
uint64 buffer64 = 0; // default value of Int64 wrapper value uint64_t buffer64 = 0; // default value of Int64 wrapper value
if (tag != 0) { if (tag != 0) {
os->stream_->ReadVarint64(&buffer64); os->stream_->ReadVarint64(&buffer64);
os->stream_->ReadTag(); os->stream_->ReadTag();
} }
ow->RenderInt64(field_name, bit_cast<int64>(buffer64)); ow->RenderInt64(field_name, bit_cast<int64_t>(buffer64));
return util::Status(); return util::Status();
} }
util::Status ProtoStreamObjectSource::RenderUInt64( util::Status ProtoStreamObjectSource::RenderUInt64(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
uint32 tag = os->stream_->ReadTag(); uint32_t tag = os->stream_->ReadTag();
uint64 buffer64 = 0; // default value of UInt64 wrapper value uint64_t buffer64 = 0; // default value of UInt64 wrapper value
if (tag != 0) { if (tag != 0) {
os->stream_->ReadVarint64(&buffer64); os->stream_->ReadVarint64(&buffer64);
os->stream_->ReadTag(); os->stream_->ReadTag();
} }
ow->RenderUint64(field_name, bit_cast<uint64>(buffer64)); ow->RenderUint64(field_name, bit_cast<uint64_t>(buffer64));
return util::Status(); return util::Status();
} }
util::Status ProtoStreamObjectSource::RenderInt32( util::Status ProtoStreamObjectSource::RenderInt32(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
uint32 tag = os->stream_->ReadTag(); uint32_t tag = os->stream_->ReadTag();
uint32 buffer32 = 0; // default value of Int32 wrapper value uint32_t buffer32 = 0; // default value of Int32 wrapper value
if (tag != 0) { if (tag != 0) {
os->stream_->ReadVarint32(&buffer32); os->stream_->ReadVarint32(&buffer32);
os->stream_->ReadTag(); os->stream_->ReadTag();
} }
ow->RenderInt32(field_name, bit_cast<int32>(buffer32)); ow->RenderInt32(field_name, bit_cast<int32_t>(buffer32));
return util::Status(); return util::Status();
} }
util::Status ProtoStreamObjectSource::RenderUInt32( util::Status ProtoStreamObjectSource::RenderUInt32(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
uint32 tag = os->stream_->ReadTag(); uint32_t tag = os->stream_->ReadTag();
uint32 buffer32 = 0; // default value of UInt32 wrapper value uint32_t buffer32 = 0; // default value of UInt32 wrapper value
if (tag != 0) { if (tag != 0) {
os->stream_->ReadVarint32(&buffer32); os->stream_->ReadVarint32(&buffer32);
os->stream_->ReadTag(); os->stream_->ReadTag();
} }
ow->RenderUint32(field_name, bit_cast<uint32>(buffer32)); ow->RenderUint32(field_name, bit_cast<uint32_t>(buffer32));
return util::Status(); return util::Status();
} }
util::Status ProtoStreamObjectSource::RenderBool( util::Status ProtoStreamObjectSource::RenderBool(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
uint32 tag = os->stream_->ReadTag(); uint32_t tag = os->stream_->ReadTag();
uint64 buffer64 = 0; // results in 'false' value as default, which is the uint64_t buffer64 = 0; // results in 'false' value as default, which is the
// default value of Bool wrapper // default value of Bool wrapper
if (tag != 0) { if (tag != 0) {
os->stream_->ReadVarint64(&buffer64); os->stream_->ReadVarint64(&buffer64);
os->stream_->ReadTag(); os->stream_->ReadTag();
@ -476,8 +479,8 @@ util::Status ProtoStreamObjectSource::RenderBool(
util::Status ProtoStreamObjectSource::RenderString( util::Status ProtoStreamObjectSource::RenderString(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
uint32 tag = os->stream_->ReadTag(); uint32_t tag = os->stream_->ReadTag();
uint32 buffer32; uint32_t buffer32;
std::string str; // default value of empty for String wrapper std::string str; // default value of empty for String wrapper
if (tag != 0) { if (tag != 0) {
os->stream_->ReadVarint32(&buffer32); // string size. os->stream_->ReadVarint32(&buffer32); // string size.
@ -491,8 +494,8 @@ util::Status ProtoStreamObjectSource::RenderString(
util::Status ProtoStreamObjectSource::RenderBytes( util::Status ProtoStreamObjectSource::RenderBytes(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
uint32 tag = os->stream_->ReadTag(); uint32_t tag = os->stream_->ReadTag();
uint32 buffer32; uint32_t buffer32;
std::string str; std::string str;
if (tag != 0) { if (tag != 0) {
os->stream_->ReadVarint32(&buffer32); os->stream_->ReadVarint32(&buffer32);
@ -507,7 +510,7 @@ util::Status ProtoStreamObjectSource::RenderStruct(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
const google::protobuf::Field* field = nullptr; const google::protobuf::Field* field = nullptr;
uint32 tag = os->stream_->ReadTag(); uint32_t tag = os->stream_->ReadTag();
ow->StartObject(field_name); ow->StartObject(field_name);
while (tag != 0) { while (tag != 0) {
field = os->FindAndVerifyField(type, tag); field = os->FindAndVerifyField(type, tag);
@ -530,7 +533,7 @@ util::Status ProtoStreamObjectSource::RenderStructValue(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
const google::protobuf::Field* field = nullptr; const google::protobuf::Field* field = nullptr;
for (uint32 tag = os->stream_->ReadTag(); tag != 0; for (uint32_t tag = os->stream_->ReadTag(); tag != 0;
tag = os->stream_->ReadTag()) { tag = os->stream_->ReadTag()) {
field = os->FindAndVerifyField(type, tag); field = os->FindAndVerifyField(type, tag);
if (field == nullptr) { if (field == nullptr) {
@ -546,7 +549,7 @@ util::Status ProtoStreamObjectSource::RenderStructValue(
util::Status ProtoStreamObjectSource::RenderStructListValue( util::Status ProtoStreamObjectSource::RenderStructListValue(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
uint32 tag = os->stream_->ReadTag(); uint32_t tag = os->stream_->ReadTag();
// Render empty list when we find empty ListValue message. // Render empty list when we find empty ListValue message.
if (tag == 0) { if (tag == 0) {
@ -571,7 +574,7 @@ util::Status ProtoStreamObjectSource::RenderAny(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
// An Any is of the form { string type_url = 1; bytes value = 2; } // An Any is of the form { string type_url = 1; bytes value = 2; }
uint32 tag; uint32_t tag;
std::string type_url; std::string type_url;
std::string value; std::string value;
@ -586,12 +589,12 @@ util::Status ProtoStreamObjectSource::RenderAny(
// //google/protobuf/any.proto // //google/protobuf/any.proto
if (field->number() == 1) { if (field->number() == 1) {
// read type_url // read type_url
uint32 type_url_size; uint32_t type_url_size;
os->stream_->ReadVarint32(&type_url_size); os->stream_->ReadVarint32(&type_url_size);
os->stream_->ReadString(&type_url, type_url_size); os->stream_->ReadString(&type_url, type_url_size);
} else if (field->number() == 2) { } else if (field->number() == 2) {
// read value // read value
uint32 value_size; uint32_t value_size;
os->stream_->ReadVarint32(&value_size); os->stream_->ReadVarint32(&value_size);
os->stream_->ReadString(&value, value_size); os->stream_->ReadString(&value, value_size);
} }
@ -647,9 +650,9 @@ util::Status ProtoStreamObjectSource::RenderFieldMask(
const ProtoStreamObjectSource* os, const google::protobuf::Type& type, const ProtoStreamObjectSource* os, const google::protobuf::Type& type,
StringPiece field_name, ObjectWriter* ow) { StringPiece field_name, ObjectWriter* ow) {
std::string combined; std::string combined;
uint32 buffer32; uint32_t buffer32;
uint32 paths_field_tag = 0; uint32_t paths_field_tag = 0;
for (uint32 tag = os->stream_->ReadTag(); tag != 0; for (uint32_t tag = os->stream_->ReadTag(); tag != 0;
tag = os->stream_->ReadTag()) { tag = os->stream_->ReadTag()) {
if (paths_field_tag == 0) { if (paths_field_tag == 0) {
const google::protobuf::Field* field = os->FindAndVerifyField(type, tag); const google::protobuf::Field* field = os->FindAndVerifyField(type, tag);
@ -737,7 +740,7 @@ util::Status ProtoStreamObjectSource::RenderField(
// and ends up using a lot of stack space. Keep the stack usage of this // and ends up using a lot of stack space. Keep the stack usage of this
// message small in order to preserve stack space and not crash. // message small in order to preserve stack space and not crash.
if (field->kind() == google::protobuf::Field::TYPE_MESSAGE) { if (field->kind() == google::protobuf::Field::TYPE_MESSAGE) {
uint32 buffer32; uint32_t buffer32;
stream_->ReadVarint32(&buffer32); // message length stream_->ReadVarint32(&buffer32); // message length
int old_limit = stream_->PushLimit(buffer32); int old_limit = stream_->PushLimit(buffer32);
// Get the nested message type for this field. // Get the nested message type for this field.
@ -778,8 +781,8 @@ util::Status ProtoStreamObjectSource::RenderNonMessageField(
const google::protobuf::Field* field, StringPiece field_name, const google::protobuf::Field* field, StringPiece field_name,
ObjectWriter* ow) const { ObjectWriter* ow) const {
// Temporary buffers of different types. // Temporary buffers of different types.
uint32 buffer32 = 0; uint32_t buffer32 = 0;
uint64 buffer64 = 0; uint64_t buffer64 = 0;
std::string strbuffer; std::string strbuffer;
switch (field->kind()) { switch (field->kind()) {
case google::protobuf::Field::TYPE_BOOL: { case google::protobuf::Field::TYPE_BOOL: {
@ -789,7 +792,7 @@ util::Status ProtoStreamObjectSource::RenderNonMessageField(
} }
case google::protobuf::Field::TYPE_INT32: { case google::protobuf::Field::TYPE_INT32: {
stream_->ReadVarint32(&buffer32); stream_->ReadVarint32(&buffer32);
ow->RenderInt32(field_name, bit_cast<int32>(buffer32)); ow->RenderInt32(field_name, bit_cast<int32_t>(buffer32));
break; break;
} }
case google::protobuf::Field::TYPE_INT64: { case google::protobuf::Field::TYPE_INT64: {
@ -799,7 +802,7 @@ util::Status ProtoStreamObjectSource::RenderNonMessageField(
} }
case google::protobuf::Field::TYPE_UINT32: { case google::protobuf::Field::TYPE_UINT32: {
stream_->ReadVarint32(&buffer32); stream_->ReadVarint32(&buffer32);
ow->RenderUint32(field_name, bit_cast<uint32>(buffer32)); ow->RenderUint32(field_name, bit_cast<uint32_t>(buffer32));
break; break;
} }
case google::protobuf::Field::TYPE_UINT64: { case google::protobuf::Field::TYPE_UINT64: {
@ -819,7 +822,7 @@ util::Status ProtoStreamObjectSource::RenderNonMessageField(
} }
case google::protobuf::Field::TYPE_SFIXED32: { case google::protobuf::Field::TYPE_SFIXED32: {
stream_->ReadLittleEndian32(&buffer32); stream_->ReadLittleEndian32(&buffer32);
ow->RenderInt32(field_name, bit_cast<int32>(buffer32)); ow->RenderInt32(field_name, bit_cast<int32_t>(buffer32));
break; break;
} }
case google::protobuf::Field::TYPE_SFIXED64: { case google::protobuf::Field::TYPE_SFIXED64: {
@ -829,7 +832,7 @@ util::Status ProtoStreamObjectSource::RenderNonMessageField(
} }
case google::protobuf::Field::TYPE_FIXED32: { case google::protobuf::Field::TYPE_FIXED32: {
stream_->ReadLittleEndian32(&buffer32); stream_->ReadLittleEndian32(&buffer32);
ow->RenderUint32(field_name, bit_cast<uint32>(buffer32)); ow->RenderUint32(field_name, bit_cast<uint32_t>(buffer32));
break; break;
} }
case google::protobuf::Field::TYPE_FIXED64: { case google::protobuf::Field::TYPE_FIXED64: {
@ -907,85 +910,85 @@ const std::string ProtoStreamObjectSource::ReadFieldValueAsString(
std::string result; std::string result;
switch (field.kind()) { switch (field.kind()) {
case google::protobuf::Field::TYPE_BOOL: { case google::protobuf::Field::TYPE_BOOL: {
uint64 buffer64; uint64_t buffer64;
stream_->ReadVarint64(&buffer64); stream_->ReadVarint64(&buffer64);
result = buffer64 != 0 ? "true" : "false"; result = buffer64 != 0 ? "true" : "false";
break; break;
} }
case google::protobuf::Field::TYPE_INT32: { case google::protobuf::Field::TYPE_INT32: {
uint32 buffer32; uint32_t buffer32;
stream_->ReadVarint32(&buffer32); stream_->ReadVarint32(&buffer32);
result = StrCat(bit_cast<int32>(buffer32)); result = StrCat(bit_cast<int32_t>(buffer32));
break; break;
} }
case google::protobuf::Field::TYPE_INT64: { case google::protobuf::Field::TYPE_INT64: {
uint64 buffer64; uint64_t buffer64;
stream_->ReadVarint64(&buffer64); stream_->ReadVarint64(&buffer64);
result = StrCat(bit_cast<int64>(buffer64)); result = StrCat(bit_cast<int64_t>(buffer64));
break; break;
} }
case google::protobuf::Field::TYPE_UINT32: { case google::protobuf::Field::TYPE_UINT32: {
uint32 buffer32; uint32_t buffer32;
stream_->ReadVarint32(&buffer32); stream_->ReadVarint32(&buffer32);
result = StrCat(bit_cast<uint32>(buffer32)); result = StrCat(bit_cast<uint32_t>(buffer32));
break; break;
} }
case google::protobuf::Field::TYPE_UINT64: { case google::protobuf::Field::TYPE_UINT64: {
uint64 buffer64; uint64_t buffer64;
stream_->ReadVarint64(&buffer64); stream_->ReadVarint64(&buffer64);
result = StrCat(bit_cast<uint64>(buffer64)); result = StrCat(bit_cast<uint64_t>(buffer64));
break; break;
} }
case google::protobuf::Field::TYPE_SINT32: { case google::protobuf::Field::TYPE_SINT32: {
uint32 buffer32; uint32_t buffer32;
stream_->ReadVarint32(&buffer32); stream_->ReadVarint32(&buffer32);
result = StrCat(WireFormatLite::ZigZagDecode32(buffer32)); result = StrCat(WireFormatLite::ZigZagDecode32(buffer32));
break; break;
} }
case google::protobuf::Field::TYPE_SINT64: { case google::protobuf::Field::TYPE_SINT64: {
uint64 buffer64; uint64_t buffer64;
stream_->ReadVarint64(&buffer64); stream_->ReadVarint64(&buffer64);
result = StrCat(WireFormatLite::ZigZagDecode64(buffer64)); result = StrCat(WireFormatLite::ZigZagDecode64(buffer64));
break; break;
} }
case google::protobuf::Field::TYPE_SFIXED32: { case google::protobuf::Field::TYPE_SFIXED32: {
uint32 buffer32; uint32_t buffer32;
stream_->ReadLittleEndian32(&buffer32); stream_->ReadLittleEndian32(&buffer32);
result = StrCat(bit_cast<int32>(buffer32)); result = StrCat(bit_cast<int32_t>(buffer32));
break; break;
} }
case google::protobuf::Field::TYPE_SFIXED64: { case google::protobuf::Field::TYPE_SFIXED64: {
uint64 buffer64; uint64_t buffer64;
stream_->ReadLittleEndian64(&buffer64); stream_->ReadLittleEndian64(&buffer64);
result = StrCat(bit_cast<int64>(buffer64)); result = StrCat(bit_cast<int64_t>(buffer64));
break; break;
} }
case google::protobuf::Field::TYPE_FIXED32: { case google::protobuf::Field::TYPE_FIXED32: {
uint32 buffer32; uint32_t buffer32;
stream_->ReadLittleEndian32(&buffer32); stream_->ReadLittleEndian32(&buffer32);
result = StrCat(bit_cast<uint32>(buffer32)); result = StrCat(bit_cast<uint32_t>(buffer32));
break; break;
} }
case google::protobuf::Field::TYPE_FIXED64: { case google::protobuf::Field::TYPE_FIXED64: {
uint64 buffer64; uint64_t buffer64;
stream_->ReadLittleEndian64(&buffer64); stream_->ReadLittleEndian64(&buffer64);
result = StrCat(bit_cast<uint64>(buffer64)); result = StrCat(bit_cast<uint64_t>(buffer64));
break; break;
} }
case google::protobuf::Field::TYPE_FLOAT: { case google::protobuf::Field::TYPE_FLOAT: {
uint32 buffer32; uint32_t buffer32;
stream_->ReadLittleEndian32(&buffer32); stream_->ReadLittleEndian32(&buffer32);
result = SimpleFtoa(bit_cast<float>(buffer32)); result = SimpleFtoa(bit_cast<float>(buffer32));
break; break;
} }
case google::protobuf::Field::TYPE_DOUBLE: { case google::protobuf::Field::TYPE_DOUBLE: {
uint64 buffer64; uint64_t buffer64;
stream_->ReadLittleEndian64(&buffer64); stream_->ReadLittleEndian64(&buffer64);
result = SimpleDtoa(bit_cast<double>(buffer64)); result = SimpleDtoa(bit_cast<double>(buffer64));
break; break;
} }
case google::protobuf::Field::TYPE_ENUM: { case google::protobuf::Field::TYPE_ENUM: {
uint32 buffer32; uint32_t buffer32;
stream_->ReadVarint32(&buffer32); stream_->ReadVarint32(&buffer32);
// Get the nested enum type for this field. // Get the nested enum type for this field.
// TODO(skarvaje): Avoid string manipulation. Find ways to speed this // TODO(skarvaje): Avoid string manipulation. Find ways to speed this
@ -1003,13 +1006,13 @@ const std::string ProtoStreamObjectSource::ReadFieldValueAsString(
break; break;
} }
case google::protobuf::Field::TYPE_STRING: { case google::protobuf::Field::TYPE_STRING: {
uint32 buffer32; uint32_t buffer32;
stream_->ReadVarint32(&buffer32); // string size. stream_->ReadVarint32(&buffer32); // string size.
stream_->ReadString(&result, buffer32); stream_->ReadString(&result, buffer32);
break; break;
} }
case google::protobuf::Field::TYPE_BYTES: { case google::protobuf::Field::TYPE_BYTES: {
uint32 buffer32; uint32_t buffer32;
stream_->ReadVarint32(&buffer32); // bytes size. stream_->ReadVarint32(&buffer32); // bytes size.
stream_->ReadString(&result, buffer32); stream_->ReadString(&result, buffer32);
break; break;
@ -1030,13 +1033,13 @@ bool ProtoStreamObjectSource::IsMap(
util::converter::IsMap(field, *field_type); util::converter::IsMap(field, *field_type);
} }
std::pair<int64, int32> ProtoStreamObjectSource::ReadSecondsAndNanos( std::pair<int64_t, int32_t> ProtoStreamObjectSource::ReadSecondsAndNanos(
const google::protobuf::Type& type) const { const google::protobuf::Type& type) const {
uint64 seconds = 0; uint64_t seconds = 0;
uint32 nanos = 0; uint32_t nanos = 0;
uint32 tag = 0; uint32_t tag = 0;
int64 signed_seconds = 0; int64_t signed_seconds = 0;
int32 signed_nanos = 0; int32_t signed_nanos = 0;
for (tag = stream_->ReadTag(); tag != 0; tag = stream_->ReadTag()) { for (tag = stream_->ReadTag(); tag != 0; tag = stream_->ReadTag()) {
const google::protobuf::Field* field = FindAndVerifyField(type, tag); const google::protobuf::Field* field = FindAndVerifyField(type, tag);
@ -1049,14 +1052,14 @@ std::pair<int64, int32> ProtoStreamObjectSource::ReadSecondsAndNanos(
if (field->number() == 1) { if (field->number() == 1) {
// read seconds // read seconds
stream_->ReadVarint64(&seconds); stream_->ReadVarint64(&seconds);
signed_seconds = bit_cast<int64>(seconds); signed_seconds = bit_cast<int64_t>(seconds);
} else if (field->number() == 2) { } else if (field->number() == 2) {
// read nanos // read nanos
stream_->ReadVarint32(&nanos); stream_->ReadVarint32(&nanos);
signed_nanos = bit_cast<int32>(nanos); signed_nanos = bit_cast<int32_t>(nanos);
} }
} }
return std::pair<int64, int32>(signed_seconds, signed_nanos); return std::pair<int64_t, int32_t>(signed_seconds, signed_nanos);
} }
util::Status ProtoStreamObjectSource::IncrementRecursionDepth( util::Status ProtoStreamObjectSource::IncrementRecursionDepth(
@ -1104,7 +1107,7 @@ const google::protobuf::EnumValue* FindEnumValueByNumber(
// TODO(skarvaje): Look into optimizing this by not doing computation on // TODO(skarvaje): Look into optimizing this by not doing computation on
// double. // double.
const std::string FormatNanos(uint32 nanos, bool with_trailing_zeros) { const std::string FormatNanos(uint32_t nanos, bool with_trailing_zeros) {
if (nanos == 0) { if (nanos == 0) {
return with_trailing_zeros ? ".000" : ""; return with_trailing_zeros ? ".000" : "";
} }

@ -31,6 +31,7 @@
#ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_PROTOSTREAM_OBJECTSOURCE_H__ #ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_PROTOSTREAM_OBJECTSOURCE_H__
#define GOOGLE_PROTOBUF_UTIL_CONVERTER_PROTOSTREAM_OBJECTSOURCE_H__ #define GOOGLE_PROTOBUF_UTIL_CONVERTER_PROTOSTREAM_OBJECTSOURCE_H__
#include <cstdint>
#include <functional> #include <functional>
#include <string> #include <string>
#include <unordered_map> #include <unordered_map>
@ -73,6 +74,7 @@ class TypeInfo;
// Status status = os.WriteTo(<some ObjectWriter>); // Status status = os.WriteTo(<some ObjectWriter>);
class PROTOBUF_EXPORT ProtoStreamObjectSource : public ObjectSource { class PROTOBUF_EXPORT ProtoStreamObjectSource : public ObjectSource {
public: public:
struct RenderOptions { struct RenderOptions {
RenderOptions() = default; RenderOptions() = default;
RenderOptions(const RenderOptions&) = default; RenderOptions(const RenderOptions&) = default;
@ -141,20 +143,20 @@ class PROTOBUF_EXPORT ProtoStreamObjectSource : public ObjectSource {
// already inside of an object, and skip calling StartObject and EndObject. // already inside of an object, and skip calling StartObject and EndObject.
virtual util::Status WriteMessage(const google::protobuf::Type& type, virtual util::Status WriteMessage(const google::protobuf::Type& type,
StringPiece name, StringPiece name,
const uint32 end_tag, const uint32_t end_tag,
bool include_start_and_end, bool include_start_and_end,
ObjectWriter* ow) const; ObjectWriter* ow) const;
// Renders a repeating field (packed or unpacked). Returns the next tag after // Renders a repeating field (packed or unpacked). Returns the next tag after
// reading all sequential repeating elements. The caller should use this tag // reading all sequential repeating elements. The caller should use this tag
// before reading more tags from the stream. // before reading more tags from the stream.
virtual util::StatusOr<uint32> RenderList( virtual util::StatusOr<uint32_t> RenderList(
const google::protobuf::Field* field, StringPiece name, const google::protobuf::Field* field, StringPiece name,
uint32 list_tag, ObjectWriter* ow) const; uint32_t list_tag, ObjectWriter* ow) const;
// Looks up a field and verify its consistency with wire type in tag. // Looks up a field and verify its consistency with wire type in tag.
const google::protobuf::Field* FindAndVerifyField( const google::protobuf::Field* FindAndVerifyField(
const google::protobuf::Type& type, uint32 tag) const; const google::protobuf::Type& type, uint32_t tag) const;
// Renders a field value to the ObjectWriter. // Renders a field value to the ObjectWriter.
virtual util::Status RenderField(const google::protobuf::Field* field, virtual util::Status RenderField(const google::protobuf::Field* field,
@ -187,9 +189,9 @@ class PROTOBUF_EXPORT ProtoStreamObjectSource : public ObjectSource {
// Renders a NWP map. // Renders a NWP map.
// Returns the next tag after reading all map entries. The caller should use // Returns the next tag after reading all map entries. The caller should use
// this tag before reading more tags from the stream. // this tag before reading more tags from the stream.
util::StatusOr<uint32> RenderMap(const google::protobuf::Field* field, util::StatusOr<uint32_t> RenderMap(const google::protobuf::Field* field,
StringPiece name, uint32 list_tag, StringPiece name, uint32_t list_tag,
ObjectWriter* ow) const; ObjectWriter* ow) const;
// Renders a packed repeating field. A packed field is stored as: // Renders a packed repeating field. A packed field is stored as:
// {tag length item1 item2 item3} instead of the less efficient // {tag length item1 item2 item3} instead of the less efficient
@ -281,7 +283,7 @@ class PROTOBUF_EXPORT ProtoStreamObjectSource : public ObjectSource {
// Utility to read int64 and int32 values from a message type in stream_. // Utility to read int64 and int32 values from a message type in stream_.
// Used for reading google.protobuf.Timestamp and Duration messages. // Used for reading google.protobuf.Timestamp and Duration messages.
std::pair<int64, int32> ReadSecondsAndNanos( std::pair<int64_t, int32_t> ReadSecondsAndNanos(
const google::protobuf::Type& type) const; const google::protobuf::Type& type) const;
// Helper function to check recursion depth and increment it. It will return // Helper function to check recursion depth and increment it. It will return

@ -30,6 +30,7 @@
#include <google/protobuf/util/internal/protostream_objectsource.h> #include <google/protobuf/util/internal/protostream_objectsource.h>
#include <cstdint>
#include <memory> #include <memory>
#include <sstream> #include <sstream>
@ -120,9 +121,8 @@ class ProtostreamObjectSourceTest
render_options.use_lower_camel_for_enums = use_lower_camel_for_enums_; render_options.use_lower_camel_for_enums = use_lower_camel_for_enums_;
render_options.use_ints_for_enums = use_ints_for_enums_; render_options.use_ints_for_enums = use_ints_for_enums_;
render_options.preserve_proto_field_names = use_preserve_proto_field_names_; render_options.preserve_proto_field_names = use_preserve_proto_field_names_;
std::unique_ptr<ProtoStreamObjectSource> os( std::unique_ptr<ProtoStreamObjectSource> os(helper_.NewProtoSource(
helper_.NewProtoSource(&in_stream, GetTypeUrl(descriptor), &in_stream, GetTypeUrl(descriptor), render_options));
render_options));
os->set_max_recursion_depth(64); os->set_max_recursion_depth(64);
return os->WriteTo(&mock_); return os->WriteTo(&mock_);
} }
@ -130,13 +130,13 @@ class ProtostreamObjectSourceTest
void PrepareExpectingObjectWriterForRepeatedPrimitive() { void PrepareExpectingObjectWriterForRepeatedPrimitive() {
ow_.StartObject("") ow_.StartObject("")
->StartList("repFix32") ->StartList("repFix32")
->RenderUint32("", bit_cast<uint32>(3201)) ->RenderUint32("", bit_cast<uint32_t>(3201))
->RenderUint32("", bit_cast<uint32>(0)) ->RenderUint32("", bit_cast<uint32_t>(0))
->RenderUint32("", bit_cast<uint32>(3202)) ->RenderUint32("", bit_cast<uint32_t>(3202))
->EndList() ->EndList()
->StartList("repU32") ->StartList("repU32")
->RenderUint32("", bit_cast<uint32>(3203)) ->RenderUint32("", bit_cast<uint32_t>(3203))
->RenderUint32("", bit_cast<uint32>(0)) ->RenderUint32("", bit_cast<uint32_t>(0))
->EndList() ->EndList()
->StartList("repI32") ->StartList("repI32")
->RenderInt32("", 0) ->RenderInt32("", 0)
@ -153,13 +153,13 @@ class ProtostreamObjectSourceTest
->RenderInt32("", 3208) ->RenderInt32("", 3208)
->EndList() ->EndList()
->StartList("repFix64") ->StartList("repFix64")
->RenderUint64("", bit_cast<uint64>(int64{6401})) ->RenderUint64("", bit_cast<uint64_t>(int64_t{6401}))
->RenderUint64("", bit_cast<uint64>(int64{0})) ->RenderUint64("", bit_cast<uint64_t>(int64_t{0}))
->EndList() ->EndList()
->StartList("repU64") ->StartList("repU64")
->RenderUint64("", bit_cast<uint64>(int64{0})) ->RenderUint64("", bit_cast<uint64_t>(int64_t{0}))
->RenderUint64("", bit_cast<uint64>(int64{6402})) ->RenderUint64("", bit_cast<uint64_t>(int64_t{6402}))
->RenderUint64("", bit_cast<uint64>(int64{6403})) ->RenderUint64("", bit_cast<uint64_t>(int64_t{6403}))
->EndList() ->EndList()
->StartList("repI64") ->StartList("repI64")
->RenderInt64("", 6404L) ->RenderInt64("", 6404L)
@ -321,13 +321,13 @@ TEST_P(ProtostreamObjectSourceTest, Primitives) {
primitive.set_bool_(true); primitive.set_bool_(true);
ow_.StartObject("") ow_.StartObject("")
->RenderUint32("fix32", bit_cast<uint32>(3201)) ->RenderUint32("fix32", bit_cast<uint32_t>(3201))
->RenderUint32("u32", bit_cast<uint32>(3202)) ->RenderUint32("u32", bit_cast<uint32_t>(3202))
->RenderInt32("i32", 3203) ->RenderInt32("i32", 3203)
->RenderInt32("sf32", 3204) ->RenderInt32("sf32", 3204)
->RenderInt32("s32", 3205) ->RenderInt32("s32", 3205)
->RenderUint64("fix64", bit_cast<uint64>(int64{6401})) ->RenderUint64("fix64", bit_cast<uint64_t>(int64_t{6401}))
->RenderUint64("u64", bit_cast<uint64>(int64{6402})) ->RenderUint64("u64", bit_cast<uint64_t>(int64_t{6402}))
->RenderInt64("i64", 6403L) ->RenderInt64("i64", 6403L)
->RenderInt64("sf64", 6404L) ->RenderInt64("sf64", 6404L)
->RenderInt64("s64", 6405L) ->RenderInt64("s64", 6405L)
@ -425,10 +425,10 @@ TEST_P(ProtostreamObjectSourceTest, BadAuthor) {
->RenderBool("", false) ->RenderBool("", false)
->EndList() ->EndList()
->StartList("name") ->StartList("name")
->RenderUint64("", static_cast<uint64>('j')) ->RenderUint64("", static_cast<uint64_t>('j'))
->RenderUint64("", static_cast<uint64>('o')) ->RenderUint64("", static_cast<uint64_t>('o'))
->RenderUint64("", static_cast<uint64>('h')) ->RenderUint64("", static_cast<uint64_t>('h'))
->RenderUint64("", static_cast<uint64>('n')) ->RenderUint64("", static_cast<uint64_t>('n'))
->EndList() ->EndList()
->RenderString("pseudonym", "phil") ->RenderString("pseudonym", "phil")
->RenderString("pseudonym", "bob") ->RenderString("pseudonym", "bob")

@ -30,6 +30,7 @@
#include <google/protobuf/util/internal/protostream_objectwriter.h> #include <google/protobuf/util/internal/protostream_objectwriter.h>
#include <cstdint>
#include <functional> #include <functional>
#include <stack> #include <stack>
#include <unordered_map> #include <unordered_map>
@ -129,7 +130,7 @@ void SplitSecondsAndNanos(StringPiece input, StringPiece* seconds,
Status GetNanosFromStringPiece(StringPiece s_nanos, Status GetNanosFromStringPiece(StringPiece s_nanos,
const char* parse_failure_message, const char* parse_failure_message,
const char* exceeded_limit_message, const char* exceeded_limit_message,
int32* nanos) { int32_t* nanos) {
*nanos = 0; *nanos = 0;
// Count the number of leading 0s and consume them. // Count the number of leading 0s and consume them.
@ -137,7 +138,7 @@ Status GetNanosFromStringPiece(StringPiece s_nanos,
while (s_nanos.Consume("0")) { while (s_nanos.Consume("0")) {
num_leading_zeros++; num_leading_zeros++;
} }
int32 i_nanos = 0; int32_t i_nanos = 0;
// 's_nanos' contains fractional seconds -- i.e. 'nanos' is equal to // 's_nanos' contains fractional seconds -- i.e. 'nanos' is equal to
// "0." + s_nanos.ToString() seconds. An int32 is used for the // "0." + s_nanos.ToString() seconds. An int32 is used for the
// conversion to 'nanos', rather than a double, so that there is no // conversion to 'nanos', rather than a double, so that there is no
@ -156,11 +157,11 @@ Status GetNanosFromStringPiece(StringPiece s_nanos,
if (i_nanos > 0) { if (i_nanos > 0) {
// 'scale' is the number of digits to the right of the decimal // 'scale' is the number of digits to the right of the decimal
// point in "0." + s_nanos.ToString() // point in "0." + s_nanos.ToString()
int32 scale = num_leading_zeros + s_nanos.size(); int32_t scale = num_leading_zeros + s_nanos.size();
// 'conversion' converts i_nanos into nanoseconds. // 'conversion' converts i_nanos into nanoseconds.
// conversion = kNanosPerSecond / static_cast<int32>(std::pow(10, scale)) // conversion = kNanosPerSecond / static_cast<int32>(std::pow(10, scale))
// For efficiency, we precompute the conversion factor. // For efficiency, we precompute the conversion factor.
int32 conversion = 0; int32_t conversion = 0;
switch (scale) { switch (scale) {
case 1: case 1:
conversion = 100000000; conversion = 100000000;
@ -921,7 +922,7 @@ Status ProtoStreamObjectWriter::RenderStructValue(ProtoStreamObjectWriter* ow,
switch (data.type()) { switch (data.type()) {
case DataPiece::TYPE_INT32: { case DataPiece::TYPE_INT32: {
if (ow->options_.struct_integers_as_strings) { if (ow->options_.struct_integers_as_strings) {
util::StatusOr<int32> int_value = data.ToInt32(); util::StatusOr<int32_t> int_value = data.ToInt32();
if (int_value.ok()) { if (int_value.ok()) {
ow->ProtoWriter::RenderDataPiece( ow->ProtoWriter::RenderDataPiece(
"string_value", "string_value",
@ -934,7 +935,7 @@ Status ProtoStreamObjectWriter::RenderStructValue(ProtoStreamObjectWriter* ow,
} }
case DataPiece::TYPE_UINT32: { case DataPiece::TYPE_UINT32: {
if (ow->options_.struct_integers_as_strings) { if (ow->options_.struct_integers_as_strings) {
util::StatusOr<uint32> int_value = data.ToUint32(); util::StatusOr<uint32_t> int_value = data.ToUint32();
if (int_value.ok()) { if (int_value.ok()) {
ow->ProtoWriter::RenderDataPiece( ow->ProtoWriter::RenderDataPiece(
"string_value", "string_value",
@ -949,7 +950,7 @@ Status ProtoStreamObjectWriter::RenderStructValue(ProtoStreamObjectWriter* ow,
// If the option to treat integers as strings is set, then render them as // If the option to treat integers as strings is set, then render them as
// strings. Otherwise, fallback to rendering them as double. // strings. Otherwise, fallback to rendering them as double.
if (ow->options_.struct_integers_as_strings) { if (ow->options_.struct_integers_as_strings) {
util::StatusOr<int64> int_value = data.ToInt64(); util::StatusOr<int64_t> int_value = data.ToInt64();
if (int_value.ok()) { if (int_value.ok()) {
ow->ProtoWriter::RenderDataPiece( ow->ProtoWriter::RenderDataPiece(
"string_value", DataPiece(StrCat(int_value.value()), true)); "string_value", DataPiece(StrCat(int_value.value()), true));
@ -963,7 +964,7 @@ Status ProtoStreamObjectWriter::RenderStructValue(ProtoStreamObjectWriter* ow,
// If the option to treat integers as strings is set, then render them as // If the option to treat integers as strings is set, then render them as
// strings. Otherwise, fallback to rendering them as double. // strings. Otherwise, fallback to rendering them as double.
if (ow->options_.struct_integers_as_strings) { if (ow->options_.struct_integers_as_strings) {
util::StatusOr<uint64> int_value = data.ToUint64(); util::StatusOr<uint64_t> int_value = data.ToUint64();
if (int_value.ok()) { if (int_value.ok()) {
ow->ProtoWriter::RenderDataPiece( ow->ProtoWriter::RenderDataPiece(
"string_value", DataPiece(StrCat(int_value.value()), true)); "string_value", DataPiece(StrCat(int_value.value()), true));
@ -1092,13 +1093,13 @@ Status ProtoStreamObjectWriter::RenderDuration(ProtoStreamObjectWriter* ow,
StringPiece s_secs, s_nanos; StringPiece s_secs, s_nanos;
SplitSecondsAndNanos(value, &s_secs, &s_nanos); SplitSecondsAndNanos(value, &s_secs, &s_nanos);
uint64 unsigned_seconds; uint64_t unsigned_seconds;
if (!safe_strtou64(s_secs, &unsigned_seconds)) { if (!safe_strtou64(s_secs, &unsigned_seconds)) {
return Status(util::error::INVALID_ARGUMENT, return Status(util::error::INVALID_ARGUMENT,
"Invalid duration format, failed to parse seconds"); "Invalid duration format, failed to parse seconds");
} }
int32 nanos = 0; int32_t nanos = 0;
Status nanos_status = GetNanosFromStringPiece( Status nanos_status = GetNanosFromStringPiece(
s_nanos, "Invalid duration format, failed to parse nano seconds", s_nanos, "Invalid duration format, failed to parse nano seconds",
"Duration value exceeds limits", &nanos); "Duration value exceeds limits", &nanos);
@ -1107,7 +1108,7 @@ Status ProtoStreamObjectWriter::RenderDuration(ProtoStreamObjectWriter* ow,
} }
nanos = sign * nanos; nanos = sign * nanos;
int64 seconds = sign * unsigned_seconds; int64_t seconds = sign * unsigned_seconds;
if (seconds > kDurationMaxSeconds || seconds < kDurationMinSeconds || if (seconds > kDurationMaxSeconds || seconds < kDurationMinSeconds ||
nanos <= -kNanosPerSecond || nanos >= kNanosPerSecond) { nanos <= -kNanosPerSecond || nanos >= kNanosPerSecond) {
return Status(util::error::INVALID_ARGUMENT, return Status(util::error::INVALID_ARGUMENT,

@ -32,6 +32,7 @@
#include <algorithm> #include <algorithm>
#include <cmath> #include <cmath>
#include <cstdint>
#include <limits> #include <limits>
#include <google/protobuf/stubs/callback.h> #include <google/protobuf/stubs/callback.h>
@ -63,9 +64,9 @@ bool GetBoolOptionOrDefault(
return GetBoolFromAny(opt->value()); return GetBoolFromAny(opt->value());
} }
int64 GetInt64OptionOrDefault( int64_t GetInt64OptionOrDefault(
const RepeatedPtrField<google::protobuf::Option>& options, const RepeatedPtrField<google::protobuf::Option>& options,
StringPiece option_name, int64 default_value) { StringPiece option_name, int64_t default_value) {
const google::protobuf::Option* opt = FindOptionOrNull(options, option_name); const google::protobuf::Option* opt = FindOptionOrNull(options, option_name);
if (opt == nullptr) { if (opt == nullptr) {
return default_value; return default_value;
@ -106,7 +107,7 @@ bool GetBoolFromAny(const google::protobuf::Any& any) {
return b.value(); return b.value();
} }
int64 GetInt64FromAny(const google::protobuf::Any& any) { int64_t GetInt64FromAny(const google::protobuf::Any& any) {
google::protobuf::Int64Value i; google::protobuf::Int64Value i;
ParseFromAny(any.value(), &i); ParseFromAny(any.value(), &i);
return i.value(); return i.value();
@ -179,7 +180,7 @@ const google::protobuf::Field* FindJsonFieldInTypeOrNull(
} }
const google::protobuf::Field* FindFieldInTypeByNumberOrNull( const google::protobuf::Field* FindFieldInTypeByNumberOrNull(
const google::protobuf::Type* type, int32 number) { const google::protobuf::Type* type, int32_t number) {
if (type != nullptr) { if (type != nullptr) {
for (int i = 0; i < type->fields_size(); ++i) { for (int i = 0; i < type->fields_size(); ++i) {
const google::protobuf::Field& field = type->fields(i); const google::protobuf::Field& field = type->fields(i);
@ -205,7 +206,7 @@ const google::protobuf::EnumValue* FindEnumValueByNameOrNull(
} }
const google::protobuf::EnumValue* FindEnumValueByNumberOrNull( const google::protobuf::EnumValue* FindEnumValueByNumberOrNull(
const google::protobuf::Enum* enum_type, int32 value) { const google::protobuf::Enum* enum_type, int32_t value) {
if (enum_type != nullptr) { if (enum_type != nullptr) {
for (int i = 0; i < enum_type->enumvalue_size(); ++i) { for (int i = 0; i < enum_type->enumvalue_size(); ++i) {
const google::protobuf::EnumValue& enum_value = enum_type->enumvalue(i); const google::protobuf::EnumValue& enum_value = enum_type->enumvalue(i);

@ -31,6 +31,7 @@
#ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_UTILITY_H__ #ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_UTILITY_H__
#define GOOGLE_PROTOBUF_UTIL_CONVERTER_UTILITY_H__ #define GOOGLE_PROTOBUF_UTIL_CONVERTER_UTILITY_H__
#include <cstdint>
#include <memory> #include <memory>
#include <string> #include <string>
#include <utility> #include <utility>
@ -53,7 +54,7 @@ namespace util {
namespace converter { namespace converter {
// Size of "type.googleapis.com" // Size of "type.googleapis.com"
static const int64 kTypeUrlSize = 19; static const int64_t kTypeUrlSize = 19;
// Finds the tech option identified by option_name. Parses the boolean value and // Finds the tech option identified by option_name. Parses the boolean value and
// returns it. // returns it.
@ -64,9 +65,9 @@ PROTOBUF_EXPORT bool GetBoolOptionOrDefault(
// Returns int64 option value. If the option isn't found, returns the // Returns int64 option value. If the option isn't found, returns the
// default_value. // default_value.
PROTOBUF_EXPORT int64 GetInt64OptionOrDefault( PROTOBUF_EXPORT int64_t GetInt64OptionOrDefault(
const RepeatedPtrField<google::protobuf::Option>& options, const RepeatedPtrField<google::protobuf::Option>& options,
StringPiece option_name, int64 default_value); StringPiece option_name, int64_t default_value);
// Returns double option value. If the option isn't found, returns the // Returns double option value. If the option isn't found, returns the
// default_value. // default_value.
@ -87,7 +88,7 @@ PROTOBUF_EXPORT std::string GetStringOptionOrDefault(
PROTOBUF_EXPORT bool GetBoolFromAny(const google::protobuf::Any& any); PROTOBUF_EXPORT bool GetBoolFromAny(const google::protobuf::Any& any);
// Returns int64 value contained in Any type. // Returns int64 value contained in Any type.
PROTOBUF_EXPORT int64 GetInt64FromAny(const google::protobuf::Any& any); PROTOBUF_EXPORT int64_t GetInt64FromAny(const google::protobuf::Any& any);
// Returns double value contained in Any type. // Returns double value contained in Any type.
PROTOBUF_EXPORT double GetDoubleFromAny(const google::protobuf::Any& any); PROTOBUF_EXPORT double GetDoubleFromAny(const google::protobuf::Any& any);
@ -127,7 +128,7 @@ const google::protobuf::Field* FindJsonFieldInTypeOrNull(
// Similar to FindFieldInTypeOrNull, but this looks up fields by number. // Similar to FindFieldInTypeOrNull, but this looks up fields by number.
const google::protobuf::Field* FindFieldInTypeByNumberOrNull( const google::protobuf::Field* FindFieldInTypeByNumberOrNull(
const google::protobuf::Type* type, int32 number); const google::protobuf::Type* type, int32_t number);
// Finds and returns the EnumValue identified by enum_name in the passed tech // Finds and returns the EnumValue identified by enum_name in the passed tech
// Enum object. Returns nullptr if none found. // Enum object. Returns nullptr if none found.
@ -137,7 +138,7 @@ const google::protobuf::EnumValue* FindEnumValueByNameOrNull(
// Finds and returns the EnumValue identified by value in the passed tech // Finds and returns the EnumValue identified by value in the passed tech
// Enum object. Returns nullptr if none found. // Enum object. Returns nullptr if none found.
const google::protobuf::EnumValue* FindEnumValueByNumberOrNull( const google::protobuf::EnumValue* FindEnumValueByNumberOrNull(
const google::protobuf::Enum* enum_type, int32 value); const google::protobuf::Enum* enum_type, int32_t value);
// Finds and returns the EnumValue identified by enum_name without underscore in // Finds and returns the EnumValue identified by enum_name without underscore in
// the passed tech Enum object. Returns nullptr if none found. // the passed tech Enum object. Returns nullptr if none found.

@ -36,6 +36,7 @@
#include <google/protobuf/message.h> #include <google/protobuf/message.h>
#include <google/protobuf/util/type_resolver.h> #include <google/protobuf/util/type_resolver.h>
#include <google/protobuf/stubs/bytestream.h> #include <google/protobuf/stubs/bytestream.h>
#include <google/protobuf/stubs/status.h>
#include <google/protobuf/stubs/strutil.h> #include <google/protobuf/stubs/strutil.h>
#include <google/protobuf/port_def.inc> #include <google/protobuf/port_def.inc>
@ -93,11 +94,11 @@ typedef JsonPrintOptions JsonOptions;
// simple wrapper of BinaryToJsonString(). It will use the DescriptorPool of the // simple wrapper of BinaryToJsonString(). It will use the DescriptorPool of the
// passed-in message to resolve Any types. // passed-in message to resolve Any types.
PROTOBUF_EXPORT util::Status MessageToJsonString(const Message& message, PROTOBUF_EXPORT util::Status MessageToJsonString(const Message& message,
std::string* output, std::string* output,
const JsonOptions& options); const JsonOptions& options);
inline util::Status MessageToJsonString(const Message& message, inline util::Status MessageToJsonString(const Message& message,
std::string* output) { std::string* output) {
return MessageToJsonString(message, output, JsonOptions()); return MessageToJsonString(message, output, JsonOptions());
} }
@ -108,7 +109,7 @@ PROTOBUF_EXPORT util::Status JsonStringToMessage(
StringPiece input, Message* message, const JsonParseOptions& options); StringPiece input, Message* message, const JsonParseOptions& options);
inline util::Status JsonStringToMessage(StringPiece input, inline util::Status JsonStringToMessage(StringPiece input,
Message* message) { Message* message) {
return JsonStringToMessage(input, message, JsonParseOptions()); return JsonStringToMessage(input, message, JsonParseOptions());
} }
@ -123,10 +124,10 @@ PROTOBUF_EXPORT util::Status BinaryToJsonStream(
io::ZeroCopyInputStream* binary_input, io::ZeroCopyInputStream* binary_input,
io::ZeroCopyOutputStream* json_output, const JsonPrintOptions& options); io::ZeroCopyOutputStream* json_output, const JsonPrintOptions& options);
inline util::Status BinaryToJsonStream( inline util::Status BinaryToJsonStream(TypeResolver* resolver,
TypeResolver* resolver, const std::string& type_url, const std::string& type_url,
io::ZeroCopyInputStream* binary_input, io::ZeroCopyInputStream* binary_input,
io::ZeroCopyOutputStream* json_output) { io::ZeroCopyOutputStream* json_output) {
return BinaryToJsonStream(resolver, type_url, binary_input, json_output, return BinaryToJsonStream(resolver, type_url, binary_input, json_output,
JsonPrintOptions()); JsonPrintOptions());
} }
@ -137,9 +138,9 @@ PROTOBUF_EXPORT util::Status BinaryToJsonString(
const JsonPrintOptions& options); const JsonPrintOptions& options);
inline util::Status BinaryToJsonString(TypeResolver* resolver, inline util::Status BinaryToJsonString(TypeResolver* resolver,
const std::string& type_url, const std::string& type_url,
const std::string& binary_input, const std::string& binary_input,
std::string* json_output) { std::string* json_output) {
return BinaryToJsonString(resolver, type_url, binary_input, json_output, return BinaryToJsonString(resolver, type_url, binary_input, json_output,
JsonPrintOptions()); JsonPrintOptions());
} }
@ -168,9 +169,9 @@ PROTOBUF_EXPORT util::Status JsonToBinaryString(
const JsonParseOptions& options); const JsonParseOptions& options);
inline util::Status JsonToBinaryString(TypeResolver* resolver, inline util::Status JsonToBinaryString(TypeResolver* resolver,
const std::string& type_url, const std::string& type_url,
StringPiece json_input, StringPiece json_input,
std::string* binary_output) { std::string* binary_output) {
return JsonToBinaryString(resolver, type_url, json_input, binary_output, return JsonToBinaryString(resolver, type_url, json_input, binary_output,
JsonParseOptions()); JsonParseOptions());
} }

@ -325,14 +325,7 @@ void MessageDifferencer::CheckRepeatedFieldComparisons(
const MapKeyComparator* key_comparator = GetMapKeyComparator(field); const MapKeyComparator* key_comparator = GetMapKeyComparator(field);
GOOGLE_CHECK(key_comparator == NULL) GOOGLE_CHECK(key_comparator == NULL)
<< "Cannot treat this repeated field as both MAP and " << new_comparison << "Cannot treat this repeated field as both MAP and " << new_comparison
<< " for" << " for comparison. Field name is: " << field->full_name();
<< " comparison. Field name is: " << field->full_name();
GOOGLE_CHECK(repeated_field_comparisons_.find(field) ==
repeated_field_comparisons_.end() ||
repeated_field_comparisons_[field] == new_comparison)
<< "Cannot treat the same field as both "
<< repeated_field_comparisons_[field] << " and " << new_comparison
<< ". Field name is: " << field->full_name();
} }
void MessageDifferencer::TreatAsSet(const FieldDescriptor* field) { void MessageDifferencer::TreatAsSet(const FieldDescriptor* field) {

@ -431,7 +431,7 @@ class PROTOBUF_EXPORT MessageDifferencer {
// + n^3) in which n^3 is the time complexity of the maximum matching // + n^3) in which n^3 is the time complexity of the maximum matching
// algorithm. // algorithm.
// //
// REQUIRES: field->is_repeated() and field not registered with TreatAsList // REQUIRES: field->is_repeated() and field not registered with TreatAsMap*
void TreatAsSet(const FieldDescriptor* field); void TreatAsSet(const FieldDescriptor* field);
void TreatAsSmartSet(const FieldDescriptor* field); void TreatAsSmartSet(const FieldDescriptor* field);
@ -439,7 +439,7 @@ class PROTOBUF_EXPORT MessageDifferencer {
// diffing purposes, so different orderings of the same elements will NOT be // diffing purposes, so different orderings of the same elements will NOT be
// considered equal. // considered equal.
// //
// REQUIRED: field->is_repeated() and field not registered with TreatAsSet // REQUIRES: field->is_repeated() and field not registered with TreatAsMap*
void TreatAsList(const FieldDescriptor* field); void TreatAsList(const FieldDescriptor* field);
// Note that the complexity is similar to treating as SET. // Note that the complexity is similar to treating as SET.
void TreatAsSmartList(const FieldDescriptor* field); void TreatAsSmartList(const FieldDescriptor* field);

@ -1060,6 +1060,42 @@ TEST(MessageDifferencerTest,
EXPECT_TRUE(differencer.CompareWithFields(msg1, msg2, fields1, fields2)); EXPECT_TRUE(differencer.CompareWithFields(msg1, msg2, fields1, fields2));
} }
TEST(MessageDifferencerTest, RepeatedFieldTreatmentChangeListToSet) {
protobuf_unittest::TestDiffMessage msg1;
protobuf_unittest::TestDiffMessage msg2;
msg1.add_rv(1);
msg1.add_rv(2);
msg2.add_rv(2);
msg2.add_rv(1);
util::MessageDifferencer differencer;
differencer.TreatAsList(
protobuf_unittest::TestDiffMessage::descriptor()->FindFieldByName("rv"));
differencer.TreatAsSet(
protobuf_unittest::TestDiffMessage::descriptor()->FindFieldByName("rv"));
EXPECT_TRUE(differencer.Compare(msg1, msg2));
}
TEST(MessageDifferencerTest, RepeatedFieldTreatmentChangeSetToList) {
protobuf_unittest::TestDiffMessage msg1;
protobuf_unittest::TestDiffMessage msg2;
msg1.add_rv(1);
msg1.add_rv(2);
msg2.add_rv(2);
msg2.add_rv(1);
util::MessageDifferencer differencer;
differencer.TreatAsSet(
protobuf_unittest::TestDiffMessage::descriptor()->FindFieldByName("rv"));
differencer.TreatAsList(
protobuf_unittest::TestDiffMessage::descriptor()->FindFieldByName("rv"));
EXPECT_FALSE(differencer.Compare(msg1, msg2));
}
TEST(MessageDifferencerTest, RepeatedFieldSmartListTest) { TEST(MessageDifferencerTest, RepeatedFieldSmartListTest) {
// Create the testing protos // Create the testing protos
protobuf_unittest::TestDiffMessage msg1; protobuf_unittest::TestDiffMessage msg1;

@ -38,6 +38,7 @@
#include <google/protobuf/stubs/common.h> #include <google/protobuf/stubs/common.h>
#include <google/protobuf/type.pb.h> #include <google/protobuf/type.pb.h>
#include <google/protobuf/stubs/status.h> #include <google/protobuf/stubs/status.h>
#include <google/protobuf/stubs/status.h>
#include <google/protobuf/port_def.inc> #include <google/protobuf/port_def.inc>
@ -60,7 +61,7 @@ class PROTOBUF_EXPORT TypeResolver {
// Resolves a type url for an enum type. // Resolves a type url for an enum type.
virtual util::Status ResolveEnumType(const std::string& type_url, virtual util::Status ResolveEnumType(const std::string& type_url,
google::protobuf::Enum* enum_type) = 0; google::protobuf::Enum* enum_type) = 0;
private: private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TypeResolver); GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TypeResolver);

@ -64,7 +64,6 @@ using google::protobuf::Type;
using google::protobuf::UInt32Value; using google::protobuf::UInt32Value;
using google::protobuf::UInt64Value; using google::protobuf::UInt64Value;
using util::Status;
using util::error::INVALID_ARGUMENT; using util::error::INVALID_ARGUMENT;
using util::error::NOT_FOUND; using util::error::NOT_FOUND;

@ -231,10 +231,8 @@ const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google
schemas, file_default_instances, TableStruct_google_2fprotobuf_2fwrappers_2eproto::offsets, schemas, file_default_instances, TableStruct_google_2fprotobuf_2fwrappers_2eproto::offsets,
file_level_metadata_google_2fprotobuf_2fwrappers_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fwrappers_2eproto, file_level_service_descriptors_google_2fprotobuf_2fwrappers_2eproto, file_level_metadata_google_2fprotobuf_2fwrappers_2eproto, file_level_enum_descriptors_google_2fprotobuf_2fwrappers_2eproto, file_level_service_descriptors_google_2fprotobuf_2fwrappers_2eproto,
}; };
PROTOBUF_ATTRIBUTE_WEAK ::PROTOBUF_NAMESPACE_ID::Metadata PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter() {
descriptor_table_google_2fprotobuf_2fwrappers_2eproto_metadata_getter(int index) { return &descriptor_table_google_2fprotobuf_2fwrappers_2eproto;
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fwrappers_2eproto);
return descriptor_table_google_2fprotobuf_2fwrappers_2eproto.file_level_metadata[index];
} }
// Force running AddDescriptors() at dynamic initialization time. // Force running AddDescriptors() at dynamic initialization time.
@ -424,10 +422,11 @@ void DoubleValue::InternalSwap(DoubleValue* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata DoubleValue::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata DoubleValue::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[0]);
} }
// =================================================================== // ===================================================================
class FloatValue::_Internal { class FloatValue::_Internal {
@ -611,10 +610,11 @@ void FloatValue::InternalSwap(FloatValue* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata FloatValue::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata FloatValue::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[1]);
} }
// =================================================================== // ===================================================================
class Int64Value::_Internal { class Int64Value::_Internal {
@ -800,10 +800,11 @@ void Int64Value::InternalSwap(Int64Value* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Int64Value::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Int64Value::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[2]);
} }
// =================================================================== // ===================================================================
class UInt64Value::_Internal { class UInt64Value::_Internal {
@ -989,10 +990,11 @@ void UInt64Value::InternalSwap(UInt64Value* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata UInt64Value::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata UInt64Value::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[3]);
} }
// =================================================================== // ===================================================================
class Int32Value::_Internal { class Int32Value::_Internal {
@ -1178,10 +1180,11 @@ void Int32Value::InternalSwap(Int32Value* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata Int32Value::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata Int32Value::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[4]);
} }
// =================================================================== // ===================================================================
class UInt32Value::_Internal { class UInt32Value::_Internal {
@ -1367,10 +1370,11 @@ void UInt32Value::InternalSwap(UInt32Value* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata UInt32Value::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata UInt32Value::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[5]);
} }
// =================================================================== // ===================================================================
class BoolValue::_Internal { class BoolValue::_Internal {
@ -1554,10 +1558,11 @@ void BoolValue::InternalSwap(BoolValue* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata BoolValue::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata BoolValue::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[6]);
} }
// =================================================================== // ===================================================================
class StringValue::_Internal { class StringValue::_Internal {
@ -1754,10 +1759,11 @@ void StringValue::InternalSwap(StringValue* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata StringValue::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata StringValue::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[7]);
} }
// =================================================================== // ===================================================================
class BytesValue::_Internal { class BytesValue::_Internal {
@ -1949,10 +1955,11 @@ void BytesValue::InternalSwap(BytesValue* other) {
} }
::PROTOBUF_NAMESPACE_ID::Metadata BytesValue::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata BytesValue::GetMetadata() const {
return GetMetadataStatic(); return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[8]);
} }
// @@protoc_insertion_point(namespace_scope) // @@protoc_insertion_point(namespace_scope)
PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_CLOSE
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN

@ -53,7 +53,6 @@ struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fwrappers_2eproto {
static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
}; };
extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fwrappers_2eproto; extern PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fwrappers_2eproto;
PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Metadata descriptor_table_google_2fprotobuf_2fwrappers_2eproto_metadata_getter(int index);
PROTOBUF_NAMESPACE_OPEN PROTOBUF_NAMESPACE_OPEN
class BoolValue; class BoolValue;
struct BoolValueDefaultTypeInternal; struct BoolValueDefaultTypeInternal;
@ -128,10 +127,10 @@ class PROTOBUF_EXPORT DoubleValue PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const DoubleValue& default_instance() { static const DoubleValue& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -199,12 +198,6 @@ class PROTOBUF_EXPORT DoubleValue PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fwrappers_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -265,10 +258,10 @@ class PROTOBUF_EXPORT FloatValue PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const FloatValue& default_instance() { static const FloatValue& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -336,12 +329,6 @@ class PROTOBUF_EXPORT FloatValue PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fwrappers_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -402,10 +389,10 @@ class PROTOBUF_EXPORT Int64Value PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Int64Value& default_instance() { static const Int64Value& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -473,12 +460,6 @@ class PROTOBUF_EXPORT Int64Value PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fwrappers_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -539,10 +520,10 @@ class PROTOBUF_EXPORT UInt64Value PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const UInt64Value& default_instance() { static const UInt64Value& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -610,12 +591,6 @@ class PROTOBUF_EXPORT UInt64Value PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fwrappers_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -676,10 +651,10 @@ class PROTOBUF_EXPORT Int32Value PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const Int32Value& default_instance() { static const Int32Value& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -747,12 +722,6 @@ class PROTOBUF_EXPORT Int32Value PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fwrappers_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -813,10 +782,10 @@ class PROTOBUF_EXPORT UInt32Value PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const UInt32Value& default_instance() { static const UInt32Value& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -884,12 +853,6 @@ class PROTOBUF_EXPORT UInt32Value PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fwrappers_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -950,10 +913,10 @@ class PROTOBUF_EXPORT BoolValue PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const BoolValue& default_instance() { static const BoolValue& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -1021,12 +984,6 @@ class PROTOBUF_EXPORT BoolValue PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fwrappers_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -1087,10 +1044,10 @@ class PROTOBUF_EXPORT StringValue PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const StringValue& default_instance() { static const StringValue& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -1158,12 +1115,6 @@ class PROTOBUF_EXPORT StringValue PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fwrappers_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -1175,10 +1126,8 @@ class PROTOBUF_EXPORT StringValue PROTOBUF_FINAL :
// string value = 1; // string value = 1;
void clear_value(); void clear_value();
const std::string& value() const; const std::string& value() const;
void set_value(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_value(std::string&& value); void set_value(ArgT0&& arg0, ArgT... args);
void set_value(const char* value);
void set_value(const char* value, size_t size);
std::string* mutable_value(); std::string* mutable_value();
std::string* release_value(); std::string* release_value();
void set_allocated_value(std::string* value); void set_allocated_value(std::string* value);
@ -1231,10 +1180,10 @@ class PROTOBUF_EXPORT BytesValue PROTOBUF_FINAL :
return GetDescriptor(); return GetDescriptor();
} }
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor; return default_instance().GetMetadata().descriptor;
} }
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection; return default_instance().GetMetadata().reflection;
} }
static const BytesValue& default_instance() { static const BytesValue& default_instance() {
return *internal_default_instance(); return *internal_default_instance();
@ -1302,12 +1251,6 @@ class PROTOBUF_EXPORT BytesValue PROTOBUF_FINAL :
public: public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
return ::descriptor_table_google_2fprotobuf_2fwrappers_2eproto_metadata_getter(kIndexInFileMessages);
}
public:
// nested types ---------------------------------------------------- // nested types ----------------------------------------------------
@ -1319,10 +1262,8 @@ class PROTOBUF_EXPORT BytesValue PROTOBUF_FINAL :
// bytes value = 1; // bytes value = 1;
void clear_value(); void clear_value();
const std::string& value() const; const std::string& value() const;
void set_value(const std::string& value); template <typename ArgT0 = const std::string&, typename... ArgT>
void set_value(std::string&& value); void set_value(ArgT0&& arg0, ArgT... args);
void set_value(const char* value);
void set_value(const void* value, size_t size);
std::string* mutable_value(); std::string* mutable_value();
std::string* release_value(); std::string* release_value();
void set_allocated_value(std::string* value); void set_allocated_value(std::string* value);
@ -1530,8 +1471,11 @@ inline const std::string& StringValue::value() const {
// @@protoc_insertion_point(field_get:google.protobuf.StringValue.value) // @@protoc_insertion_point(field_get:google.protobuf.StringValue.value)
return _internal_value(); return _internal_value();
} }
inline void StringValue::set_value(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_value(value); PROTOBUF_ALWAYS_INLINE
inline void StringValue::set_value(ArgT0&& arg0, ArgT... args) {
value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.StringValue.value) // @@protoc_insertion_point(field_set:google.protobuf.StringValue.value)
} }
inline std::string* StringValue::mutable_value() { inline std::string* StringValue::mutable_value() {
@ -1545,25 +1489,6 @@ inline void StringValue::_internal_set_value(const std::string& value) {
value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void StringValue::set_value(std::string&& value) {
value_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.StringValue.value)
}
inline void StringValue::set_value(const char* value) {
GOOGLE_DCHECK(value != nullptr);
value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.StringValue.value)
}
inline void StringValue::set_value(const char* value,
size_t size) {
value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.StringValue.value)
}
inline std::string* StringValue::_internal_mutable_value() { inline std::string* StringValue::_internal_mutable_value() {
return value_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return value_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
@ -1595,8 +1520,11 @@ inline const std::string& BytesValue::value() const {
// @@protoc_insertion_point(field_get:google.protobuf.BytesValue.value) // @@protoc_insertion_point(field_get:google.protobuf.BytesValue.value)
return _internal_value(); return _internal_value();
} }
inline void BytesValue::set_value(const std::string& value) { template <typename ArgT0, typename... ArgT>
_internal_set_value(value); PROTOBUF_ALWAYS_INLINE
inline void BytesValue::set_value(ArgT0&& arg0, ArgT... args) {
value_.SetBytes(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.BytesValue.value) // @@protoc_insertion_point(field_set:google.protobuf.BytesValue.value)
} }
inline std::string* BytesValue::mutable_value() { inline std::string* BytesValue::mutable_value() {
@ -1610,25 +1538,6 @@ inline void BytesValue::_internal_set_value(const std::string& value) {
value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
} }
inline void BytesValue::set_value(std::string&& value) {
value_.Set(
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
// @@protoc_insertion_point(field_set_rvalue:google.protobuf.BytesValue.value)
}
inline void BytesValue::set_value(const char* value) {
GOOGLE_DCHECK(value != nullptr);
value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
// @@protoc_insertion_point(field_set_char:google.protobuf.BytesValue.value)
}
inline void BytesValue::set_value(const void* value,
size_t size) {
value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
reinterpret_cast<const char*>(value), size), GetArena());
// @@protoc_insertion_point(field_set_pointer:google.protobuf.BytesValue.value)
}
inline std::string* BytesValue::_internal_mutable_value() { inline std::string* BytesValue::_internal_mutable_value() {
return value_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); return value_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());

Loading…
Cancel
Save