protoc 2.6.1.1 → 2.6.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (479) hide show
  1. checksums.yaml +4 -4
  2. data/ext/protoc/Makefile.in +10 -13
  3. data/ext/protoc/extconf.rb +0 -1
  4. data/ext/protoc/protobuf/CHANGES.txt +593 -0
  5. data/ext/protoc/protobuf/CONTRIBUTORS.txt +93 -0
  6. data/ext/protoc/protobuf/INSTALL.txt +237 -0
  7. data/ext/protoc/protobuf/LICENSE +33 -0
  8. data/ext/protoc/protobuf/Makefile.am +267 -0
  9. data/ext/protoc/protobuf/README.md +167 -0
  10. data/ext/protoc/protobuf/autogen.sh +41 -0
  11. data/ext/protoc/protobuf/benchmarks/ProtoBench.java +203 -0
  12. data/ext/protoc/protobuf/benchmarks/google_message1.dat +0 -0
  13. data/ext/protoc/protobuf/benchmarks/google_message2.dat +0 -0
  14. data/ext/protoc/protobuf/benchmarks/google_size.proto +136 -0
  15. data/ext/protoc/protobuf/benchmarks/google_speed.proto +136 -0
  16. data/ext/protoc/protobuf/benchmarks/readme.txt +50 -0
  17. data/ext/protoc/protobuf/configure.ac +159 -0
  18. data/ext/protoc/protobuf/editors/README.txt +5 -0
  19. data/ext/protoc/protobuf/editors/proto.vim +105 -0
  20. data/ext/protoc/protobuf/editors/protobuf-mode.el +220 -0
  21. data/ext/protoc/protobuf/examples/AddPerson.java +95 -0
  22. data/ext/protoc/protobuf/examples/ListPeople.java +50 -0
  23. data/ext/protoc/protobuf/examples/Makefile +58 -0
  24. data/ext/protoc/protobuf/examples/README.txt +29 -0
  25. data/ext/protoc/protobuf/examples/add_person.cc +95 -0
  26. data/ext/protoc/protobuf/examples/add_person.py +58 -0
  27. data/ext/protoc/protobuf/examples/addressbook.proto +30 -0
  28. data/ext/protoc/protobuf/examples/list_people.cc +68 -0
  29. data/ext/protoc/protobuf/examples/list_people.py +38 -0
  30. data/ext/protoc/protobuf/generate_descriptor_proto.sh +33 -0
  31. data/ext/protoc/protobuf/java/README.txt +96 -0
  32. data/ext/protoc/protobuf/java/pom.xml +217 -0
  33. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessage.java +466 -0
  34. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessageLite.java +355 -0
  35. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractParser.java +253 -0
  36. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingRpcChannel.java +51 -0
  37. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingService.java +64 -0
  38. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BoundedByteString.java +163 -0
  39. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ByteString.java +1022 -0
  40. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedInputStream.java +1311 -0
  41. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedOutputStream.java +1297 -0
  42. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Descriptors.java +2238 -0
  43. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/DynamicMessage.java +622 -0
  44. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Extension.java +96 -0
  45. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistry.java +392 -0
  46. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistryLite.java +185 -0
  47. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/FieldSet.java +907 -0
  48. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessage.java +2213 -0
  49. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessageLite.java +949 -0
  50. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Internal.java +391 -0
  51. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java +122 -0
  52. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyField.java +154 -0
  53. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyFieldLite.java +176 -0
  54. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringArrayList.java +367 -0
  55. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringList.java +163 -0
  56. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LiteralByteString.java +362 -0
  57. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Message.java +244 -0
  58. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLite.java +320 -0
  59. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java +60 -0
  60. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageOrBuilder.java +143 -0
  61. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageReflection.java +931 -0
  62. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Parser.java +261 -0
  63. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolMessageEnum.java +58 -0
  64. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolStringList.java +48 -0
  65. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java +696 -0
  66. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RopeByteString.java +957 -0
  67. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcCallback.java +47 -0
  68. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcChannel.java +71 -0
  69. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcController.java +118 -0
  70. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcUtil.java +134 -0
  71. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Service.java +117 -0
  72. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ServiceException.java +52 -0
  73. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SingleFieldBuilder.java +241 -0
  74. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SmallSortedMap.java +618 -0
  75. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/TextFormat.java +1984 -0
  76. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UninitializedMessageException.java +99 -0
  77. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnknownFieldSet.java +995 -0
  78. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java +205 -0
  79. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Utf8.java +349 -0
  80. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/WireFormat.java +163 -0
  81. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/AbstractMessageTest.java +527 -0
  82. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/BoundedByteStringTest.java +68 -0
  83. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ByteStringTest.java +759 -0
  84. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CheckUtf8Test.java +141 -0
  85. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java +769 -0
  86. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java +401 -0
  87. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java +80 -0
  88. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DescriptorsTest.java +735 -0
  89. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DynamicMessageTest.java +326 -0
  90. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java +48 -0
  91. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/GeneratedMessageTest.java +1515 -0
  92. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8Test.java +180 -0
  93. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java +421 -0
  94. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java +134 -0
  95. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldTest.java +121 -0
  96. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java +319 -0
  97. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java +174 -0
  98. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java +143 -0
  99. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java +85 -0
  100. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteTest.java +148 -0
  101. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteralByteStringTest.java +396 -0
  102. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/MessageTest.java +353 -0
  103. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/NestedBuildersTest.java +185 -0
  104. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ParserTest.java +381 -0
  105. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java +190 -0
  106. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java +97 -0
  107. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringTest.java +115 -0
  108. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ServiceTest.java +320 -0
  109. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java +155 -0
  110. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SmallSortedMapTest.java +420 -0
  111. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestBadIdentifiers.java +96 -0
  112. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestUtil.java +4124 -0
  113. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TextFormatTest.java +994 -0
  114. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java +653 -0
  115. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java +227 -0
  116. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/WireFormatTest.java +606 -0
  117. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lazy_fields_lite.proto +61 -0
  118. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto +55 -0
  119. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/multiple_files_test.proto +77 -0
  120. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_builders_test.proto +53 -0
  121. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension.proto +46 -0
  122. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension_lite.proto +48 -0
  123. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension.proto +49 -0
  124. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto +50 -0
  125. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test.proto +38 -0
  126. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test2.proto +42 -0
  127. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test3.proto +43 -0
  128. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_bad_identifiers.proto +157 -0
  129. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8.proto +50 -0
  130. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8_size.proto +51 -0
  131. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_custom_options.proto +43 -0
  132. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_extra_interfaces.proto +60 -0
  133. data/ext/protoc/protobuf/m4/ac_system_extensions.m4 +37 -0
  134. data/ext/protoc/protobuf/m4/acx_check_suncc.m4 +75 -0
  135. data/ext/protoc/protobuf/m4/acx_pthread.m4 +397 -0
  136. data/ext/protoc/protobuf/m4/stl_hash.m4 +72 -0
  137. data/ext/protoc/protobuf/more_tests/Makefile +41 -0
  138. data/ext/protoc/protobuf/post_process_dist.sh +60 -0
  139. data/ext/protoc/protobuf/protobuf-lite.pc.in +13 -0
  140. data/ext/protoc/protobuf/protobuf.pc.in +14 -0
  141. data/ext/protoc/protobuf/python/README.txt +105 -0
  142. data/ext/protoc/protobuf/python/ez_setup.py +284 -0
  143. data/ext/protoc/protobuf/python/google/__init__.py +1 -0
  144. data/ext/protoc/protobuf/python/google/protobuf/__init__.py +0 -0
  145. data/ext/protoc/protobuf/python/google/protobuf/descriptor.py +849 -0
  146. data/ext/protoc/protobuf/python/google/protobuf/descriptor_database.py +137 -0
  147. data/ext/protoc/protobuf/python/google/protobuf/descriptor_pool.py +643 -0
  148. data/ext/protoc/protobuf/python/google/protobuf/internal/__init__.py +0 -0
  149. data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.cc +139 -0
  150. data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.py +89 -0
  151. data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation_default_test.py +63 -0
  152. data/ext/protoc/protobuf/python/google/protobuf/internal/containers.py +269 -0
  153. data/ext/protoc/protobuf/python/google/protobuf/internal/cpp_message.py +663 -0
  154. data/ext/protoc/protobuf/python/google/protobuf/internal/decoder.py +831 -0
  155. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_database_test.py +63 -0
  156. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test.py +564 -0
  157. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test1.proto +94 -0
  158. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test2.proto +70 -0
  159. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_python_test.py +54 -0
  160. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_test.py +669 -0
  161. data/ext/protoc/protobuf/python/google/protobuf/internal/encoder.py +788 -0
  162. data/ext/protoc/protobuf/python/google/protobuf/internal/enum_type_wrapper.py +89 -0
  163. data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test1.proto +57 -0
  164. data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test2.proto +92 -0
  165. data/ext/protoc/protobuf/python/google/protobuf/internal/generator_test.py +343 -0
  166. data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_python_test.py +54 -0
  167. data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_test.py +131 -0
  168. data/ext/protoc/protobuf/python/google/protobuf/internal/message_listener.py +78 -0
  169. data/ext/protoc/protobuf/python/google/protobuf/internal/message_python_test.py +54 -0
  170. data/ext/protoc/protobuf/python/google/protobuf/internal/message_test.py +681 -0
  171. data/ext/protoc/protobuf/python/google/protobuf/internal/missing_enum_values.proto +50 -0
  172. data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions.proto +58 -0
  173. data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions_dynamic.proto +49 -0
  174. data/ext/protoc/protobuf/python/google/protobuf/internal/more_messages.proto +51 -0
  175. data/ext/protoc/protobuf/python/google/protobuf/internal/python_message.py +1251 -0
  176. data/ext/protoc/protobuf/python/google/protobuf/internal/reflection_test.py +2934 -0
  177. data/ext/protoc/protobuf/python/google/protobuf/internal/service_reflection_test.py +136 -0
  178. data/ext/protoc/protobuf/python/google/protobuf/internal/symbol_database_test.py +120 -0
  179. data/ext/protoc/protobuf/python/google/protobuf/internal/test_bad_identifiers.proto +52 -0
  180. data/ext/protoc/protobuf/python/google/protobuf/internal/test_util.py +662 -0
  181. data/ext/protoc/protobuf/python/google/protobuf/internal/text_encoding_test.py +68 -0
  182. data/ext/protoc/protobuf/python/google/protobuf/internal/text_format_test.py +743 -0
  183. data/ext/protoc/protobuf/python/google/protobuf/internal/type_checkers.py +328 -0
  184. data/ext/protoc/protobuf/python/google/protobuf/internal/unknown_fields_test.py +231 -0
  185. data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format.py +268 -0
  186. data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format_test.py +253 -0
  187. data/ext/protoc/protobuf/python/google/protobuf/message.py +284 -0
  188. data/ext/protoc/protobuf/python/google/protobuf/message_factory.py +155 -0
  189. data/ext/protoc/protobuf/python/google/protobuf/pyext/README +6 -0
  190. data/ext/protoc/protobuf/python/google/protobuf/pyext/__init__.py +0 -0
  191. data/ext/protoc/protobuf/python/google/protobuf/pyext/cpp_message.py +61 -0
  192. data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.cc +357 -0
  193. data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.h +96 -0
  194. data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor_cpp2_test.py +58 -0
  195. data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.cc +338 -0
  196. data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.h +123 -0
  197. data/ext/protoc/protobuf/python/google/protobuf/pyext/message.cc +2561 -0
  198. data/ext/protoc/protobuf/python/google/protobuf/pyext/message.h +305 -0
  199. data/ext/protoc/protobuf/python/google/protobuf/pyext/message_factory_cpp2_test.py +56 -0
  200. data/ext/protoc/protobuf/python/google/protobuf/pyext/proto2_api_test.proto +38 -0
  201. data/ext/protoc/protobuf/python/google/protobuf/pyext/python.proto +66 -0
  202. data/ext/protoc/protobuf/python/google/protobuf/pyext/python_protobuf.h +57 -0
  203. data/ext/protoc/protobuf/python/google/protobuf/pyext/reflection_cpp2_generated_test.py +94 -0
  204. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc +763 -0
  205. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.h +172 -0
  206. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.cc +825 -0
  207. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.h +112 -0
  208. data/ext/protoc/protobuf/python/google/protobuf/pyext/scoped_pyobject_ptr.h +95 -0
  209. data/ext/protoc/protobuf/python/google/protobuf/reflection.py +205 -0
  210. data/ext/protoc/protobuf/python/google/protobuf/service.py +226 -0
  211. data/ext/protoc/protobuf/python/google/protobuf/service_reflection.py +284 -0
  212. data/ext/protoc/protobuf/python/google/protobuf/symbol_database.py +185 -0
  213. data/ext/protoc/protobuf/python/google/protobuf/text_encoding.py +110 -0
  214. data/ext/protoc/protobuf/python/google/protobuf/text_format.py +873 -0
  215. data/ext/protoc/protobuf/python/mox.py +1401 -0
  216. data/ext/protoc/protobuf/python/setup.py +201 -0
  217. data/ext/protoc/protobuf/python/stubout.py +140 -0
  218. data/ext/protoc/protobuf/src/Makefile.am +418 -0
  219. data/ext/protoc/protobuf/src/google/protobuf/SEBS +240 -0
  220. data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.cc +84 -0
  221. data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.h +145 -0
  222. data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.cc +1603 -0
  223. data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.h +378 -0
  224. data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface_unittest.cc +1654 -0
  225. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc +158 -0
  226. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.cc +288 -0
  227. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.h +103 -0
  228. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.cc +431 -0
  229. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.h +122 -0
  230. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.cc +210 -0
  231. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.h +86 -0
  232. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.cc +166 -0
  233. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.h +185 -0
  234. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.cc +665 -0
  235. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.h +99 -0
  236. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.cc +125 -0
  237. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
  238. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.cc +494 -0
  239. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.h +206 -0
  240. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.cc +2645 -0
  241. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.h +175 -0
  242. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.cc +375 -0
  243. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.h +121 -0
  244. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_options.h +58 -0
  245. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc +123 -0
  246. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc +451 -0
  247. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +123 -0
  248. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.cc +334 -0
  249. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
  250. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.cc +642 -0
  251. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.h +127 -0
  252. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto +132 -0
  253. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc +2074 -0
  254. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.h +51 -0
  255. data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.cc +480 -0
  256. data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.h +317 -0
  257. data/ext/protoc/protobuf/src/google/protobuf/compiler/importer_unittest.cc +617 -0
  258. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.cc +195 -0
  259. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.h +95 -0
  260. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.cc +233 -0
  261. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.h +69 -0
  262. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment_unittest.cc +67 -0
  263. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.cc +333 -0
  264. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.h +99 -0
  265. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.cc +778 -0
  266. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.h +158 -0
  267. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.cc +207 -0
  268. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.h +109 -0
  269. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.cc +213 -0
  270. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.h +162 -0
  271. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.cc +534 -0
  272. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.h +115 -0
  273. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.cc +158 -0
  274. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.h +72 -0
  275. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.cc +77 -0
  276. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.h +101 -0
  277. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.cc +737 -0
  278. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.h +322 -0
  279. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.cc +826 -0
  280. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.h +121 -0
  281. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.cc +1666 -0
  282. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.h +140 -0
  283. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.cc +1343 -0
  284. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.h +173 -0
  285. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.cc +266 -0
  286. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.h +124 -0
  287. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_plugin_unittest.cc +124 -0
  288. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.cc +877 -0
  289. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.h +160 -0
  290. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.cc +473 -0
  291. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.h +135 -0
  292. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.cc +201 -0
  293. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.h +90 -0
  294. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.cc +1056 -0
  295. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.h +160 -0
  296. data/ext/protoc/protobuf/src/google/protobuf/compiler/main.cc +61 -0
  297. data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.cc +240 -0
  298. data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.h +117 -0
  299. data/ext/protoc/protobuf/src/google/protobuf/compiler/package_info.h +64 -0
  300. data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.cc +1750 -0
  301. data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.h +522 -0
  302. data/ext/protoc/protobuf/src/google/protobuf/compiler/parser_unittest.cc +2612 -0
  303. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.cc +163 -0
  304. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.h +72 -0
  305. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.cc +1148 -0
  306. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.h +897 -0
  307. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.proto +147 -0
  308. data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.cc +1262 -0
  309. data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.h +166 -0
  310. data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_plugin_unittest.cc +118 -0
  311. data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.cc +463 -0
  312. data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.h +108 -0
  313. data/ext/protoc/protobuf/src/google/protobuf/compiler/test_plugin.cc +51 -0
  314. data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_output_unittest.sh +91 -0
  315. data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.cc +218 -0
  316. data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.h +93 -0
  317. data/ext/protoc/protobuf/src/google/protobuf/descriptor.cc +5420 -0
  318. data/ext/protoc/protobuf/src/google/protobuf/descriptor.h +1691 -0
  319. data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.cc +9135 -0
  320. data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.h +6761 -0
  321. data/ext/protoc/protobuf/src/google/protobuf/descriptor.proto +687 -0
  322. data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.cc +543 -0
  323. data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.h +369 -0
  324. data/ext/protoc/protobuf/src/google/protobuf/descriptor_database_unittest.cc +748 -0
  325. data/ext/protoc/protobuf/src/google/protobuf/descriptor_pb2_test.py +54 -0
  326. data/ext/protoc/protobuf/src/google/protobuf/descriptor_unittest.cc +5501 -0
  327. data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.cc +764 -0
  328. data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.h +148 -0
  329. data/ext/protoc/protobuf/src/google/protobuf/dynamic_message_unittest.cc +230 -0
  330. data/ext/protoc/protobuf/src/google/protobuf/extension_set.cc +1663 -0
  331. data/ext/protoc/protobuf/src/google/protobuf/extension_set.h +1234 -0
  332. data/ext/protoc/protobuf/src/google/protobuf/extension_set_heavy.cc +734 -0
  333. data/ext/protoc/protobuf/src/google/protobuf/extension_set_unittest.cc +1095 -0
  334. data/ext/protoc/protobuf/src/google/protobuf/generated_enum_reflection.h +91 -0
  335. data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.cc +1683 -0
  336. data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.h +504 -0
  337. data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc +795 -0
  338. data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.cc +65 -0
  339. data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.h +113 -0
  340. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.cc +914 -0
  341. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.h +1220 -0
  342. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_inl.h +69 -0
  343. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_unittest.cc +1378 -0
  344. data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.cc +326 -0
  345. data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.h +209 -0
  346. data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream_unittest.sh +44 -0
  347. data/ext/protoc/protobuf/src/google/protobuf/io/package_info.h +54 -0
  348. data/ext/protoc/protobuf/src/google/protobuf/io/printer.cc +198 -0
  349. data/ext/protoc/protobuf/src/google/protobuf/io/printer.h +136 -0
  350. data/ext/protoc/protobuf/src/google/protobuf/io/printer_unittest.cc +285 -0
  351. data/ext/protoc/protobuf/src/google/protobuf/io/strtod.cc +113 -0
  352. data/ext/protoc/protobuf/src/google/protobuf/io/strtod.h +50 -0
  353. data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.cc +1127 -0
  354. data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.h +402 -0
  355. data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer_unittest.cc +999 -0
  356. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.cc +57 -0
  357. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.h +248 -0
  358. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc +473 -0
  359. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.h +358 -0
  360. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc +405 -0
  361. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.h +354 -0
  362. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_unittest.cc +965 -0
  363. data/ext/protoc/protobuf/src/google/protobuf/lite_unittest.cc +350 -0
  364. data/ext/protoc/protobuf/src/google/protobuf/message.cc +358 -0
  365. data/ext/protoc/protobuf/src/google/protobuf/message.h +866 -0
  366. data/ext/protoc/protobuf/src/google/protobuf/message_lite.cc +335 -0
  367. data/ext/protoc/protobuf/src/google/protobuf/message_lite.h +247 -0
  368. data/ext/protoc/protobuf/src/google/protobuf/message_unittest.cc +427 -0
  369. data/ext/protoc/protobuf/src/google/protobuf/package_info.h +64 -0
  370. data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.cc +269 -0
  371. data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.h +81 -0
  372. data/ext/protoc/protobuf/src/google/protobuf/reflection_ops_unittest.cc +475 -0
  373. data/ext/protoc/protobuf/src/google/protobuf/repeated_field.cc +87 -0
  374. data/ext/protoc/protobuf/src/google/protobuf/repeated_field.h +1603 -0
  375. data/ext/protoc/protobuf/src/google/protobuf/repeated_field_reflection_unittest.cc +195 -0
  376. data/ext/protoc/protobuf/src/google/protobuf/repeated_field_unittest.cc +1442 -0
  377. data/ext/protoc/protobuf/src/google/protobuf/service.cc +46 -0
  378. data/ext/protoc/protobuf/src/google/protobuf/service.h +291 -0
  379. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops.h +227 -0
  380. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm64_gcc.h +325 -0
  381. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_gcc.h +151 -0
  382. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_qnx.h +146 -0
  383. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_atomicword_compat.h +122 -0
  384. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h +137 -0
  385. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_macosx.h +225 -0
  386. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_mips_gcc.h +313 -0
  387. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_pnacl.h +73 -0
  388. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_solaris.h +188 -0
  389. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_tsan.h +219 -0
  390. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc +137 -0
  391. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h +293 -0
  392. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc +112 -0
  393. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.h +150 -0
  394. data/ext/protoc/protobuf/src/google/protobuf/stubs/common.cc +395 -0
  395. data/ext/protoc/protobuf/src/google/protobuf/stubs/common.h +1226 -0
  396. data/ext/protoc/protobuf/src/google/protobuf/stubs/common_unittest.cc +357 -0
  397. data/ext/protoc/protobuf/src/google/protobuf/stubs/hash.h +232 -0
  398. data/ext/protoc/protobuf/src/google/protobuf/stubs/map_util.h +771 -0
  399. data/ext/protoc/protobuf/src/google/protobuf/stubs/once.cc +99 -0
  400. data/ext/protoc/protobuf/src/google/protobuf/stubs/once.h +166 -0
  401. data/ext/protoc/protobuf/src/google/protobuf/stubs/once_unittest.cc +253 -0
  402. data/ext/protoc/protobuf/src/google/protobuf/stubs/platform_macros.h +103 -0
  403. data/ext/protoc/protobuf/src/google/protobuf/stubs/shared_ptr.h +470 -0
  404. data/ext/protoc/protobuf/src/google/protobuf/stubs/stl_util.h +121 -0
  405. data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.cc +175 -0
  406. data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.h +76 -0
  407. data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf_unittest.cc +152 -0
  408. data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid.cc +536 -0
  409. data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid_unittest.cc +40 -0
  410. data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.cc +1279 -0
  411. data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.h +562 -0
  412. data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil_unittest.cc +73 -0
  413. data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.cc +134 -0
  414. data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.h +170 -0
  415. data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util.h +138 -0
  416. data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util_unittest.cc +130 -0
  417. data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits.h +336 -0
  418. data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits_unittest.cc +628 -0
  419. data/ext/protoc/protobuf/src/google/protobuf/test_util.cc +3345 -0
  420. data/ext/protoc/protobuf/src/google/protobuf/test_util.h +215 -0
  421. data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.cc +1585 -0
  422. data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.h +101 -0
  423. data/ext/protoc/protobuf/src/google/protobuf/testdata/bad_utf8_string +1 -0
  424. data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message +0 -0
  425. data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message_oneof_implemented +0 -0
  426. data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_packed_fields_message +0 -0
  427. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data.txt +134 -0
  428. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_oneof_implemented.txt +129 -0
  429. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy.txt +134 -0
  430. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy_oneof.txt +129 -0
  431. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data.txt +134 -0
  432. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data_pointy.txt +134 -0
  433. data/ext/protoc/protobuf/src/google/protobuf/testing/file.cc +194 -0
  434. data/ext/protoc/protobuf/src/google/protobuf/testing/file.h +97 -0
  435. data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.cc +255 -0
  436. data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.h +102 -0
  437. data/ext/protoc/protobuf/src/google/protobuf/testing/zcgunzip.cc +73 -0
  438. data/ext/protoc/protobuf/src/google/protobuf/testing/zcgzip.cc +79 -0
  439. data/ext/protoc/protobuf/src/google/protobuf/text_format.cc +1746 -0
  440. data/ext/protoc/protobuf/src/google/protobuf/text_format.h +473 -0
  441. data/ext/protoc/protobuf/src/google/protobuf/text_format_unittest.cc +1479 -0
  442. data/ext/protoc/protobuf/src/google/protobuf/unittest.proto +861 -0
  443. data/ext/protoc/protobuf/src/google/protobuf/unittest_custom_options.proto +393 -0
  444. data/ext/protoc/protobuf/src/google/protobuf/unittest_embed_optimize_for.proto +50 -0
  445. data/ext/protoc/protobuf/src/google/protobuf/unittest_empty.proto +37 -0
  446. data/ext/protoc/protobuf/src/google/protobuf/unittest_enormous_descriptor.proto +1046 -0
  447. data/ext/protoc/protobuf/src/google/protobuf/unittest_import.proto +64 -0
  448. data/ext/protoc/protobuf/src/google/protobuf/unittest_import_lite.proto +51 -0
  449. data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public.proto +40 -0
  450. data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public_lite.proto +42 -0
  451. data/ext/protoc/protobuf/src/google/protobuf/unittest_lite.proto +384 -0
  452. data/ext/protoc/protobuf/src/google/protobuf/unittest_lite_imports_nonlite.proto +43 -0
  453. data/ext/protoc/protobuf/src/google/protobuf/unittest_mset.proto +83 -0
  454. data/ext/protoc/protobuf/src/google/protobuf/unittest_no_generic_services.proto +53 -0
  455. data/ext/protoc/protobuf/src/google/protobuf/unittest_optimize_for.proto +66 -0
  456. data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.cc +265 -0
  457. data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.h +318 -0
  458. data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set_unittest.cc +599 -0
  459. data/ext/protoc/protobuf/src/google/protobuf/wire_format.cc +1101 -0
  460. data/ext/protoc/protobuf/src/google/protobuf/wire_format.h +336 -0
  461. data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.cc +471 -0
  462. data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.h +661 -0
  463. data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite_inl.h +860 -0
  464. data/ext/protoc/protobuf/src/google/protobuf/wire_format_unittest.cc +1120 -0
  465. data/ext/protoc/protobuf/src/solaris/libstdc++.la +51 -0
  466. data/ext/protoc/protobuf/vsprojects/config.h +29 -0
  467. data/ext/protoc/protobuf/vsprojects/convert2008to2005.sh +20 -0
  468. data/ext/protoc/protobuf/vsprojects/extract_includes.bat +50 -0
  469. data/ext/protoc/protobuf/vsprojects/libprotobuf-lite.vcproj +302 -0
  470. data/ext/protoc/protobuf/vsprojects/libprotobuf.vcproj +470 -0
  471. data/ext/protoc/protobuf/vsprojects/libprotoc.vcproj +466 -0
  472. data/ext/protoc/protobuf/vsprojects/lite-test.vcproj +305 -0
  473. data/ext/protoc/protobuf/vsprojects/protobuf.sln +92 -0
  474. data/ext/protoc/protobuf/vsprojects/protoc.vcproj +192 -0
  475. data/ext/protoc/protobuf/vsprojects/readme.txt +114 -0
  476. data/ext/protoc/protobuf/vsprojects/test_plugin.vcproj +209 -0
  477. data/ext/protoc/protobuf/vsprojects/tests.vcproj +681 -0
  478. data/lib/protoc/version.rb +1 -1
  479. metadata +480 -3
