OLD | NEW |
1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format |
2 // Copyright 2008 Google Inc. All rights reserved. | 2 // Copyright 2008 Google Inc. All rights reserved. |
3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ |
4 // | 4 // |
5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
7 // met: | 7 // met: |
8 // | 8 // |
9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 (*variables)["default_number"] = SimpleItoa( | 69 (*variables)["default_number"] = SimpleItoa( |
70 descriptor->default_value_enum()->number()); | 70 descriptor->default_value_enum()->number()); |
71 (*variables)["tag"] = SimpleItoa(internal::WireFormat::MakeTag(descriptor)); | 71 (*variables)["tag"] = SimpleItoa(internal::WireFormat::MakeTag(descriptor)); |
72 (*variables)["tag_size"] = SimpleItoa( | 72 (*variables)["tag_size"] = SimpleItoa( |
73 internal::WireFormat::TagSize(descriptor->number(), GetType(descriptor))); | 73 internal::WireFormat::TagSize(descriptor->number(), GetType(descriptor))); |
74 // TODO(birdo): Add @deprecated javadoc when generating javadoc is supported | 74 // TODO(birdo): Add @deprecated javadoc when generating javadoc is supported |
75 // by the proto compiler | 75 // by the proto compiler |
76 (*variables)["deprecation"] = descriptor->options().deprecated() | 76 (*variables)["deprecation"] = descriptor->options().deprecated() |
77 ? "@java.lang.Deprecated " : ""; | 77 ? "@java.lang.Deprecated " : ""; |
78 (*variables)["on_changed"] = "onChanged();"; | 78 (*variables)["on_changed"] = "onChanged();"; |
| 79 // Use deprecated valueOf() method to be compatible with old generated code |
| 80 // for v2.5.0/v2.6.1. |
| 81 // TODO(xiaofeng): Use "forNumber" when we no longer support compatibility |
| 82 // with v2.5.0/v2.6.1. |
| 83 (*variables)["for_number"] = "valueOf"; |
79 | 84 |
80 if (SupportFieldPresence(descriptor->file())) { | 85 if (SupportFieldPresence(descriptor->file())) { |
81 // For singular messages and builders, one bit is used for the hasField bit. | 86 // For singular messages and builders, one bit is used for the hasField bit. |
82 (*variables)["get_has_field_bit_message"] = GenerateGetBit(messageBitIndex); | 87 (*variables)["get_has_field_bit_message"] = GenerateGetBit(messageBitIndex); |
83 (*variables)["get_has_field_bit_builder"] = GenerateGetBit(builderBitIndex); | 88 (*variables)["get_has_field_bit_builder"] = GenerateGetBit(builderBitIndex); |
84 | 89 |
85 // Note that these have a trailing ";". | 90 // Note that these have a trailing ";". |
86 (*variables)["set_has_field_bit_message"] = | 91 (*variables)["set_has_field_bit_message"] = |
87 GenerateSetBit(messageBitIndex) + ";"; | 92 GenerateSetBit(messageBitIndex) + ";"; |
88 (*variables)["set_has_field_bit_builder"] = | 93 (*variables)["set_has_field_bit_builder"] = |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 if (SupportUnknownEnumValue(descriptor_->file())) { | 189 if (SupportUnknownEnumValue(descriptor_->file())) { |
185 WriteFieldDocComment(printer, descriptor_); | 190 WriteFieldDocComment(printer, descriptor_); |
186 printer->Print(variables_, | 191 printer->Print(variables_, |
187 "$deprecation$public int get$capitalized_name$Value() {\n" | 192 "$deprecation$public int get$capitalized_name$Value() {\n" |
188 " return $name$_;\n" | 193 " return $name$_;\n" |
189 "}\n"); | 194 "}\n"); |
190 } | 195 } |
191 WriteFieldDocComment(printer, descriptor_); | 196 WriteFieldDocComment(printer, descriptor_); |
192 printer->Print(variables_, | 197 printer->Print(variables_, |
193 "$deprecation$public $type$ get$capitalized_name$() {\n" | 198 "$deprecation$public $type$ get$capitalized_name$() {\n" |
194 " $type$ result = $type$.forNumber($name$_);\n" | 199 " $type$ result = $type$.$for_number$($name$_);\n" |
195 " return result == null ? $unknown$ : result;\n" | 200 " return result == null ? $unknown$ : result;\n" |
196 "}\n"); | 201 "}\n"); |
197 } | 202 } |
198 | 203 |
199 void ImmutableEnumFieldGenerator:: | 204 void ImmutableEnumFieldGenerator:: |
200 GenerateBuilderMembers(io::Printer* printer) const { | 205 GenerateBuilderMembers(io::Printer* printer) const { |
201 printer->Print(variables_, | 206 printer->Print(variables_, |
202 "private int $name$_ = $default_number$;\n"); | 207 "private int $name$_ = $default_number$;\n"); |
203 if (SupportFieldPresence(descriptor_->file())) { | 208 if (SupportFieldPresence(descriptor_->file())) { |
204 WriteFieldDocComment(printer, descriptor_); | 209 WriteFieldDocComment(printer, descriptor_); |
(...skipping 12 matching lines...) Expand all Loading... |
217 printer->Print(variables_, | 222 printer->Print(variables_, |
218 "$deprecation$public Builder set$capitalized_name$Value(int value) {\n" | 223 "$deprecation$public Builder set$capitalized_name$Value(int value) {\n" |
219 " $name$_ = value;\n" | 224 " $name$_ = value;\n" |
220 " $on_changed$\n" | 225 " $on_changed$\n" |
221 " return this;\n" | 226 " return this;\n" |
222 "}\n"); | 227 "}\n"); |
223 } | 228 } |
224 WriteFieldDocComment(printer, descriptor_); | 229 WriteFieldDocComment(printer, descriptor_); |
225 printer->Print(variables_, | 230 printer->Print(variables_, |
226 "$deprecation$public $type$ get$capitalized_name$() {\n" | 231 "$deprecation$public $type$ get$capitalized_name$() {\n" |
227 " $type$ result = $type$.forNumber($name$_);\n" | 232 " $type$ result = $type$.$for_number$($name$_);\n" |
228 " return result == null ? $unknown$ : result;\n" | 233 " return result == null ? $unknown$ : result;\n" |
229 "}\n"); | 234 "}\n"); |
230 WriteFieldDocComment(printer, descriptor_); | 235 WriteFieldDocComment(printer, descriptor_); |
231 printer->Print(variables_, | 236 printer->Print(variables_, |
232 "$deprecation$public Builder set$capitalized_name$($type$ value) {\n" | 237 "$deprecation$public Builder set$capitalized_name$($type$ value) {\n" |
233 " if (value == null) {\n" | 238 " if (value == null) {\n" |
234 " throw new NullPointerException();\n" | 239 " throw new NullPointerException();\n" |
235 " }\n" | 240 " }\n" |
236 " $set_has_field_bit_builder$\n" | 241 " $set_has_field_bit_builder$\n" |
237 " $name$_ = value.getNumber();\n" | 242 " $name$_ = value.getNumber();\n" |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 void ImmutableEnumFieldGenerator:: | 302 void ImmutableEnumFieldGenerator:: |
298 GenerateParsingCode(io::Printer* printer) const { | 303 GenerateParsingCode(io::Printer* printer) const { |
299 if (SupportUnknownEnumValue(descriptor_->file())) { | 304 if (SupportUnknownEnumValue(descriptor_->file())) { |
300 printer->Print(variables_, | 305 printer->Print(variables_, |
301 "int rawValue = input.readEnum();\n" | 306 "int rawValue = input.readEnum();\n" |
302 "$set_has_field_bit_message$\n" | 307 "$set_has_field_bit_message$\n" |
303 "$name$_ = rawValue;\n"); | 308 "$name$_ = rawValue;\n"); |
304 } else { | 309 } else { |
305 printer->Print(variables_, | 310 printer->Print(variables_, |
306 "int rawValue = input.readEnum();\n" | 311 "int rawValue = input.readEnum();\n" |
307 "$type$ value = $type$.forNumber(rawValue);\n" | 312 "$type$ value = $type$.$for_number$(rawValue);\n" |
308 "if (value == null) {\n"); | 313 "if (value == null) {\n"); |
309 if (PreserveUnknownFields(descriptor_->containing_type())) { | 314 if (PreserveUnknownFields(descriptor_->containing_type())) { |
310 printer->Print(variables_, | 315 printer->Print(variables_, |
311 " unknownFields.mergeVarintField($number$, rawValue);\n"); | 316 " unknownFields.mergeVarintField($number$, rawValue);\n"); |
312 } | 317 } |
313 printer->Print(variables_, | 318 printer->Print(variables_, |
314 "} else {\n" | 319 "} else {\n" |
315 " $set_has_field_bit_message$\n" | 320 " $set_has_field_bit_message$\n" |
316 " $name$_ = rawValue;\n" | 321 " $name$_ = rawValue;\n" |
317 "}\n"); | 322 "}\n"); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 " if ($has_oneof_case_message$) {\n" | 396 " if ($has_oneof_case_message$) {\n" |
392 " return (java.lang.Integer) $oneof_name$_;\n" | 397 " return (java.lang.Integer) $oneof_name$_;\n" |
393 " }\n" | 398 " }\n" |
394 " return $default_number$;\n" | 399 " return $default_number$;\n" |
395 "}\n"); | 400 "}\n"); |
396 } | 401 } |
397 WriteFieldDocComment(printer, descriptor_); | 402 WriteFieldDocComment(printer, descriptor_); |
398 printer->Print(variables_, | 403 printer->Print(variables_, |
399 "$deprecation$public $type$ get$capitalized_name$() {\n" | 404 "$deprecation$public $type$ get$capitalized_name$() {\n" |
400 " if ($has_oneof_case_message$) {\n" | 405 " if ($has_oneof_case_message$) {\n" |
401 " $type$ result = $type$.forNumber((java.lang.Integer) $oneof_name$_);\n" | 406 " $type$ result = $type$.$for_number$(\n" |
| 407 " (java.lang.Integer) $oneof_name$_);\n" |
402 " return result == null ? $unknown$ : result;\n" | 408 " return result == null ? $unknown$ : result;\n" |
403 " }\n" | 409 " }\n" |
404 " return $default$;\n" | 410 " return $default$;\n" |
405 "}\n"); | 411 "}\n"); |
406 } | 412 } |
407 | 413 |
408 void ImmutableEnumOneofFieldGenerator:: | 414 void ImmutableEnumOneofFieldGenerator:: |
409 GenerateBuilderMembers(io::Printer* printer) const { | 415 GenerateBuilderMembers(io::Printer* printer) const { |
410 if (SupportFieldPresence(descriptor_->file())) { | 416 if (SupportFieldPresence(descriptor_->file())) { |
411 WriteFieldDocComment(printer, descriptor_); | 417 WriteFieldDocComment(printer, descriptor_); |
(...skipping 17 matching lines...) Expand all Loading... |
429 " $set_oneof_case_message$;\n" | 435 " $set_oneof_case_message$;\n" |
430 " $oneof_name$_ = value;\n" | 436 " $oneof_name$_ = value;\n" |
431 " $on_changed$\n" | 437 " $on_changed$\n" |
432 " return this;\n" | 438 " return this;\n" |
433 "}\n"); | 439 "}\n"); |
434 } | 440 } |
435 WriteFieldDocComment(printer, descriptor_); | 441 WriteFieldDocComment(printer, descriptor_); |
436 printer->Print(variables_, | 442 printer->Print(variables_, |
437 "$deprecation$public $type$ get$capitalized_name$() {\n" | 443 "$deprecation$public $type$ get$capitalized_name$() {\n" |
438 " if ($has_oneof_case_message$) {\n" | 444 " if ($has_oneof_case_message$) {\n" |
439 " $type$ result = $type$.forNumber((java.lang.Integer) $oneof_name$_);\n" | 445 " $type$ result = $type$.$for_number$(\n" |
| 446 " (java.lang.Integer) $oneof_name$_);\n" |
440 " return result == null ? $unknown$ : result;\n" | 447 " return result == null ? $unknown$ : result;\n" |
441 " }\n" | 448 " }\n" |
442 " return $default$;\n" | 449 " return $default$;\n" |
443 "}\n"); | 450 "}\n"); |
444 WriteFieldDocComment(printer, descriptor_); | 451 WriteFieldDocComment(printer, descriptor_); |
445 printer->Print(variables_, | 452 printer->Print(variables_, |
446 "$deprecation$public Builder set$capitalized_name$($type$ value) {\n" | 453 "$deprecation$public Builder set$capitalized_name$($type$ value) {\n" |
447 " if (value == null) {\n" | 454 " if (value == null) {\n" |
448 " throw new NullPointerException();\n" | 455 " throw new NullPointerException();\n" |
449 " }\n" | 456 " }\n" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 void ImmutableEnumOneofFieldGenerator:: | 493 void ImmutableEnumOneofFieldGenerator:: |
487 GenerateParsingCode(io::Printer* printer) const { | 494 GenerateParsingCode(io::Printer* printer) const { |
488 if (SupportUnknownEnumValue(descriptor_->file())) { | 495 if (SupportUnknownEnumValue(descriptor_->file())) { |
489 printer->Print(variables_, | 496 printer->Print(variables_, |
490 "int rawValue = input.readEnum();\n" | 497 "int rawValue = input.readEnum();\n" |
491 "$set_oneof_case_message$;\n" | 498 "$set_oneof_case_message$;\n" |
492 "$oneof_name$_ = rawValue;\n"); | 499 "$oneof_name$_ = rawValue;\n"); |
493 } else { | 500 } else { |
494 printer->Print(variables_, | 501 printer->Print(variables_, |
495 "int rawValue = input.readEnum();\n" | 502 "int rawValue = input.readEnum();\n" |
496 "$type$ value = $type$.forNumber(rawValue);\n" | 503 "$type$ value = $type$.$for_number$(rawValue);\n" |
497 "if (value == null) {\n"); | 504 "if (value == null) {\n"); |
498 if (PreserveUnknownFields(descriptor_->containing_type())) { | 505 if (PreserveUnknownFields(descriptor_->containing_type())) { |
499 printer->Print(variables_, | 506 printer->Print(variables_, |
500 " unknownFields.mergeVarintField($number$, rawValue);\n"); | 507 " unknownFields.mergeVarintField($number$, rawValue);\n"); |
501 } | 508 } |
502 printer->Print(variables_, | 509 printer->Print(variables_, |
503 "} else {\n" | 510 "} else {\n" |
504 " $set_oneof_case_message$;\n" | 511 " $set_oneof_case_message$;\n" |
505 " $oneof_name$_ = rawValue;\n" | 512 " $oneof_name$_ = rawValue;\n" |
506 "}\n"); | 513 "}\n"); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
599 | 606 |
600 void RepeatedImmutableEnumFieldGenerator:: | 607 void RepeatedImmutableEnumFieldGenerator:: |
601 GenerateMembers(io::Printer* printer) const { | 608 GenerateMembers(io::Printer* printer) const { |
602 printer->Print(variables_, | 609 printer->Print(variables_, |
603 "private java.util.List<java.lang.Integer> $name$_;\n" | 610 "private java.util.List<java.lang.Integer> $name$_;\n" |
604 "private static final com.google.protobuf.Internal.ListAdapter.Converter<\n" | 611 "private static final com.google.protobuf.Internal.ListAdapter.Converter<\n" |
605 " java.lang.Integer, $type$> $name$_converter_ =\n" | 612 " java.lang.Integer, $type$> $name$_converter_ =\n" |
606 " new com.google.protobuf.Internal.ListAdapter.Converter<\n" | 613 " new com.google.protobuf.Internal.ListAdapter.Converter<\n" |
607 " java.lang.Integer, $type$>() {\n" | 614 " java.lang.Integer, $type$>() {\n" |
608 " public $type$ convert(java.lang.Integer from) {\n" | 615 " public $type$ convert(java.lang.Integer from) {\n" |
609 " $type$ result = $type$.forNumber(from);\n" | 616 " $type$ result = $type$.$for_number$(from);\n" |
610 " return result == null ? $unknown$ : result;\n" | 617 " return result == null ? $unknown$ : result;\n" |
611 " }\n" | 618 " }\n" |
612 " };\n"); | 619 " };\n"); |
613 PrintExtraFieldInfo(variables_, printer); | 620 PrintExtraFieldInfo(variables_, printer); |
614 WriteFieldDocComment(printer, descriptor_); | 621 WriteFieldDocComment(printer, descriptor_); |
615 printer->Print(variables_, | 622 printer->Print(variables_, |
616 "$deprecation$public java.util.List<$type$> get$capitalized_name$List() {\n" | 623 "$deprecation$public java.util.List<$type$> get$capitalized_name$List() {\n" |
617 " return new com.google.protobuf.Internal.ListAdapter<\n" | 624 " return new com.google.protobuf.Internal.ListAdapter<\n" |
618 " java.lang.Integer, $type$>($name$_, $name$_converter_);\n" | 625 " java.lang.Integer, $type$>($name$_, $name$_converter_);\n" |
619 "}\n"); | 626 "}\n"); |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
832 printer->Print(variables_, | 839 printer->Print(variables_, |
833 "int rawValue = input.readEnum();\n" | 840 "int rawValue = input.readEnum();\n" |
834 "if (!$get_mutable_bit_parser$) {\n" | 841 "if (!$get_mutable_bit_parser$) {\n" |
835 " $name$_ = new java.util.ArrayList<java.lang.Integer>();\n" | 842 " $name$_ = new java.util.ArrayList<java.lang.Integer>();\n" |
836 " $set_mutable_bit_parser$;\n" | 843 " $set_mutable_bit_parser$;\n" |
837 "}\n" | 844 "}\n" |
838 "$name$_.add(rawValue);\n"); | 845 "$name$_.add(rawValue);\n"); |
839 } else { | 846 } else { |
840 printer->Print(variables_, | 847 printer->Print(variables_, |
841 "int rawValue = input.readEnum();\n" | 848 "int rawValue = input.readEnum();\n" |
842 "$type$ value = $type$.forNumber(rawValue);\n" | 849 "$type$ value = $type$.$for_number$(rawValue);\n" |
843 "if (value == null) {\n"); | 850 "if (value == null) {\n"); |
844 if (PreserveUnknownFields(descriptor_->containing_type())) { | 851 if (PreserveUnknownFields(descriptor_->containing_type())) { |
845 printer->Print(variables_, | 852 printer->Print(variables_, |
846 " unknownFields.mergeVarintField($number$, rawValue);\n"); | 853 " unknownFields.mergeVarintField($number$, rawValue);\n"); |
847 } | 854 } |
848 printer->Print(variables_, | 855 printer->Print(variables_, |
849 "} else {\n" | 856 "} else {\n" |
850 " if (!$get_mutable_bit_parser$) {\n" | 857 " if (!$get_mutable_bit_parser$) {\n" |
851 " $name$_ = new java.util.ArrayList<java.lang.Integer>();\n" | 858 " $name$_ = new java.util.ArrayList<java.lang.Integer>();\n" |
852 " $set_mutable_bit_parser$;\n" | 859 " $set_mutable_bit_parser$;\n" |
(...skipping 27 matching lines...) Expand all Loading... |
880 "if ($get_mutable_bit_parser$) {\n" | 887 "if ($get_mutable_bit_parser$) {\n" |
881 " $name$_ = java.util.Collections.unmodifiableList($name$_);\n" | 888 " $name$_ = java.util.Collections.unmodifiableList($name$_);\n" |
882 "}\n"); | 889 "}\n"); |
883 } | 890 } |
884 | 891 |
885 void RepeatedImmutableEnumFieldGenerator:: | 892 void RepeatedImmutableEnumFieldGenerator:: |
886 GenerateSerializationCode(io::Printer* printer) const { | 893 GenerateSerializationCode(io::Printer* printer) const { |
887 if (descriptor_->is_packed()) { | 894 if (descriptor_->is_packed()) { |
888 printer->Print(variables_, | 895 printer->Print(variables_, |
889 "if (get$capitalized_name$List().size() > 0) {\n" | 896 "if (get$capitalized_name$List().size() > 0) {\n" |
890 " output.writeRawVarint32($tag$);\n" | 897 " output.writeUInt32NoTag($tag$);\n" |
891 " output.writeRawVarint32($name$MemoizedSerializedSize);\n" | 898 " output.writeUInt32NoTag($name$MemoizedSerializedSize);\n" |
892 "}\n" | 899 "}\n" |
893 "for (int i = 0; i < $name$_.size(); i++) {\n" | 900 "for (int i = 0; i < $name$_.size(); i++) {\n" |
894 " output.writeEnumNoTag($name$_.get(i));\n" | 901 " output.writeEnumNoTag($name$_.get(i));\n" |
895 "}\n"); | 902 "}\n"); |
896 } else { | 903 } else { |
897 printer->Print(variables_, | 904 printer->Print(variables_, |
898 "for (int i = 0; i < $name$_.size(); i++) {\n" | 905 "for (int i = 0; i < $name$_.size(); i++) {\n" |
899 " output.writeEnum($number$, $name$_.get(i));\n" | 906 " output.writeEnum($number$, $name$_.get(i));\n" |
900 "}\n"); | 907 "}\n"); |
901 } | 908 } |
(...skipping 11 matching lines...) Expand all Loading... |
913 " dataSize += com.google.protobuf.CodedOutputStream\n" | 920 " dataSize += com.google.protobuf.CodedOutputStream\n" |
914 " .computeEnumSizeNoTag($name$_.get(i));\n" | 921 " .computeEnumSizeNoTag($name$_.get(i));\n" |
915 "}\n"); | 922 "}\n"); |
916 printer->Print( | 923 printer->Print( |
917 "size += dataSize;\n"); | 924 "size += dataSize;\n"); |
918 if (descriptor_->is_packed()) { | 925 if (descriptor_->is_packed()) { |
919 printer->Print(variables_, | 926 printer->Print(variables_, |
920 "if (!get$capitalized_name$List().isEmpty()) {" | 927 "if (!get$capitalized_name$List().isEmpty()) {" |
921 " size += $tag_size$;\n" | 928 " size += $tag_size$;\n" |
922 " size += com.google.protobuf.CodedOutputStream\n" | 929 " size += com.google.protobuf.CodedOutputStream\n" |
923 " .computeRawVarint32Size(dataSize);\n" | 930 " .computeUInt32SizeNoTag(dataSize);\n" |
924 "}"); | 931 "}"); |
925 } else { | 932 } else { |
926 printer->Print(variables_, | 933 printer->Print(variables_, |
927 "size += $tag_size$ * $name$_.size();\n"); | 934 "size += $tag_size$ * $name$_.size();\n"); |
928 } | 935 } |
929 | 936 |
930 // cache the data size for packed fields. | 937 // cache the data size for packed fields. |
931 if (descriptor_->is_packed()) { | 938 if (descriptor_->is_packed()) { |
932 printer->Print(variables_, | 939 printer->Print(variables_, |
933 "$name$MemoizedSerializedSize = dataSize;\n"); | 940 "$name$MemoizedSerializedSize = dataSize;\n"); |
(...skipping 19 matching lines...) Expand all Loading... |
953 } | 960 } |
954 | 961 |
955 string RepeatedImmutableEnumFieldGenerator::GetBoxedType() const { | 962 string RepeatedImmutableEnumFieldGenerator::GetBoxedType() const { |
956 return name_resolver_->GetImmutableClassName(descriptor_->enum_type()); | 963 return name_resolver_->GetImmutableClassName(descriptor_->enum_type()); |
957 } | 964 } |
958 | 965 |
959 } // namespace java | 966 } // namespace java |
960 } // namespace compiler | 967 } // namespace compiler |
961 } // namespace protobuf | 968 } // namespace protobuf |
962 } // namespace google | 969 } // namespace google |
OLD | NEW |