@@ -0,0 +1,121 @@
1
+ // Protocol Buffers - Google's data interchange format
2
+ // Copyright 2008 Google Inc. All rights reserved.
3
+ // https://developers.google.com/protocol-buffers/
4
+ //
5
+ // Redistribution and use in source and binary forms, with or without
6
+ // modification, are permitted provided that the following conditions are
7
+ // met:
8
+ //
9
+ // * Redistributions of source code must retain the above copyright
10
+ // notice, this list of conditions and the following disclaimer.
11
+ // * Redistributions in binary form must reproduce the above
12
+ // copyright notice, this list of conditions and the following disclaimer
13
+ // in the documentation and/or other materials provided with the
14
+ // distribution.
15
+ // * Neither the name of Google Inc. nor the names of its
16
+ // contributors may be used to endorse or promote products derived from
17
+ // this software without specific prior written permission.
18
+ //
19
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+
31
+ // Author: niwasaki@google.com (Naoki Iwasaki)
32
+ // Based on original Protocol Buffers design by
33
+ // Sanjay Ghemawat, Jeff Dean, and others.
34
+
35
+ #ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_LAZY_MESSAGE_FIELD_H__
36
+ #define GOOGLE_PROTOBUF_COMPILER_JAVA_LAZY_MESSAGE_FIELD_H__
37
+
38
+ #include <google/protobuf/compiler/java/java_field.h>
39
+ #include <google/protobuf/compiler/java/java_message_field.h>
40
+
41
+ namespace google {
42
+ namespace protobuf {
43
+ namespace compiler {
44
+ namespace java {
45
+ class Context; // context.h
46
+ }
47
+ }
48
+ }
49
+
50
+ namespace protobuf {
51
+ namespace compiler {
52
+ namespace java {
53
+
54
+ class ImmutableLazyMessageFieldGenerator
55
+ : public ImmutableMessageFieldGenerator {
56
+ public:
57
+ explicit ImmutableLazyMessageFieldGenerator(
58
+ const FieldDescriptor* descriptor, int messageBitIndex,
59
+ int builderBitIndex, Context* context);
60
+ ~ImmutableLazyMessageFieldGenerator();
61
+
62
+ // overroads ImmutableMessageFieldGenerator ---------------------------------
63
+ void GenerateMembers(io::Printer* printer) const;
64
+ void GenerateBuilderMembers(io::Printer* printer) const;
65
+ void GenerateInitializationCode(io::Printer* printer) const;
66
+ void GenerateBuilderClearCode(io::Printer* printer) const;
67
+ void GenerateMergingCode(io::Printer* printer) const;
68
+ void GenerateBuildingCode(io::Printer* printer) const;
69
+ void GenerateParsingCode(io::Printer* printer) const;
70
+ void GenerateSerializationCode(io::Printer* printer) const;
71
+ void GenerateSerializedSizeCode(io::Printer* printer) const;
72
+
73
+ private:
74
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableLazyMessageFieldGenerator);
75
+ };
76
+
77
+ class ImmutableLazyMessageOneofFieldGenerator
78
+ : public ImmutableLazyMessageFieldGenerator {
79
+ public:
80
+ ImmutableLazyMessageOneofFieldGenerator(
81
+ const FieldDescriptor* descriptor, int messageBitIndex,
82
+ int builderBitIndex, Context* context);
83
+ ~ImmutableLazyMessageOneofFieldGenerator();
84
+
85
+ void GenerateMembers(io::Printer* printer) const;
86
+ void GenerateBuilderMembers(io::Printer* printer) const;
87
+ void GenerateMergingCode(io::Printer* printer) const;
88
+ void GenerateBuildingCode(io::Printer* printer) const;
89
+ void GenerateParsingCode(io::Printer* printer) const;
90
+ void GenerateSerializationCode(io::Printer* printer) const;
91
+ void GenerateSerializedSizeCode(io::Printer* printer) const;
92
+
93
+ private:
94
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableLazyMessageOneofFieldGenerator);
95
+ };
96
+
97
+ class RepeatedImmutableLazyMessageFieldGenerator
98
+ : public RepeatedImmutableMessageFieldGenerator {
99
+ public:
100
+ explicit RepeatedImmutableLazyMessageFieldGenerator(
101
+ const FieldDescriptor* descriptor, int messageBitIndex,
102
+ int builderBitIndex, Context* context);
103
+ ~RepeatedImmutableLazyMessageFieldGenerator();
104
+
105
+ // overroads RepeatedImmutableMessageFieldGenerator -------------------------
106
+ void GenerateMembers(io::Printer* printer) const;
107
+ void GenerateBuilderMembers(io::Printer* printer) const;
108
+ void GenerateParsingCode(io::Printer* printer) const;
109
+ void GenerateSerializationCode(io::Printer* printer) const;
110
+ void GenerateSerializedSizeCode(io::Printer* printer) const;
111
+
112
+ private:
113
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedImmutableLazyMessageFieldGenerator);
114
+ };
115
+
116
+ } // namespace java
117
+ } // namespace compiler
118
+ } // namespace protobuf
119
+
120
+ } // namespace google
121
+ #endif // GOOGLE_PROTOBUF_COMPILER_JAVA_LAZY_MESSAGE_FIELD_H__
@@ -0,0 +1,1666 @@
1
+ // Protocol Buffers - Google's data interchange format
2
+ // Copyright 2008 Google Inc. All rights reserved.
3
+ // https://developers.google.com/protocol-buffers/
4
+ //
5
+ // Redistribution and use in source and binary forms, with or without
6
+ // modification, are permitted provided that the following conditions are
7
+ // met:
8
+ //
9
+ // * Redistributions of source code must retain the above copyright
10
+ // notice, this list of conditions and the following disclaimer.
11
+ // * Redistributions in binary form must reproduce the above
12
+ // copyright notice, this list of conditions and the following disclaimer
13
+ // in the documentation and/or other materials provided with the
14
+ // distribution.
15
+ // * Neither the name of Google Inc. nor the names of its
16
+ // contributors may be used to endorse or promote products derived from
17
+ // this software without specific prior written permission.
18
+ //
19
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+
31
+ // Author: kenton@google.com (Kenton Varda)
32
+ // Based on original Protocol Buffers design by
33
+ // Sanjay Ghemawat, Jeff Dean, and others.
34
+
35
+ #include <google/protobuf/compiler/java/java_message.h>
36
+
37
+ #include <algorithm>
38
+ #include <google/protobuf/stubs/hash.h>
39
+ #include <map>
40
+ #include <memory>
41
+ #include <vector>
42
+
43
+ #include <google/protobuf/compiler/java/java_context.h>
44
+ #include <google/protobuf/compiler/java/java_doc_comment.h>
45
+ #include <google/protobuf/compiler/java/java_enum.h>
46
+ #include <google/protobuf/compiler/java/java_extension.h>
47
+ #include <google/protobuf/compiler/java/java_generator_factory.h>
48
+ #include <google/protobuf/compiler/java/java_helpers.h>
49
+ #include <google/protobuf/compiler/java/java_name_resolver.h>
50
+ #include <google/protobuf/io/coded_stream.h>
51
+ #include <google/protobuf/io/printer.h>
52
+ #include <google/protobuf/descriptor.pb.h>
53
+ #include <google/protobuf/wire_format.h>
54
+ #include <google/protobuf/stubs/strutil.h>
55
+ #include <google/protobuf/stubs/substitute.h>
56
+
57
+ namespace google {
58
+ namespace protobuf {
59
+ namespace compiler {
60
+ namespace java {
61
+
62
+ using internal::WireFormat;
63
+ using internal::WireFormatLite;
64
+
65
+ namespace {
66
+ bool GenerateHasBits(const Descriptor* descriptor) {
67
+ return SupportFieldPresence(descriptor->file()) ||
68
+ HasRepeatedFields(descriptor);
69
+ }
70
+ } // namespace
71
+
72
+ // ===================================================================
73
+
74
+ MessageGenerator::MessageGenerator(const Descriptor* descriptor)
75
+ : descriptor_(descriptor) {}
76
+
77
+ MessageGenerator::~MessageGenerator() {}
78
+
79
+ // ===================================================================
80
+ // TODO(api): Move this class to a separate immutable_message.cc file.
81
+ ImmutableMessageGenerator::ImmutableMessageGenerator(
82
+ const Descriptor* descriptor, Context* context)
83
+ : MessageGenerator(descriptor), context_(context),
84
+ name_resolver_(context->GetNameResolver()),
85
+ field_generators_(descriptor, context_) {
86
+ }
87
+
88
+ ImmutableMessageGenerator::~ImmutableMessageGenerator() {}
89
+
90
+ void ImmutableMessageGenerator::GenerateStaticVariables(io::Printer* printer) {
91
+ if (HasDescriptorMethods(descriptor_)) {
92
+ // Because descriptor.proto (com.google.protobuf.DescriptorProtos) is
93
+ // used in the construction of descriptors, we have a tricky bootstrapping
94
+ // problem. To help control static initialization order, we make sure all
95
+ // descriptors and other static data that depends on them are members of
96
+ // the outermost class in the file. This way, they will be initialized in
97
+ // a deterministic order.
98
+
99
+ map<string, string> vars;
100
+ vars["identifier"] = UniqueFileScopeIdentifier(descriptor_);
101
+ vars["index"] = SimpleItoa(descriptor_->index());
102
+ vars["classname"] = name_resolver_->GetImmutableClassName(descriptor_);
103
+ if (descriptor_->containing_type() != NULL) {
104
+ vars["parent"] = UniqueFileScopeIdentifier(
105
+ descriptor_->containing_type());
106
+ }
107
+ if (MultipleJavaFiles(descriptor_->file(), /* immutable = */ true)) {
108
+ // We can only make these package-private since the classes that use them
109
+ // are in separate files.
110
+ vars["private"] = "";
111
+ } else {
112
+ vars["private"] = "private ";
113
+ }
114
+
115
+ // The descriptor for this type.
116
+ printer->Print(vars,
117
+ "$private$static final com.google.protobuf.Descriptors.Descriptor\n"
118
+ " internal_$identifier$_descriptor;\n");
119
+
120
+ // And the FieldAccessorTable.
121
+ GenerateFieldAccessorTable(printer);
122
+ }
123
+
124
+ // Generate static members for all nested types.
125
+ for (int i = 0; i < descriptor_->nested_type_count(); i++) {
126
+ // TODO(kenton): Reuse MessageGenerator objects?
127
+ ImmutableMessageGenerator(descriptor_->nested_type(i), context_)
128
+ .GenerateStaticVariables(printer);
129
+ }
130
+ }
131
+
132
+ void ImmutableMessageGenerator::GenerateStaticVariableInitializers(
133
+ io::Printer* printer) {
134
+ if (HasDescriptorMethods(descriptor_)) {
135
+ map<string, string> vars;
136
+ vars["identifier"] = UniqueFileScopeIdentifier(descriptor_);
137
+ vars["index"] = SimpleItoa(descriptor_->index());
138
+ vars["classname"] = name_resolver_->GetImmutableClassName(descriptor_);
139
+ if (descriptor_->containing_type() != NULL) {
140
+ vars["parent"] = UniqueFileScopeIdentifier(
141
+ descriptor_->containing_type());
142
+ }
143
+
144
+ // The descriptor for this type.
145
+ if (descriptor_->containing_type() == NULL) {
146
+ printer->Print(vars,
147
+ "internal_$identifier$_descriptor =\n"
148
+ " getDescriptor().getMessageTypes().get($index$);\n");
149
+ } else {
150
+ printer->Print(vars,
151
+ "internal_$identifier$_descriptor =\n"
152
+ " internal_$parent$_descriptor.getNestedTypes().get($index$);\n");
153
+ }
154
+
155
+ // And the FieldAccessorTable.
156
+ GenerateFieldAccessorTableInitializer(printer);
157
+ }
158
+
159
+ // Generate static member initializers for all nested types.
160
+ for (int i = 0; i < descriptor_->nested_type_count(); i++) {
161
+ // TODO(kenton): Reuse MessageGenerator objects?
162
+ ImmutableMessageGenerator(descriptor_->nested_type(i), context_)
163
+ .GenerateStaticVariableInitializers(printer);
164
+ }
165
+ }
166
+
167
+ void ImmutableMessageGenerator::
168
+ GenerateFieldAccessorTable(io::Printer* printer) {
169
+ map<string, string> vars;
170
+ vars["identifier"] = UniqueFileScopeIdentifier(descriptor_);
171
+ if (MultipleJavaFiles(descriptor_->file(), /* immutable = */ true)) {
172
+ // We can only make these package-private since the classes that use them
173
+ // are in separate files.
174
+ vars["private"] = "";
175
+ } else {
176
+ vars["private"] = "private ";
177
+ }
178
+ printer->Print(vars,
179
+ "$private$static\n"
180
+ " com.google.protobuf.GeneratedMessage.FieldAccessorTable\n"
181
+ " internal_$identifier$_fieldAccessorTable;\n");
182
+ }
183
+
184
+ void ImmutableMessageGenerator::
185
+ GenerateFieldAccessorTableInitializer(io::Printer* printer) {
186
+ printer->Print(
187
+ "internal_$identifier$_fieldAccessorTable = new\n"
188
+ " com.google.protobuf.GeneratedMessage.FieldAccessorTable(\n"
189
+ " internal_$identifier$_descriptor,\n"
190
+ " new java.lang.String[] { ",
191
+ "identifier",
192
+ UniqueFileScopeIdentifier(descriptor_));
193
+ for (int i = 0; i < descriptor_->field_count(); i++) {
194
+ const FieldDescriptor* field = descriptor_->field(i);
195
+ const FieldGeneratorInfo* info = context_->GetFieldGeneratorInfo(field);
196
+ printer->Print(
197
+ "\"$field_name$\", ",
198
+ "field_name", info->capitalized_name);
199
+ }
200
+ for (int i = 0; i < descriptor_->oneof_decl_count(); i++) {
201
+ const OneofDescriptor* oneof = descriptor_->oneof_decl(i);
202
+ const OneofGeneratorInfo* info = context_->GetOneofGeneratorInfo(oneof);
203
+ printer->Print(
204
+ "\"$oneof_name$\", ",
205
+ "oneof_name", info->capitalized_name);
206
+ }
207
+ printer->Print("});\n");
208
+ }
209
+
210
+ // ===================================================================
211
+
212
+ void ImmutableMessageGenerator::GenerateInterface(io::Printer* printer) {
213
+ if (descriptor_->extension_range_count() > 0) {
214
+ if (HasDescriptorMethods(descriptor_)) {
215
+ printer->Print(
216
+ "public interface $classname$OrBuilder extends\n"
217
+ " $extra_interfaces$\n"
218
+ " com.google.protobuf.GeneratedMessage.\n"
219
+ " ExtendableMessageOrBuilder<$classname$> {\n",
220
+ "extra_interfaces", ExtraMessageOrBuilderInterfaces(descriptor_),
221
+ "classname", descriptor_->name());
222
+ } else {
223
+ printer->Print(
224
+ "public interface $classname$OrBuilder extends \n"
225
+ " $extra_interfaces$\n"
226
+ " com.google.protobuf.GeneratedMessageLite.\n"
227
+ " ExtendableMessageOrBuilder<$classname$> {\n",
228
+ "extra_interfaces", ExtraMessageOrBuilderInterfaces(descriptor_),
229
+ "classname", descriptor_->name());
230
+ }
231
+ } else {
232
+ if (HasDescriptorMethods(descriptor_)) {
233
+ printer->Print(
234
+ "public interface $classname$OrBuilder extends\n"
235
+ " $extra_interfaces$\n"
236
+ " com.google.protobuf.MessageOrBuilder {\n",
237
+ "extra_interfaces", ExtraMessageOrBuilderInterfaces(descriptor_),
238
+ "classname", descriptor_->name());
239
+ } else {
240
+ printer->Print(
241
+ "public interface $classname$OrBuilder extends\n"
242
+ " $extra_interfaces$\n"
243
+ " com.google.protobuf.MessageLiteOrBuilder {\n",
244
+ "extra_interfaces", ExtraMessageOrBuilderInterfaces(descriptor_),
245
+ "classname", descriptor_->name());
246
+ }
247
+ }
248
+
249
+ printer->Indent();
250
+ for (int i = 0; i < descriptor_->field_count(); i++) {
251
+ printer->Print("\n");
252
+ field_generators_.get(descriptor_->field(i))
253
+ .GenerateInterfaceMembers(printer);
254
+ }
255
+ printer->Outdent();
256
+
257
+ printer->Print("}\n");
258
+ }
259
+
260
+ // ===================================================================
261
+
262
+ void ImmutableMessageGenerator::Generate(io::Printer* printer) {
263
+ bool is_own_file =
264
+ descriptor_->containing_type() == NULL &&
265
+ MultipleJavaFiles(descriptor_->file(), /* immutable = */ true);
266
+
267
+ WriteMessageDocComment(printer, descriptor_);
268
+
269
+ // The builder_type stores the super type name of the nested Builder class.
270
+ string builder_type;
271
+ if (descriptor_->extension_range_count() > 0) {
272
+ if (HasDescriptorMethods(descriptor_)) {
273
+ printer->Print(
274
+ "public$static$final class $classname$ extends\n"
275
+ " com.google.protobuf.GeneratedMessage.ExtendableMessage<\n"
276
+ " $classname$> implements\n"
277
+ " $extra_interfaces$\n"
278
+ " $classname$OrBuilder {\n",
279
+ "static", is_own_file ? " " : " static ",
280
+ "classname", descriptor_->name(),
281
+ "extra_interfaces", ExtraMessageInterfaces(descriptor_));
282
+ builder_type = strings::Substitute(
283
+ "com.google.protobuf.GeneratedMessage.ExtendableBuilder<$0, ?>",
284
+ name_resolver_->GetImmutableClassName(descriptor_));
285
+ } else {
286
+ printer->Print(
287
+ "public$static$final class $classname$ extends\n"
288
+ " com.google.protobuf.GeneratedMessageLite.ExtendableMessage<\n"
289
+ " $classname$> implements\n"
290
+ " $extra_interfaces$\n"
291
+ " $classname$OrBuilder {\n",
292
+ "static", is_own_file ? " " : " static ",
293
+ "classname", descriptor_->name(),
294
+ "extra_interfaces", ExtraMessageInterfaces(descriptor_));
295
+ builder_type = strings::Substitute(
296
+ "com.google.protobuf.GeneratedMessageLite.ExtendableBuilder<$0, ?>",
297
+ name_resolver_->GetImmutableClassName(descriptor_));
298
+ }
299
+ } else {
300
+ if (HasDescriptorMethods(descriptor_)) {
301
+ printer->Print(
302
+ "public$static$final class $classname$ extends\n"
303
+ " com.google.protobuf.GeneratedMessage implements\n"
304
+ " $extra_interfaces$\n"
305
+ " $classname$OrBuilder {\n",
306
+ "static", is_own_file ? " " : " static ",
307
+ "classname", descriptor_->name(),
308
+ "extra_interfaces", ExtraMessageInterfaces(descriptor_));
309
+ builder_type = "com.google.protobuf.GeneratedMessage.Builder<?>";
310
+ } else {
311
+ printer->Print(
312
+ "public$static$final class $classname$ extends\n"
313
+ " com.google.protobuf.GeneratedMessageLite implements\n"
314
+ " $extra_interfaces$\n"
315
+ " $classname$OrBuilder {\n",
316
+ "static", is_own_file ? " " : " static ",
317
+ "classname", descriptor_->name(),
318
+ "extra_interfaces", ExtraMessageInterfaces(descriptor_));
319
+ builder_type = "com.google.protobuf.GeneratedMessageLite.Builder";
320
+ }
321
+ }
322
+ printer->Indent();
323
+ // Using builder_type, instead of Builder, prevents the Builder class from
324
+ // being loaded into PermGen space when the default instance is created.
325
+ // This optimizes the PermGen space usage for clients that do not modify
326
+ // messages.
327
+ printer->Print(
328
+ "// Use $classname$.newBuilder() to construct.\n"
329
+ "private $classname$($buildertype$ builder) {\n"
330
+ " super(builder);\n"
331
+ "$set_unknown_fields$\n"
332
+ "}\n",
333
+ "classname", descriptor_->name(),
334
+ "buildertype", builder_type,
335
+ "set_unknown_fields",
336
+ " this.unknownFields = builder.getUnknownFields();");
337
+ printer->Print(
338
+ // Used when constructing the default instance, which cannot be initialized
339
+ // immediately because it may cyclically refer to other default instances.
340
+ "private $classname$(boolean noInit) {$set_default_unknown_fields$}\n"
341
+ "\n"
342
+ "private static final $classname$ defaultInstance;\n"
343
+ "public static $classname$ getDefaultInstance() {\n"
344
+ " return defaultInstance;\n"
345
+ "}\n"
346
+ "\n"
347
+ "public $classname$ getDefaultInstanceForType() {\n"
348
+ " return defaultInstance;\n"
349
+ "}\n"
350
+ "\n",
351
+ "classname", descriptor_->name(),
352
+ "set_default_unknown_fields", UseUnknownFieldSet(descriptor_)
353
+ ? " this.unknownFields ="
354
+ " com.google.protobuf.UnknownFieldSet.getDefaultInstance(); "
355
+ : " this.unknownFields = com.google.protobuf.ByteString.EMPTY;");
356
+
357
+ if (UseUnknownFieldSet(descriptor_)) {
358
+ printer->Print(
359
+ "private final com.google.protobuf.UnknownFieldSet unknownFields;\n"
360
+ ""
361
+ "@java.lang.Override\n"
362
+ "public final com.google.protobuf.UnknownFieldSet\n"
363
+ " getUnknownFields() {\n"
364
+ " return this.unknownFields;\n"
365
+ "}\n");
366
+ } else {
367
+ printer->Print(
368
+ "private final com.google.protobuf.ByteString unknownFields;\n");
369
+ }
370
+
371
+ if (HasGeneratedMethods(descriptor_)) {
372
+ GenerateParsingConstructor(printer);
373
+ }
374
+
375
+ GenerateDescriptorMethods(printer);
376
+ GenerateParser(printer);
377
+
378
+ // Nested types
379
+ for (int i = 0; i < descriptor_->enum_type_count(); i++) {
380
+ EnumGenerator(descriptor_->enum_type(i), true, context_)
381
+ .Generate(printer);
382
+ }
383
+
384
+ for (int i = 0; i < descriptor_->nested_type_count(); i++) {
385
+ ImmutableMessageGenerator messageGenerator(
386
+ descriptor_->nested_type(i), context_);
387
+ messageGenerator.GenerateInterface(printer);
388
+ messageGenerator.Generate(printer);
389
+ }
390
+
391
+ if (GenerateHasBits(descriptor_)) {
392
+ // Integers for bit fields.
393
+ int totalBits = 0;
394
+ for (int i = 0; i < descriptor_->field_count(); i++) {
395
+ totalBits += field_generators_.get(descriptor_->field(i))
396
+ .GetNumBitsForMessage();
397
+ }
398
+ int totalInts = (totalBits + 31) / 32;
399
+ for (int i = 0; i < totalInts; i++) {
400
+ printer->Print("private int $bit_field_name$;\n",
401
+ "bit_field_name", GetBitFieldName(i));
402
+ }
403
+ }
404
+
405
+ // oneof
406
+ map<string, string> vars;
407
+ for (int i = 0; i < descriptor_->oneof_decl_count(); i++) {
408
+ vars["oneof_name"] = context_->GetOneofGeneratorInfo(
409
+ descriptor_->oneof_decl(i))->name;
410
+ vars["oneof_capitalized_name"] = context_->GetOneofGeneratorInfo(
411
+ descriptor_->oneof_decl(i))->capitalized_name;
412
+ vars["oneof_index"] = SimpleItoa(descriptor_->oneof_decl(i)->index());
413
+ // oneofCase_ and oneof_
414
+ printer->Print(vars,
415
+ "private int $oneof_name$Case_ = 0;\n"
416
+ "private java.lang.Object $oneof_name$_;\n");
417
+ // OneofCase enum
418
+ printer->Print(vars,
419
+ "public enum $oneof_capitalized_name$Case\n"
420
+ " implements com.google.protobuf.Internal.EnumLite {\n");
421
+ printer->Indent();
422
+ for (int j = 0; j < descriptor_->oneof_decl(i)->field_count(); j++) {
423
+ const FieldDescriptor* field = descriptor_->oneof_decl(i)->field(j);
424
+ printer->Print(
425
+ "$field_name$($field_number$),\n",
426
+ "field_name",
427
+ ToUpper(field->name()),
428
+ "field_number",
429
+ SimpleItoa(field->number()));
430
+ }
431
+ printer->Print(
432
+ "$cap_oneof_name$_NOT_SET(0);\n",
433
+ "cap_oneof_name",
434
+ ToUpper(vars["oneof_name"]));
435
+ printer->Print(vars,
436
+ "private int value = 0;\n"
437
+ "private $oneof_capitalized_name$Case(int value) {\n"
438
+ " this.value = value;\n"
439
+ "}\n");
440
+ printer->Print(vars,
441
+ "public static $oneof_capitalized_name$Case valueOf(int value) {\n"
442
+ " switch (value) {\n");
443
+ for (int j = 0; j < descriptor_->oneof_decl(i)->field_count(); j++) {
444
+ const FieldDescriptor* field = descriptor_->oneof_decl(i)->field(j);
445
+ printer->Print(
446
+ " case $field_number$: return $field_name$;\n",
447
+ "field_number",
448
+ SimpleItoa(field->number()),
449
+ "field_name",
450
+ ToUpper(field->name()));
451
+ }
452
+ printer->Print(
453
+ " case 0: return $cap_oneof_name$_NOT_SET;\n"
454
+ " default: throw new java.lang.IllegalArgumentException(\n"
455
+ " \"Value is undefined for this oneof enum.\");\n"
456
+ " }\n"
457
+ "}\n"
458
+ "public int getNumber() {\n"
459
+ " return this.value;\n"
460
+ "}\n",
461
+ "cap_oneof_name", ToUpper(vars["oneof_name"]));
462
+ printer->Outdent();
463
+ printer->Print("};\n\n");
464
+ // oneofCase()
465
+ printer->Print(vars,
466
+ "public $oneof_capitalized_name$Case\n"
467
+ "get$oneof_capitalized_name$Case() {\n"
468
+ " return $oneof_capitalized_name$Case.valueOf(\n"
469
+ " $oneof_name$Case_);\n"
470
+ "}\n"
471
+ "\n");
472
+ }
473
+
474
+ // Fields
475
+ for (int i = 0; i < descriptor_->field_count(); i++) {
476
+ printer->Print("public static final int $constant_name$ = $number$;\n",
477
+ "constant_name", FieldConstantName(descriptor_->field(i)),
478
+ "number", SimpleItoa(descriptor_->field(i)->number()));
479
+ field_generators_.get(descriptor_->field(i)).GenerateMembers(printer);
480
+ printer->Print("\n");
481
+ }
482
+
483
+ // Called by the constructor, except in the case of the default instance,
484
+ // in which case this is called by static init code later on.
485
+ printer->Print("private void initFields() {\n");
486
+ printer->Indent();
487
+ for (int i = 0; i < descriptor_->field_count(); i++) {
488
+ if (!descriptor_->field(i)->containing_oneof()) {
489
+ field_generators_.get(descriptor_->field(i))
490
+ .GenerateInitializationCode(printer);
491
+ }
492
+ }
493
+
494
+ printer->Outdent();
495
+ printer->Print("}\n");
496
+
497
+ if (HasGeneratedMethods(descriptor_)) {
498
+ GenerateIsInitialized(printer, MEMOIZE);
499
+ GenerateMessageSerializationMethods(printer);
500
+ }
501
+
502
+ if (HasEqualsAndHashCode(descriptor_)) {
503
+ GenerateEqualsAndHashCode(printer);
504
+ }
505
+
506
+
507
+ GenerateParseFromMethods(printer);
508
+ GenerateBuilder(printer);
509
+
510
+ // Carefully initialize the default instance in such a way that it doesn't
511
+ // conflict with other initialization.
512
+ printer->Print(
513
+ "\n"
514
+ "static {\n"
515
+ " defaultInstance = new $classname$(true);\n"
516
+ " defaultInstance.initFields();\n"
517
+ "}\n"
518
+ "\n"
519
+ "// @@protoc_insertion_point(class_scope:$full_name$)\n",
520
+ "classname", descriptor_->name(),
521
+ "full_name", descriptor_->full_name());
522
+
523
+ // Extensions must be declared after the defaultInstance is initialized
524
+ // because the defaultInstance is used by the extension to lazily retrieve
525
+ // the outer class's FileDescriptor.
526
+ for (int i = 0; i < descriptor_->extension_count(); i++) {
527
+ ImmutableExtensionGenerator(descriptor_->extension(i), context_)
528
+ .Generate(printer);
529
+ }
530
+
531
+ printer->Outdent();
532
+ printer->Print("}\n\n");
533
+ }
534
+
535
+
536
+ // ===================================================================
537
+
538
+ void ImmutableMessageGenerator::
539
+ GenerateMessageSerializationMethods(io::Printer* printer) {
540
+ scoped_array<const FieldDescriptor*> sorted_fields(
541
+ SortFieldsByNumber(descriptor_));
542
+
543
+ vector<const Descriptor::ExtensionRange*> sorted_extensions;
544
+ for (int i = 0; i < descriptor_->extension_range_count(); ++i) {
545
+ sorted_extensions.push_back(descriptor_->extension_range(i));
546
+ }
547
+ sort(sorted_extensions.begin(), sorted_extensions.end(),
548
+ ExtensionRangeOrdering());
549
+
550
+ printer->Print(
551
+ "public void writeTo(com.google.protobuf.CodedOutputStream output)\n"
552
+ " throws java.io.IOException {\n");
553
+ printer->Indent();
554
+ // writeTo(CodedOutputStream output) might be invoked without
555
+ // getSerializedSize() ever being called, but we need the memoized
556
+ // sizes in case this message has packed fields. Rather than emit checks for
557
+ // each packed field, just call getSerializedSize() up front for all messages.
558
+ // In most cases, getSerializedSize() will have already been called anyway by
559
+ // one of the wrapper writeTo() methods, making this call cheap.
560
+ printer->Print(
561
+ "getSerializedSize();\n");
562
+
563
+ if (descriptor_->extension_range_count() > 0) {
564
+ if (descriptor_->options().message_set_wire_format()) {
565
+ printer->Print(
566
+ "com.google.protobuf.GeneratedMessage$lite$\n"
567
+ " .ExtendableMessage<$classname$>.ExtensionWriter extensionWriter =\n"
568
+ " newMessageSetExtensionWriter();\n",
569
+ "lite", HasDescriptorMethods(descriptor_) ? "" : "Lite",
570
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
571
+ } else {
572
+ printer->Print(
573
+ "com.google.protobuf.GeneratedMessage$lite$\n"
574
+ " .ExtendableMessage<$classname$>.ExtensionWriter extensionWriter =\n"
575
+ " newExtensionWriter();\n",
576
+ "lite", HasDescriptorMethods(descriptor_) ? "" : "Lite",
577
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
578
+ }
579
+ }
580
+
581
+ // Merge the fields and the extension ranges, both sorted by field number.
582
+ for (int i = 0, j = 0;
583
+ i < descriptor_->field_count() || j < sorted_extensions.size();
584
+ ) {
585
+ if (i == descriptor_->field_count()) {
586
+ GenerateSerializeOneExtensionRange(printer, sorted_extensions[j++]);
587
+ } else if (j == sorted_extensions.size()) {
588
+ GenerateSerializeOneField(printer, sorted_fields[i++]);
589
+ } else if (sorted_fields[i]->number() < sorted_extensions[j]->start) {
590
+ GenerateSerializeOneField(printer, sorted_fields[i++]);
591
+ } else {
592
+ GenerateSerializeOneExtensionRange(printer, sorted_extensions[j++]);
593
+ }
594
+ }
595
+
596
+ if (UseUnknownFieldSet(descriptor_)) {
597
+ if (descriptor_->options().message_set_wire_format()) {
598
+ printer->Print(
599
+ "getUnknownFields().writeAsMessageSetTo(output);\n");
600
+ } else {
601
+ printer->Print(
602
+ "getUnknownFields().writeTo(output);\n");
603
+ }
604
+ } else {
605
+ printer->Print(
606
+ "output.writeRawBytes(unknownFields);\n");
607
+ }
608
+
609
+ printer->Outdent();
610
+ printer->Print(
611
+ "}\n"
612
+ "\n"
613
+ "private int memoizedSerializedSize = -1;\n"
614
+ "public int getSerializedSize() {\n"
615
+ " int size = memoizedSerializedSize;\n"
616
+ " if (size != -1) return size;\n"
617
+ "\n"
618
+ " size = 0;\n");
619
+ printer->Indent();
620
+
621
+ for (int i = 0; i < descriptor_->field_count(); i++) {
622
+ field_generators_.get(sorted_fields[i]).GenerateSerializedSizeCode(printer);
623
+ }
624
+
625
+ if (descriptor_->extension_range_count() > 0) {
626
+ if (descriptor_->options().message_set_wire_format()) {
627
+ printer->Print(
628
+ "size += extensionsSerializedSizeAsMessageSet();\n");
629
+ } else {
630
+ printer->Print(
631
+ "size += extensionsSerializedSize();\n");
632
+ }
633
+ }
634
+
635
+ if (UseUnknownFieldSet(descriptor_)) {
636
+ if (descriptor_->options().message_set_wire_format()) {
637
+ printer->Print(
638
+ "size += getUnknownFields().getSerializedSizeAsMessageSet();\n");
639
+ } else {
640
+ printer->Print(
641
+ "size += getUnknownFields().getSerializedSize();\n");
642
+ }
643
+ } else {
644
+ printer->Print(
645
+ "size += unknownFields.size();\n");
646
+ }
647
+
648
+ printer->Outdent();
649
+ printer->Print(
650
+ " memoizedSerializedSize = size;\n"
651
+ " return size;\n"
652
+ "}\n"
653
+ "\n");
654
+
655
+ printer->Print(
656
+ "private static final long serialVersionUID = 0L;\n"
657
+ "@java.lang.Override\n"
658
+ "protected java.lang.Object writeReplace()\n"
659
+ " throws java.io.ObjectStreamException {\n"
660
+ " return super.writeReplace();\n"
661
+ "}\n"
662
+ "\n");
663
+ }
664
+
665
+ void ImmutableMessageGenerator::
666
+ GenerateParseFromMethods(io::Printer* printer) {
667
+ // Note: These are separate from GenerateMessageSerializationMethods()
668
+ // because they need to be generated even for messages that are optimized
669
+ // for code size.
670
+ printer->Print(
671
+ "public static $classname$ parseFrom(\n"
672
+ " com.google.protobuf.ByteString data)\n"
673
+ " throws com.google.protobuf.InvalidProtocolBufferException {\n"
674
+ " return PARSER.parseFrom(data);\n"
675
+ "}\n"
676
+ "public static $classname$ parseFrom(\n"
677
+ " com.google.protobuf.ByteString data,\n"
678
+ " com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
679
+ " throws com.google.protobuf.InvalidProtocolBufferException {\n"
680
+ " return PARSER.parseFrom(data, extensionRegistry);\n"
681
+ "}\n"
682
+ "public static $classname$ parseFrom(byte[] data)\n"
683
+ " throws com.google.protobuf.InvalidProtocolBufferException {\n"
684
+ " return PARSER.parseFrom(data);\n"
685
+ "}\n"
686
+ "public static $classname$ parseFrom(\n"
687
+ " byte[] data,\n"
688
+ " com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
689
+ " throws com.google.protobuf.InvalidProtocolBufferException {\n"
690
+ " return PARSER.parseFrom(data, extensionRegistry);\n"
691
+ "}\n"
692
+ "public static $classname$ parseFrom(java.io.InputStream input)\n"
693
+ " throws java.io.IOException {\n"
694
+ " return PARSER.parseFrom(input);\n"
695
+ "}\n"
696
+ "public static $classname$ parseFrom(\n"
697
+ " java.io.InputStream input,\n"
698
+ " com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
699
+ " throws java.io.IOException {\n"
700
+ " return PARSER.parseFrom(input, extensionRegistry);\n"
701
+ "}\n"
702
+ "public static $classname$ parseDelimitedFrom(java.io.InputStream input)\n"
703
+ " throws java.io.IOException {\n"
704
+ " return PARSER.parseDelimitedFrom(input);\n"
705
+ "}\n"
706
+ "public static $classname$ parseDelimitedFrom(\n"
707
+ " java.io.InputStream input,\n"
708
+ " com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
709
+ " throws java.io.IOException {\n"
710
+ " return PARSER.parseDelimitedFrom(input, extensionRegistry);\n"
711
+ "}\n"
712
+ "public static $classname$ parseFrom(\n"
713
+ " com.google.protobuf.CodedInputStream input)\n"
714
+ " throws java.io.IOException {\n"
715
+ " return PARSER.parseFrom(input);\n"
716
+ "}\n"
717
+ "public static $classname$ parseFrom(\n"
718
+ " com.google.protobuf.CodedInputStream input,\n"
719
+ " com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
720
+ " throws java.io.IOException {\n"
721
+ " return PARSER.parseFrom(input, extensionRegistry);\n"
722
+ "}\n"
723
+ "\n",
724
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
725
+ }
726
+
727
+ void ImmutableMessageGenerator::GenerateSerializeOneField(
728
+ io::Printer* printer, const FieldDescriptor* field) {
729
+ field_generators_.get(field).GenerateSerializationCode(printer);
730
+ }
731
+
732
+ void ImmutableMessageGenerator::GenerateSerializeOneExtensionRange(
733
+ io::Printer* printer, const Descriptor::ExtensionRange* range) {
734
+ printer->Print(
735
+ "extensionWriter.writeUntil($end$, output);\n",
736
+ "end", SimpleItoa(range->end));
737
+ }
738
+
739
+ // ===================================================================
740
+
741
+ void ImmutableMessageGenerator::GenerateBuilder(io::Printer* printer) {
742
+ printer->Print(
743
+ "public static Builder newBuilder() { return Builder.create(); }\n"
744
+ "public Builder newBuilderForType() { return newBuilder(); }\n"
745
+ "public static Builder newBuilder($classname$ prototype) {\n"
746
+ " return newBuilder().mergeFrom(prototype);\n"
747
+ "}\n"
748
+ "public Builder toBuilder() { return newBuilder(this); }\n"
749
+ "\n",
750
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
751
+
752
+ if (HasNestedBuilders(descriptor_)) {
753
+ printer->Print(
754
+ "@java.lang.Override\n"
755
+ "protected Builder newBuilderForType(\n"
756
+ " com.google.protobuf.GeneratedMessage.BuilderParent parent) {\n"
757
+ " Builder builder = new Builder(parent);\n"
758
+ " return builder;\n"
759
+ "}\n");
760
+ }
761
+
762
+ WriteMessageDocComment(printer, descriptor_);
763
+
764
+ if (descriptor_->extension_range_count() > 0) {
765
+ if (HasDescriptorMethods(descriptor_)) {
766
+ printer->Print(
767
+ "public static final class Builder extends\n"
768
+ " com.google.protobuf.GeneratedMessage.ExtendableBuilder<\n"
769
+ " $classname$, Builder> implements\n"
770
+ " $extra_interfaces$\n"
771
+ " $classname$OrBuilder {\n",
772
+ "classname", name_resolver_->GetImmutableClassName(descriptor_),
773
+ "extra_interfaces", ExtraBuilderInterfaces(descriptor_));
774
+ } else {
775
+ printer->Print(
776
+ "public static final class Builder extends\n"
777
+ " com.google.protobuf.GeneratedMessageLite.ExtendableBuilder<\n"
778
+ " $classname$, Builder> implements\n"
779
+ " $extra_interfaces$\n"
780
+ " $classname$OrBuilder {\n",
781
+ "classname", name_resolver_->GetImmutableClassName(descriptor_),
782
+ "extra_interfaces", ExtraBuilderInterfaces(descriptor_));
783
+ }
784
+ } else {
785
+ if (HasDescriptorMethods(descriptor_)) {
786
+ printer->Print(
787
+ "public static final class Builder extends\n"
788
+ " com.google.protobuf.GeneratedMessage.Builder<Builder> implements\n"
789
+ " $extra_interfaces$\n"
790
+ " $classname$OrBuilder {\n",
791
+ "classname", name_resolver_->GetImmutableClassName(descriptor_),
792
+ "extra_interfaces", ExtraBuilderInterfaces(descriptor_));
793
+ } else {
794
+ printer->Print(
795
+ "public static final class Builder extends\n"
796
+ " com.google.protobuf.GeneratedMessageLite.Builder<\n"
797
+ " $classname$, Builder>\n"
798
+ " implements\n"
799
+ " $extra_interfaces$\n"
800
+ " $classname$OrBuilder {\n",
801
+ "classname", name_resolver_->GetImmutableClassName(descriptor_),
802
+ "extra_interfaces", ExtraBuilderInterfaces(descriptor_));
803
+ }
804
+ }
805
+ printer->Indent();
806
+
807
+ GenerateDescriptorMethods(printer);
808
+ GenerateCommonBuilderMethods(printer);
809
+
810
+ if (HasGeneratedMethods(descriptor_)) {
811
+ GenerateIsInitialized(printer, DONT_MEMOIZE);
812
+ GenerateBuilderParsingMethods(printer);
813
+ }
814
+
815
+ // oneof
816
+ map<string, string> vars;
817
+ for (int i = 0; i < descriptor_->oneof_decl_count(); i++) {
818
+ vars["oneof_name"] = context_->GetOneofGeneratorInfo(
819
+ descriptor_->oneof_decl(i))->name;
820
+ vars["oneof_capitalized_name"] = context_->GetOneofGeneratorInfo(
821
+ descriptor_->oneof_decl(i))->capitalized_name;
822
+ vars["oneof_index"] = SimpleItoa(descriptor_->oneof_decl(i)->index());
823
+ // oneofCase_ and oneof_
824
+ printer->Print(vars,
825
+ "private int $oneof_name$Case_ = 0;\n"
826
+ "private java.lang.Object $oneof_name$_;\n");
827
+ // oneofCase() and clearOneof()
828
+ printer->Print(vars,
829
+ "public $oneof_capitalized_name$Case\n"
830
+ " get$oneof_capitalized_name$Case() {\n"
831
+ " return $oneof_capitalized_name$Case.valueOf(\n"
832
+ " $oneof_name$Case_);\n"
833
+ "}\n"
834
+ "\n"
835
+ "public Builder clear$oneof_capitalized_name$() {\n"
836
+ " $oneof_name$Case_ = 0;\n"
837
+ " $oneof_name$_ = null;\n");
838
+ if (HasDescriptorMethods(descriptor_)) {
839
+ printer->Print(" onChanged();\n");
840
+ }
841
+ printer->Print(
842
+ " return this;\n"
843
+ "}\n"
844
+ "\n");
845
+ }
846
+
847
+ if (GenerateHasBits(descriptor_)) {
848
+ // Integers for bit fields.
849
+ int totalBits = 0;
850
+ for (int i = 0; i < descriptor_->field_count(); i++) {
851
+ totalBits += field_generators_.get(descriptor_->field(i))
852
+ .GetNumBitsForBuilder();
853
+ }
854
+ int totalInts = (totalBits + 31) / 32;
855
+ for (int i = 0; i < totalInts; i++) {
856
+ printer->Print("private int $bit_field_name$;\n",
857
+ "bit_field_name", GetBitFieldName(i));
858
+ }
859
+ }
860
+
861
+ for (int i = 0; i < descriptor_->field_count(); i++) {
862
+ printer->Print("\n");
863
+ field_generators_.get(descriptor_->field(i))
864
+ .GenerateBuilderMembers(printer);
865
+ }
866
+
867
+ printer->Print(
868
+ "\n"
869
+ "// @@protoc_insertion_point(builder_scope:$full_name$)\n",
870
+ "full_name", descriptor_->full_name());
871
+
872
+ printer->Outdent();
873
+ printer->Print("}\n");
874
+ }
875
+
876
+ void ImmutableMessageGenerator::
877
+ GenerateDescriptorMethods(io::Printer* printer) {
878
+ if (HasDescriptorMethods(descriptor_)) {
879
+ if (!descriptor_->options().no_standard_descriptor_accessor()) {
880
+ printer->Print(
881
+ "public static final com.google.protobuf.Descriptors.Descriptor\n"
882
+ " getDescriptor() {\n"
883
+ " return $fileclass$.internal_$identifier$_descriptor;\n"
884
+ "}\n"
885
+ "\n",
886
+ "fileclass", name_resolver_->GetImmutableClassName(descriptor_->file()),
887
+ "identifier", UniqueFileScopeIdentifier(descriptor_));
888
+ }
889
+ printer->Print(
890
+ "protected com.google.protobuf.GeneratedMessage.FieldAccessorTable\n"
891
+ " internalGetFieldAccessorTable() {\n"
892
+ " return $fileclass$.internal_$identifier$_fieldAccessorTable\n"
893
+ " .ensureFieldAccessorsInitialized(\n"
894
+ " $classname$.class, $classname$.Builder.class);\n"
895
+ "}\n"
896
+ "\n",
897
+ "classname", name_resolver_->GetImmutableClassName(descriptor_),
898
+ "fileclass", name_resolver_->GetImmutableClassName(descriptor_->file()),
899
+ "identifier", UniqueFileScopeIdentifier(descriptor_));
900
+ }
901
+ }
902
+
903
+ // ===================================================================
904
+
905
+ void ImmutableMessageGenerator::
906
+ GenerateCommonBuilderMethods(io::Printer* printer) {
907
+ printer->Print(
908
+ "// Construct using $classname$.newBuilder()\n"
909
+ "private Builder() {\n"
910
+ " maybeForceBuilderInitialization();\n"
911
+ "}\n"
912
+ "\n",
913
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
914
+
915
+ if (HasDescriptorMethods(descriptor_)) {
916
+ printer->Print(
917
+ "private Builder(\n"
918
+ " com.google.protobuf.GeneratedMessage.BuilderParent parent) {\n"
919
+ " super(parent);\n"
920
+ " maybeForceBuilderInitialization();\n"
921
+ "}\n",
922
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
923
+ }
924
+
925
+
926
+ if (HasNestedBuilders(descriptor_)) {
927
+ printer->Print(
928
+ "private void maybeForceBuilderInitialization() {\n"
929
+ " if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {\n");
930
+
931
+ printer->Indent();
932
+ printer->Indent();
933
+ for (int i = 0; i < descriptor_->field_count(); i++) {
934
+ if (!descriptor_->field(i)->containing_oneof()) {
935
+ field_generators_.get(descriptor_->field(i))
936
+ .GenerateFieldBuilderInitializationCode(printer);
937
+ }
938
+ }
939
+ printer->Outdent();
940
+ printer->Outdent();
941
+
942
+ printer->Print(
943
+ " }\n"
944
+ "}\n");
945
+ } else {
946
+ printer->Print(
947
+ "private void maybeForceBuilderInitialization() {\n"
948
+ "}\n");
949
+ }
950
+
951
+ printer->Print(
952
+ "private static Builder create() {\n"
953
+ " return new Builder();\n"
954
+ "}\n"
955
+ "\n"
956
+ "public Builder clear() {\n"
957
+ " super.clear();\n",
958
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
959
+
960
+ printer->Indent();
961
+
962
+ for (int i = 0; i < descriptor_->field_count(); i++) {
963
+ if (!descriptor_->field(i)->containing_oneof()) {
964
+ field_generators_.get(descriptor_->field(i))
965
+ .GenerateBuilderClearCode(printer);
966
+ }
967
+ }
968
+
969
+ for (int i = 0; i < descriptor_->oneof_decl_count(); i++) {
970
+ printer->Print(
971
+ "$oneof_name$Case_ = 0;\n"
972
+ "$oneof_name$_ = null;\n",
973
+ "oneof_name", context_->GetOneofGeneratorInfo(
974
+ descriptor_->oneof_decl(i))->name);
975
+ }
976
+
977
+ printer->Outdent();
978
+
979
+ printer->Print(
980
+ " return this;\n"
981
+ "}\n"
982
+ "\n"
983
+ "public Builder clone() {\n"
984
+ " return create().mergeFrom(buildPartial());\n"
985
+ "}\n"
986
+ "\n",
987
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
988
+ if (HasDescriptorMethods(descriptor_)) {
989
+ printer->Print(
990
+ "public com.google.protobuf.Descriptors.Descriptor\n"
991
+ " getDescriptorForType() {\n"
992
+ " return $fileclass$.internal_$identifier$_descriptor;\n"
993
+ "}\n"
994
+ "\n",
995
+ "fileclass", name_resolver_->GetImmutableClassName(descriptor_->file()),
996
+ "identifier", UniqueFileScopeIdentifier(descriptor_));
997
+ }
998
+ printer->Print(
999
+ "public $classname$ getDefaultInstanceForType() {\n"
1000
+ " return $classname$.getDefaultInstance();\n"
1001
+ "}\n"
1002
+ "\n",
1003
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
1004
+
1005
+ // -----------------------------------------------------------------
1006
+
1007
+ printer->Print(
1008
+ "public $classname$ build() {\n"
1009
+ " $classname$ result = buildPartial();\n"
1010
+ " if (!result.isInitialized()) {\n"
1011
+ " throw newUninitializedMessageException(result);\n"
1012
+ " }\n"
1013
+ " return result;\n"
1014
+ "}\n"
1015
+ "\n"
1016
+ "public $classname$ buildPartial() {\n"
1017
+ " $classname$ result = new $classname$(this);\n",
1018
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
1019
+
1020
+ printer->Indent();
1021
+
1022
+ int totalBuilderBits = 0;
1023
+ int totalMessageBits = 0;
1024
+ for (int i = 0; i < descriptor_->field_count(); i++) {
1025
+ const ImmutableFieldGenerator& field =
1026
+ field_generators_.get(descriptor_->field(i));
1027
+ totalBuilderBits += field.GetNumBitsForBuilder();
1028
+ totalMessageBits += field.GetNumBitsForMessage();
1029
+ }
1030
+ int totalBuilderInts = (totalBuilderBits + 31) / 32;
1031
+ int totalMessageInts = (totalMessageBits + 31) / 32;
1032
+
1033
+ if (GenerateHasBits(descriptor_)) {
1034
+ // Local vars for from and to bit fields to avoid accessing the builder and
1035
+ // message over and over for these fields. Seems to provide a slight
1036
+ // perforamance improvement in micro benchmark and this is also what proto1
1037
+ // code does.
1038
+ for (int i = 0; i < totalBuilderInts; i++) {
1039
+ printer->Print("int from_$bit_field_name$ = $bit_field_name$;\n",
1040
+ "bit_field_name", GetBitFieldName(i));
1041
+ }
1042
+ for (int i = 0; i < totalMessageInts; i++) {
1043
+ printer->Print("int to_$bit_field_name$ = 0;\n",
1044
+ "bit_field_name", GetBitFieldName(i));
1045
+ }
1046
+ }
1047
+
1048
+ // Output generation code for each field.
1049
+ for (int i = 0; i < descriptor_->field_count(); i++) {
1050
+ field_generators_.get(descriptor_->field(i)).GenerateBuildingCode(printer);
1051
+ }
1052
+
1053
+ if (GenerateHasBits(descriptor_)) {
1054
+ // Copy the bit field results to the generated message
1055
+ for (int i = 0; i < totalMessageInts; i++) {
1056
+ printer->Print("result.$bit_field_name$ = to_$bit_field_name$;\n",
1057
+ "bit_field_name", GetBitFieldName(i));
1058
+ }
1059
+ }
1060
+
1061
+ for (int i = 0; i < descriptor_->oneof_decl_count(); i++) {
1062
+ printer->Print("result.$oneof_name$Case_ = $oneof_name$Case_;\n",
1063
+ "oneof_name", context_->GetOneofGeneratorInfo(
1064
+ descriptor_->oneof_decl(i))->name);
1065
+ }
1066
+
1067
+ printer->Outdent();
1068
+
1069
+ if (HasDescriptorMethods(descriptor_)) {
1070
+ printer->Print(
1071
+ " onBuilt();\n");
1072
+ }
1073
+
1074
+ printer->Print(
1075
+ " return result;\n"
1076
+ "}\n"
1077
+ "\n",
1078
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
1079
+
1080
+ // -----------------------------------------------------------------
1081
+
1082
+ if (HasGeneratedMethods(descriptor_)) {
1083
+ // MergeFrom(Message other) requires the ability to distinguish the other
1084
+ // messages type by its descriptor.
1085
+ if (HasDescriptorMethods(descriptor_)) {
1086
+ printer->Print(
1087
+ "public Builder mergeFrom(com.google.protobuf.Message other) {\n"
1088
+ " if (other instanceof $classname$) {\n"
1089
+ " return mergeFrom(($classname$)other);\n"
1090
+ " } else {\n"
1091
+ " super.mergeFrom(other);\n"
1092
+ " return this;\n"
1093
+ " }\n"
1094
+ "}\n"
1095
+ "\n",
1096
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
1097
+ }
1098
+
1099
+ printer->Print(
1100
+ "public Builder mergeFrom($classname$ other) {\n"
1101
+ // Optimization: If other is the default instance, we know none of its
1102
+ // fields are set so we can skip the merge.
1103
+ " if (other == $classname$.getDefaultInstance()) return this;\n",
1104
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
1105
+ printer->Indent();
1106
+
1107
+ for (int i = 0; i < descriptor_->field_count(); i++) {
1108
+ if (!descriptor_->field(i)->containing_oneof()) {
1109
+ field_generators_.get(
1110
+ descriptor_->field(i)).GenerateMergingCode(printer);
1111
+ }
1112
+ }
1113
+
1114
+ // Merge oneof fields.
1115
+ for (int i = 0; i < descriptor_->oneof_decl_count(); ++i) {
1116
+ printer->Print(
1117
+ "switch (other.get$oneof_capitalized_name$Case()) {\n",
1118
+ "oneof_capitalized_name",
1119
+ context_->GetOneofGeneratorInfo(
1120
+ descriptor_->oneof_decl(i))->capitalized_name);
1121
+ printer->Indent();
1122
+ for (int j = 0; j < descriptor_->oneof_decl(i)->field_count(); j++) {
1123
+ const FieldDescriptor* field = descriptor_->oneof_decl(i)->field(j);
1124
+ printer->Print(
1125
+ "case $field_name$: {\n",
1126
+ "field_name",
1127
+ ToUpper(field->name()));
1128
+ printer->Indent();
1129
+ field_generators_.get(field).GenerateMergingCode(printer);
1130
+ printer->Print(
1131
+ "break;\n");
1132
+ printer->Outdent();
1133
+ printer->Print(
1134
+ "}\n");
1135
+ }
1136
+ printer->Print(
1137
+ "case $cap_oneof_name$_NOT_SET: {\n"
1138
+ " break;\n"
1139
+ "}\n",
1140
+ "cap_oneof_name",
1141
+ ToUpper(context_->GetOneofGeneratorInfo(
1142
+ descriptor_->oneof_decl(i))->name));
1143
+ printer->Outdent();
1144
+ printer->Print(
1145
+ "}\n");
1146
+ }
1147
+
1148
+ printer->Outdent();
1149
+
1150
+ // if message type has extensions
1151
+ if (descriptor_->extension_range_count() > 0) {
1152
+ printer->Print(
1153
+ " this.mergeExtensionFields(other);\n");
1154
+ }
1155
+
1156
+ if (UseUnknownFieldSet(descriptor_)) {
1157
+ printer->Print(
1158
+ " this.mergeUnknownFields(other.getUnknownFields());\n");
1159
+ } else {
1160
+ printer->Print(
1161
+ " setUnknownFields(\n"
1162
+ " getUnknownFields().concat(other.unknownFields));\n");
1163
+ }
1164
+
1165
+ printer->Print(
1166
+ " return this;\n"
1167
+ "}\n"
1168
+ "\n");
1169
+ }
1170
+ }
1171
+
1172
+ // ===================================================================
1173
+
1174
+ void ImmutableMessageGenerator::
1175
+ GenerateBuilderParsingMethods(io::Printer* printer) {
1176
+ printer->Print(
1177
+ "public Builder mergeFrom(\n"
1178
+ " com.google.protobuf.CodedInputStream input,\n"
1179
+ " com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
1180
+ " throws java.io.IOException {\n"
1181
+ " $classname$ parsedMessage = null;\n"
1182
+ " try {\n"
1183
+ " parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);\n"
1184
+ " } catch (com.google.protobuf.InvalidProtocolBufferException e) {\n"
1185
+ " parsedMessage = ($classname$) e.getUnfinishedMessage();\n"
1186
+ " throw e;\n"
1187
+ " } finally {\n"
1188
+ " if (parsedMessage != null) {\n"
1189
+ " mergeFrom(parsedMessage);\n"
1190
+ " }\n"
1191
+ " }\n"
1192
+ " return this;\n"
1193
+ "}\n",
1194
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
1195
+ }
1196
+
1197
+ // ===================================================================
1198
+
1199
+ void ImmutableMessageGenerator::GenerateIsInitialized(
1200
+ io::Printer* printer, UseMemoization useMemoization) {
1201
+ bool memoization = useMemoization == MEMOIZE;
1202
+ if (memoization) {
1203
+ // Memoizes whether the protocol buffer is fully initialized (has all
1204
+ // required fields). -1 means not yet computed. 0 means false and 1 means
1205
+ // true.
1206
+ printer->Print(
1207
+ "private byte memoizedIsInitialized = -1;\n");
1208
+ }
1209
+ printer->Print(
1210
+ "public final boolean isInitialized() {\n");
1211
+ printer->Indent();
1212
+
1213
+ if (memoization) {
1214
+ // Don't directly compare to -1 to avoid an Android x86 JIT bug.
1215
+ printer->Print(
1216
+ "byte isInitialized = memoizedIsInitialized;\n"
1217
+ "if (isInitialized == 1) return true;\n"
1218
+ "if (isInitialized == 0) return false;\n"
1219
+ "\n");
1220
+ }
1221
+
1222
+ // Check that all required fields in this message are set.
1223
+ // TODO(kenton): We can optimize this when we switch to putting all the
1224
+ // "has" fields into a single bitfield.
1225
+ for (int i = 0; i < descriptor_->field_count(); i++) {
1226
+ const FieldDescriptor* field = descriptor_->field(i);
1227
+ const FieldGeneratorInfo* info = context_->GetFieldGeneratorInfo(field);
1228
+
1229
+ if (field->is_required()) {
1230
+ printer->Print(
1231
+ "if (!has$name$()) {\n"
1232
+ " $memoize$\n"
1233
+ " return false;\n"
1234
+ "}\n",
1235
+ "name", info->capitalized_name,
1236
+ "memoize", memoization ? "memoizedIsInitialized = 0;" : "");
1237
+ }
1238
+ }
1239
+
1240
+ // Now check that all embedded messages are initialized.
1241
+ for (int i = 0; i < descriptor_->field_count(); i++) {
1242
+ const FieldDescriptor* field = descriptor_->field(i);
1243
+ const FieldGeneratorInfo* info = context_->GetFieldGeneratorInfo(field);
1244
+ if (GetJavaType(field) == JAVATYPE_MESSAGE &&
1245
+ HasRequiredFields(field->message_type())) {
1246
+ switch (field->label()) {
1247
+ case FieldDescriptor::LABEL_REQUIRED:
1248
+ printer->Print(
1249
+ "if (!get$name$().isInitialized()) {\n"
1250
+ " $memoize$\n"
1251
+ " return false;\n"
1252
+ "}\n",
1253
+ "type", name_resolver_->GetImmutableClassName(
1254
+ field->message_type()),
1255
+ "name", info->capitalized_name,
1256
+ "memoize", memoization ? "memoizedIsInitialized = 0;" : "");
1257
+ break;
1258
+ case FieldDescriptor::LABEL_OPTIONAL:
1259
+ printer->Print(
1260
+ "if (has$name$()) {\n"
1261
+ " if (!get$name$().isInitialized()) {\n"
1262
+ " $memoize$\n"
1263
+ " return false;\n"
1264
+ " }\n"
1265
+ "}\n",
1266
+ "type", name_resolver_->GetImmutableClassName(
1267
+ field->message_type()),
1268
+ "name", info->capitalized_name,
1269
+ "memoize", memoization ? "memoizedIsInitialized = 0;" : "");
1270
+ break;
1271
+ case FieldDescriptor::LABEL_REPEATED:
1272
+ printer->Print(
1273
+ "for (int i = 0; i < get$name$Count(); i++) {\n"
1274
+ " if (!get$name$(i).isInitialized()) {\n"
1275
+ " $memoize$\n"
1276
+ " return false;\n"
1277
+ " }\n"
1278
+ "}\n",
1279
+ "type", name_resolver_->GetImmutableClassName(
1280
+ field->message_type()),
1281
+ "name", info->capitalized_name,
1282
+ "memoize", memoization ? "memoizedIsInitialized = 0;" : "");
1283
+ break;
1284
+ }
1285
+ }
1286
+ }
1287
+
1288
+ if (descriptor_->extension_range_count() > 0) {
1289
+ printer->Print(
1290
+ "if (!extensionsAreInitialized()) {\n"
1291
+ " $memoize$\n"
1292
+ " return false;\n"
1293
+ "}\n",
1294
+ "memoize", memoization ? "memoizedIsInitialized = 0;" : "");
1295
+ }
1296
+
1297
+ printer->Outdent();
1298
+
1299
+ if (memoization) {
1300
+ printer->Print(
1301
+ " memoizedIsInitialized = 1;\n");
1302
+ }
1303
+
1304
+ printer->Print(
1305
+ " return true;\n"
1306
+ "}\n"
1307
+ "\n");
1308
+ }
1309
+
1310
+ // ===================================================================
1311
+
1312
+ namespace {
1313
+ bool CheckHasBitsForEqualsAndHashCode(const FieldDescriptor* field) {
1314
+ if (field->is_repeated()) {
1315
+ return false;
1316
+ }
1317
+ if (SupportFieldPresence(field->file())) {
1318
+ return true;
1319
+ }
1320
+ return GetJavaType(field) == JAVATYPE_MESSAGE &&
1321
+ field->containing_oneof() == NULL;
1322
+ }
1323
+ } // namespace
1324
+
1325
+ void ImmutableMessageGenerator::
1326
+ GenerateEqualsAndHashCode(io::Printer* printer) {
1327
+ printer->Print(
1328
+ "@java.lang.Override\n"
1329
+ "public boolean equals(final java.lang.Object obj) {\n");
1330
+ printer->Indent();
1331
+ printer->Print(
1332
+ "if (obj == this) {\n"
1333
+ " return true;\n"
1334
+ "}\n"
1335
+ "if (!(obj instanceof $classname$)) {\n"
1336
+ " return super.equals(obj);\n"
1337
+ "}\n"
1338
+ "$classname$ other = ($classname$) obj;\n"
1339
+ "\n",
1340
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
1341
+
1342
+ printer->Print("boolean result = true;\n");
1343
+ for (int i = 0; i < descriptor_->field_count(); i++) {
1344
+ const FieldDescriptor* field = descriptor_->field(i);
1345
+ const FieldGeneratorInfo* info = context_->GetFieldGeneratorInfo(field);
1346
+ bool check_has_bits = CheckHasBitsForEqualsAndHashCode(field);
1347
+ if (check_has_bits) {
1348
+ printer->Print(
1349
+ "result = result && (has$name$() == other.has$name$());\n"
1350
+ "if (has$name$()) {\n",
1351
+ "name", info->capitalized_name);
1352
+ printer->Indent();
1353
+ }
1354
+ field_generators_.get(field).GenerateEqualsCode(printer);
1355
+ if (check_has_bits) {
1356
+ printer->Outdent();
1357
+ printer->Print(
1358
+ "}\n");
1359
+ }
1360
+ }
1361
+ if (HasDescriptorMethods(descriptor_)) {
1362
+ printer->Print(
1363
+ "result = result &&\n"
1364
+ " getUnknownFields().equals(other.getUnknownFields());\n");
1365
+ if (descriptor_->extension_range_count() > 0) {
1366
+ printer->Print(
1367
+ "result = result &&\n"
1368
+ " getExtensionFields().equals(other.getExtensionFields());\n");
1369
+ }
1370
+ }
1371
+ printer->Print(
1372
+ "return result;\n");
1373
+ printer->Outdent();
1374
+ printer->Print(
1375
+ "}\n"
1376
+ "\n");
1377
+
1378
+ printer->Print(
1379
+ "@java.lang.Override\n"
1380
+ "public int hashCode() {\n");
1381
+ printer->Indent();
1382
+ printer->Print(
1383
+ "if (memoizedHashCode != 0) {\n");
1384
+ printer->Indent();
1385
+ printer->Print(
1386
+ "return memoizedHashCode;\n");
1387
+ printer->Outdent();
1388
+ printer->Print(
1389
+ "}\n"
1390
+ "int hash = 41;\n");
1391
+
1392
+ if (HasDescriptorMethods(descriptor_)) {
1393
+ printer->Print("hash = (19 * hash) + getDescriptorForType().hashCode();\n");
1394
+ } else {
1395
+ // Include the hash of the class so that two objects with different types
1396
+ // but the same field values will probably have different hashes.
1397
+ printer->Print("hash = (19 * hash) + $classname$.class.hashCode();\n",
1398
+ "classname", name_resolver_->GetImmutableClassName(descriptor_));
1399
+ }
1400
+
1401
+ for (int i = 0; i < descriptor_->field_count(); i++) {
1402
+ const FieldDescriptor* field = descriptor_->field(i);
1403
+ const FieldGeneratorInfo* info = context_->GetFieldGeneratorInfo(field);
1404
+ bool check_has_bits = CheckHasBitsForEqualsAndHashCode(field);
1405
+ if (check_has_bits) {
1406
+ printer->Print(
1407
+ "if (has$name$()) {\n",
1408
+ "name", info->capitalized_name);
1409
+ printer->Indent();
1410
+ }
1411
+ field_generators_.get(field).GenerateHashCode(printer);
1412
+ if (check_has_bits) {
1413
+ printer->Outdent();
1414
+ printer->Print("}\n");
1415
+ }
1416
+ }
1417
+ if (HasDescriptorMethods(descriptor_)) {
1418
+ if (descriptor_->extension_range_count() > 0) {
1419
+ printer->Print(
1420
+ "hash = hashFields(hash, getExtensionFields());\n");
1421
+ }
1422
+ }
1423
+
1424
+ if (UseUnknownFieldSet(descriptor_)) {
1425
+ printer->Print(
1426
+ "hash = (29 * hash) + getUnknownFields().hashCode();\n");
1427
+ } else {
1428
+ printer->Print(
1429
+ "hash = (29 * hash) + unknownFields.hashCode();\n");
1430
+ }
1431
+ printer->Print(
1432
+ "memoizedHashCode = hash;\n"
1433
+ "return hash;\n");
1434
+ printer->Outdent();
1435
+ printer->Print(
1436
+ "}\n"
1437
+ "\n");
1438
+ }
1439
+
1440
+ // ===================================================================
1441
+
1442
+ void ImmutableMessageGenerator::
1443
+ GenerateExtensionRegistrationCode(io::Printer* printer) {
1444
+ for (int i = 0; i < descriptor_->extension_count(); i++) {
1445
+ ImmutableExtensionGenerator(descriptor_->extension(i), context_)
1446
+ .GenerateRegistrationCode(printer);
1447
+ }
1448
+
1449
+ for (int i = 0; i < descriptor_->nested_type_count(); i++) {
1450
+ ImmutableMessageGenerator(descriptor_->nested_type(i), context_)
1451
+ .GenerateExtensionRegistrationCode(printer);
1452
+ }
1453
+ }
1454
+
1455
+ // ===================================================================
1456
+ void ImmutableMessageGenerator::
1457
+ GenerateParsingConstructor(io::Printer* printer) {
1458
+ scoped_array<const FieldDescriptor*> sorted_fields(
1459
+ SortFieldsByNumber(descriptor_));
1460
+
1461
+ printer->Print(
1462
+ "private $classname$(\n"
1463
+ " com.google.protobuf.CodedInputStream input,\n"
1464
+ " com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
1465
+ " throws com.google.protobuf.InvalidProtocolBufferException {\n",
1466
+ "classname", descriptor_->name());
1467
+ printer->Indent();
1468
+
1469
+ // Initialize all fields to default.
1470
+ printer->Print(
1471
+ "initFields();\n");
1472
+
1473
+ // Use builder bits to track mutable repeated fields.
1474
+ int totalBuilderBits = 0;
1475
+ for (int i = 0; i < descriptor_->field_count(); i++) {
1476
+ const ImmutableFieldGenerator& field =
1477
+ field_generators_.get(descriptor_->field(i));
1478
+ totalBuilderBits += field.GetNumBitsForBuilder();
1479
+ }
1480
+ int totalBuilderInts = (totalBuilderBits + 31) / 32;
1481
+ for (int i = 0; i < totalBuilderInts; i++) {
1482
+ printer->Print("int mutable_$bit_field_name$ = 0;\n",
1483
+ "bit_field_name", GetBitFieldName(i));
1484
+ }
1485
+
1486
+ if (UseUnknownFieldSet(descriptor_)) {
1487
+ printer->Print(
1488
+ "com.google.protobuf.UnknownFieldSet.Builder unknownFields =\n"
1489
+ " com.google.protobuf.UnknownFieldSet.newBuilder();\n");
1490
+ } else {
1491
+ printer->Print(
1492
+ "com.google.protobuf.ByteString.Output unknownFieldsOutput =\n"
1493
+ " com.google.protobuf.ByteString.newOutput();\n"
1494
+ "com.google.protobuf.CodedOutputStream unknownFieldsCodedOutput =\n"
1495
+ " com.google.protobuf.CodedOutputStream.newInstance(\n"
1496
+ " unknownFieldsOutput);\n");
1497
+ }
1498
+
1499
+ printer->Print(
1500
+ "try {\n");
1501
+ printer->Indent();
1502
+
1503
+ printer->Print(
1504
+ "boolean done = false;\n"
1505
+ "while (!done) {\n");
1506
+ printer->Indent();
1507
+
1508
+ printer->Print(
1509
+ "int tag = input.readTag();\n"
1510
+ "switch (tag) {\n");
1511
+ printer->Indent();
1512
+
1513
+ printer->Print(
1514
+ "case 0:\n" // zero signals EOF / limit reached
1515
+ " done = true;\n"
1516
+ " break;\n"
1517
+ "default: {\n"
1518
+ " if (!parseUnknownField(input,$unknown_fields$\n"
1519
+ " extensionRegistry, tag)) {\n"
1520
+ " done = true;\n" // it's an endgroup tag
1521
+ " }\n"
1522
+ " break;\n"
1523
+ "}\n",
1524
+ "unknown_fields", UseUnknownFieldSet(descriptor_)
1525
+ ? " unknownFields," : " unknownFieldsCodedOutput,");
1526
+
1527
+ for (int i = 0; i < descriptor_->field_count(); i++) {
1528
+ const FieldDescriptor* field = sorted_fields[i];
1529
+ uint32 tag = WireFormatLite::MakeTag(field->number(),
1530
+ WireFormat::WireTypeForFieldType(field->type()));
1531
+
1532
+ printer->Print(
1533
+ "case $tag$: {\n",
1534
+ "tag", SimpleItoa(tag));
1535
+ printer->Indent();
1536
+
1537
+ field_generators_.get(field).GenerateParsingCode(printer);
1538
+
1539
+ printer->Outdent();
1540
+ printer->Print(
1541
+ " break;\n"
1542
+ "}\n");
1543
+
1544
+ if (field->is_packable()) {
1545
+ // To make packed = true wire compatible, we generate parsing code from a
1546
+ // packed version of this field regardless of field->options().packed().
1547
+ uint32 packed_tag = WireFormatLite::MakeTag(field->number(),
1548
+ WireFormatLite::WIRETYPE_LENGTH_DELIMITED);
1549
+ printer->Print(
1550
+ "case $tag$: {\n",
1551
+ "tag", SimpleItoa(packed_tag));
1552
+ printer->Indent();
1553
+
1554
+ field_generators_.get(field).GenerateParsingCodeFromPacked(printer);
1555
+
1556
+ printer->Outdent();
1557
+ printer->Print(
1558
+ " break;\n"
1559
+ "}\n");
1560
+ }
1561
+ }
1562
+
1563
+ printer->Outdent();
1564
+ printer->Outdent();
1565
+ printer->Print(
1566
+ " }\n" // switch (tag)
1567
+ "}\n"); // while (!done)
1568
+
1569
+ printer->Outdent();
1570
+ printer->Print(
1571
+ "} catch (com.google.protobuf.InvalidProtocolBufferException e) {\n"
1572
+ " throw e.setUnfinishedMessage(this);\n"
1573
+ "} catch (java.io.IOException e) {\n"
1574
+ " throw new com.google.protobuf.InvalidProtocolBufferException(\n"
1575
+ " e.getMessage()).setUnfinishedMessage(this);\n"
1576
+ "} finally {\n");
1577
+ printer->Indent();
1578
+
1579
+ // Make repeated field list immutable.
1580
+ for (int i = 0; i < descriptor_->field_count(); i++) {
1581
+ const FieldDescriptor* field = sorted_fields[i];
1582
+ field_generators_.get(field).GenerateParsingDoneCode(printer);
1583
+ }
1584
+
1585
+ // Make unknown fields immutable.
1586
+ if (UseUnknownFieldSet(descriptor_)) {
1587
+ printer->Print(
1588
+ "this.unknownFields = unknownFields.build();\n");
1589
+ } else {
1590
+ printer->Print(
1591
+ "try {\n"
1592
+ " unknownFieldsCodedOutput.flush();\n"
1593
+ "} catch (java.io.IOException e) {\n"
1594
+ "// Should not happen\n"
1595
+ "} finally {\n"
1596
+ " unknownFields = unknownFieldsOutput.toByteString();\n"
1597
+ "}\n");
1598
+ }
1599
+
1600
+ // Make extensions immutable.
1601
+ printer->Print(
1602
+ "makeExtensionsImmutable();\n");
1603
+
1604
+ printer->Outdent();
1605
+ printer->Outdent();
1606
+ printer->Print(
1607
+ " }\n" // finally
1608
+ "}\n");
1609
+ }
1610
+
1611
+ // ===================================================================
1612
+ void ImmutableMessageGenerator::GenerateParser(io::Printer* printer) {
1613
+ printer->Print(
1614
+ "public static com.google.protobuf.Parser<$classname$> PARSER =\n"
1615
+ " new com.google.protobuf.AbstractParser<$classname$>() {\n",
1616
+ "classname", descriptor_->name());
1617
+ printer->Indent();
1618
+ printer->Print(
1619
+ "public $classname$ parsePartialFrom(\n"
1620
+ " com.google.protobuf.CodedInputStream input,\n"
1621
+ " com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
1622
+ " throws com.google.protobuf.InvalidProtocolBufferException {\n",
1623
+ "classname", descriptor_->name());
1624
+ if (HasGeneratedMethods(descriptor_)) {
1625
+ printer->Print(
1626
+ " return new $classname$(input, extensionRegistry);\n",
1627
+ "classname", descriptor_->name());
1628
+ } else {
1629
+ // When parsing constructor isn't generated, use builder to parse messages.
1630
+ // Note, will fallback to use reflection based mergeFieldFrom() in
1631
+ // AbstractMessage.Builder.
1632
+ printer->Indent();
1633
+ printer->Print(
1634
+ "Builder builder = newBuilder();\n"
1635
+ "try {\n"
1636
+ " builder.mergeFrom(input, extensionRegistry);\n"
1637
+ "} catch (com.google.protobuf.InvalidProtocolBufferException e) {\n"
1638
+ " throw e.setUnfinishedMessage(builder.buildPartial());\n"
1639
+ "} catch (java.io.IOException e) {\n"
1640
+ " throw new com.google.protobuf.InvalidProtocolBufferException(\n"
1641
+ " e.getMessage()).setUnfinishedMessage(builder.buildPartial());\n"
1642
+ "}\n"
1643
+ "return builder.buildPartial();\n");
1644
+ printer->Outdent();
1645
+ }
1646
+ printer->Print(
1647
+ "}\n");
1648
+ printer->Outdent();
1649
+ printer->Print(
1650
+ "};\n"
1651
+ "\n");
1652
+
1653
+ printer->Print(
1654
+ "@java.lang.Override\n"
1655
+ "public com.google.protobuf.Parser<$classname$> getParserForType() {\n"
1656
+ " return PARSER;\n"
1657
+ "}\n"
1658
+ "\n",
1659
+ "classname", descriptor_->name());
1660
+ }
1661
+
1662
+
1663
+ } // namespace java
1664
+ } // namespace compiler
1665
+ } // namespace protobuf
1666
+ } // namespace google