protoc 2.6.1.1 → 2.6.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,135 @@
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
+ #ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_SERVICE_H__
36
+ #define GOOGLE_PROTOBUF_COMPILER_JAVA_SERVICE_H__
37
+
38
+ #include <map>
39
+ #include <google/protobuf/descriptor.h>
40
+
41
+ namespace google {
42
+ namespace protobuf {
43
+ namespace compiler {
44
+ namespace java {
45
+ class Context; // context.h
46
+ class ClassNameResolver; // name_resolver.h
47
+ }
48
+ }
49
+ namespace io {
50
+ class Printer; // printer.h
51
+ }
52
+ }
53
+
54
+ namespace protobuf {
55
+ namespace compiler {
56
+ namespace java {
57
+
58
+ class ServiceGenerator {
59
+ public:
60
+ explicit ServiceGenerator(const ServiceDescriptor* descriptor);
61
+ virtual ~ServiceGenerator();
62
+
63
+ virtual void Generate(io::Printer* printer) = 0;
64
+
65
+ enum RequestOrResponse { REQUEST, RESPONSE };
66
+ enum IsAbstract { IS_ABSTRACT, IS_CONCRETE };
67
+
68
+ protected:
69
+ const ServiceDescriptor* descriptor_;
70
+
71
+ private:
72
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ServiceGenerator);
73
+ };
74
+
75
+ class ImmutableServiceGenerator : public ServiceGenerator {
76
+ public:
77
+ explicit ImmutableServiceGenerator(const ServiceDescriptor* descriptor,
78
+ Context* context);
79
+ virtual ~ImmutableServiceGenerator();
80
+
81
+ virtual void Generate(io::Printer* printer);
82
+
83
+ private:
84
+
85
+ // Generate the getDescriptorForType() method.
86
+ void GenerateGetDescriptorForType(io::Printer* printer);
87
+
88
+ // Generate a Java interface for the service.
89
+ void GenerateInterface(io::Printer* printer);
90
+
91
+ // Generate newReflectiveService() method.
92
+ void GenerateNewReflectiveServiceMethod(io::Printer* printer);
93
+
94
+ // Generate newReflectiveBlockingService() method.
95
+ void GenerateNewReflectiveBlockingServiceMethod(io::Printer* printer);
96
+
97
+ // Generate abstract method declarations for all methods.
98
+ void GenerateAbstractMethods(io::Printer* printer);
99
+
100
+ // Generate the implementation of Service.callMethod().
101
+ void GenerateCallMethod(io::Printer* printer);
102
+
103
+ // Generate the implementation of BlockingService.callBlockingMethod().
104
+ void GenerateCallBlockingMethod(io::Printer* printer);
105
+
106
+ // Generate the implementations of Service.get{Request,Response}Prototype().
107
+ void GenerateGetPrototype(RequestOrResponse which, io::Printer* printer);
108
+
109
+ // Generate a stub implementation of the service.
110
+ void GenerateStub(io::Printer* printer);
111
+
112
+ // Generate a method signature, possibly abstract, without body or trailing
113
+ // semicolon.
114
+ void GenerateMethodSignature(io::Printer* printer,
115
+ const MethodDescriptor* method,
116
+ IsAbstract is_abstract);
117
+
118
+ // Generate a blocking stub interface and implementation of the service.
119
+ void GenerateBlockingStub(io::Printer* printer);
120
+
121
+ // Generate the method signature for one method of a blocking stub.
122
+ void GenerateBlockingMethodSignature(io::Printer* printer,
123
+ const MethodDescriptor* method);
124
+
125
+ Context* context_;
126
+ ClassNameResolver* name_resolver_;
127
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableServiceGenerator);
128
+ };
129
+
130
+ } // namespace java
131
+ } // namespace compiler
132
+ } // namespace protobuf
133
+
134
+ #endif // NET_PROTO2_COMPILER_JAVA_SERVICE_H__
135
+ } // namespace google
@@ -0,0 +1,201 @@
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: xiaofeng@google.com (Feng Xiao)
32
+
33
+ #include <google/protobuf/compiler/java/java_shared_code_generator.h>
34
+
35
+ #include <memory>
36
+
37
+ #include <google/protobuf/compiler/java/java_helpers.h>
38
+ #include <google/protobuf/compiler/java/java_name_resolver.h>
39
+ #include <google/protobuf/compiler/code_generator.h>
40
+ #include <google/protobuf/io/printer.h>
41
+ #include <google/protobuf/io/zero_copy_stream.h>
42
+ #include <google/protobuf/descriptor.pb.h>
43
+ #include <google/protobuf/descriptor.h>
44
+ #include <google/protobuf/stubs/strutil.h>
45
+
46
+ namespace google {
47
+ namespace protobuf {
48
+ namespace compiler {
49
+ namespace java {
50
+
51
+ SharedCodeGenerator::SharedCodeGenerator(const FileDescriptor* file)
52
+ : name_resolver_(new ClassNameResolver), file_(file) {
53
+ }
54
+
55
+ SharedCodeGenerator::~SharedCodeGenerator() {
56
+ }
57
+
58
+ void SharedCodeGenerator::Generate(GeneratorContext* context,
59
+ vector<string>* file_list) {
60
+ string java_package = FileJavaPackage(file_);
61
+ string package_dir = JavaPackageToDir(java_package);
62
+
63
+ if (HasDescriptorMethods(file_)) {
64
+ // Generate descriptors.
65
+ string classname = name_resolver_->GetDescriptorClassName(file_);
66
+ string filename = package_dir + classname + ".java";
67
+ file_list->push_back(filename);
68
+ scoped_ptr<io::ZeroCopyOutputStream> output(context->Open(filename));
69
+ scoped_ptr<io::Printer> printer(new io::Printer(output.get(), '$'));
70
+
71
+ printer->Print(
72
+ "// Generated by the protocol buffer compiler. DO NOT EDIT!\n"
73
+ "// source: $filename$\n"
74
+ "\n",
75
+ "filename", file_->name());
76
+ if (!java_package.empty()) {
77
+ printer->Print(
78
+ "package $package$;\n"
79
+ "\n",
80
+ "package", java_package);
81
+ }
82
+ printer->Print(
83
+ "public final class $classname$ {\n"
84
+ " public static com.google.protobuf.Descriptors.FileDescriptor\n"
85
+ " descriptor;\n"
86
+ " static {\n",
87
+ "classname", classname);
88
+ printer->Indent();
89
+ printer->Indent();
90
+ GenerateDescriptors(printer.get());
91
+ printer->Outdent();
92
+ printer->Outdent();
93
+ printer->Print(
94
+ " }\n"
95
+ "}\n");
96
+
97
+ printer.reset();
98
+ output.reset();
99
+ }
100
+ }
101
+
102
+
103
+ void SharedCodeGenerator::GenerateDescriptors(io::Printer* printer) {
104
+ // Embed the descriptor. We simply serialize the entire FileDescriptorProto
105
+ // and embed it as a string literal, which is parsed and built into real
106
+ // descriptors at initialization time. We unfortunately have to put it in
107
+ // a string literal, not a byte array, because apparently using a literal
108
+ // byte array causes the Java compiler to generate *instructions* to
109
+ // initialize each and every byte of the array, e.g. as if you typed:
110
+ // b[0] = 123; b[1] = 456; b[2] = 789;
111
+ // This makes huge bytecode files and can easily hit the compiler's internal
112
+ // code size limits (error "code to large"). String literals are apparently
113
+ // embedded raw, which is what we want.
114
+ FileDescriptorProto file_proto;
115
+ file_->CopyTo(&file_proto);
116
+
117
+
118
+ string file_data;
119
+ file_proto.SerializeToString(&file_data);
120
+
121
+ printer->Print(
122
+ "java.lang.String[] descriptorData = {\n");
123
+ printer->Indent();
124
+
125
+ // Only write 40 bytes per line.
126
+ static const int kBytesPerLine = 40;
127
+ for (int i = 0; i < file_data.size(); i += kBytesPerLine) {
128
+ if (i > 0) {
129
+ // Every 400 lines, start a new string literal, in order to avoid the
130
+ // 64k length limit.
131
+ if (i % 400 == 0) {
132
+ printer->Print(",\n");
133
+ } else {
134
+ printer->Print(" +\n");
135
+ }
136
+ }
137
+ printer->Print("\"$data$\"",
138
+ "data", CEscape(file_data.substr(i, kBytesPerLine)));
139
+ }
140
+
141
+ printer->Outdent();
142
+ printer->Print("\n};\n");
143
+
144
+ // -----------------------------------------------------------------
145
+ // Create the InternalDescriptorAssigner.
146
+
147
+ printer->Print(
148
+ "com.google.protobuf.Descriptors.FileDescriptor."
149
+ "InternalDescriptorAssigner assigner =\n"
150
+ " new com.google.protobuf.Descriptors.FileDescriptor."
151
+ " InternalDescriptorAssigner() {\n"
152
+ " public com.google.protobuf.ExtensionRegistry assignDescriptors(\n"
153
+ " com.google.protobuf.Descriptors.FileDescriptor root) {\n"
154
+ " descriptor = root;\n"
155
+ // Custom options will be handled when immutable messages' outer class is
156
+ // loaded. Here we just return null and let custom options be unknown
157
+ // fields.
158
+ " return null;\n"
159
+ " }\n"
160
+ " };\n");
161
+
162
+ // -----------------------------------------------------------------
163
+ // Find out all dependencies.
164
+ vector<pair<string, string> > dependencies;
165
+ for (int i = 0; i < file_->dependency_count(); i++) {
166
+ if (ShouldIncludeDependency(file_->dependency(i))) {
167
+ string filename = file_->dependency(i)->name();
168
+ string classname = FileJavaPackage(file_->dependency(i)) + "." +
169
+ name_resolver_->GetDescriptorClassName(
170
+ file_->dependency(i));
171
+ dependencies.push_back(make_pair(filename, classname));
172
+ }
173
+ }
174
+
175
+ // -----------------------------------------------------------------
176
+ // Invoke internalBuildGeneratedFileFrom() to build the file.
177
+ printer->Print(
178
+ "com.google.protobuf.Descriptors.FileDescriptor\n"
179
+ " .internalBuildGeneratedFileFrom(descriptorData,\n"
180
+ " new com.google.protobuf.Descriptors.FileDescriptor[] {\n");
181
+
182
+ for (int i = 0; i < dependencies.size(); i++) {
183
+ const string& dependency = dependencies[i].second;
184
+ printer->Print(
185
+ " $dependency$.getDescriptor(),\n",
186
+ "dependency", dependency);
187
+ }
188
+
189
+ printer->Print(
190
+ " }, assigner);\n");
191
+ }
192
+
193
+ bool SharedCodeGenerator::ShouldIncludeDependency(
194
+ const FileDescriptor* descriptor) {
195
+ return true;
196
+ }
197
+
198
+ } // namespace java
199
+ } // namespace compiler
200
+ } // namespace protobuf
201
+ } // namespace google
@@ -0,0 +1,90 @@
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: xiaofeng@google.com (Feng Xiao)
32
+ //
33
+ // Generators that generate shared code between immutable API and mutable API.
34
+
35
+ #ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_SHARED_CODE_GENERATOR_H__
36
+ #define GOOGLE_PROTOBUF_COMPILER_JAVA_SHARED_CODE_GENERATOR_H__
37
+
38
+ #include <memory>
39
+ #include <string>
40
+ #include <vector>
41
+
42
+ #include <google/protobuf/stubs/common.h>
43
+
44
+ namespace google {
45
+ namespace protobuf {
46
+ class FileDescriptor; // descriptor.h
47
+ namespace compiler {
48
+ class GeneratorContext; // code_generator.h
49
+ namespace java {
50
+ class ClassNameResolver; // name_resolver.h
51
+ }
52
+ }
53
+ namespace io {
54
+ class Printer; // printer.h
55
+ }
56
+ }
57
+
58
+ namespace protobuf {
59
+ namespace compiler {
60
+ namespace java {
61
+
62
+ // A generator that generates code that are shared between immutable API
63
+ // and mutable API. Currently only descriptors are shared.
64
+ class SharedCodeGenerator {
65
+ public:
66
+ explicit SharedCodeGenerator(const FileDescriptor* file);
67
+ ~SharedCodeGenerator();
68
+
69
+ void Generate(GeneratorContext* generator_context,
70
+ vector<string>* file_list);
71
+ void GenerateDescriptors(io::Printer* printer);
72
+
73
+ private:
74
+ // Returns whether the dependency should be included in the output file.
75
+ // Always returns true for opensource, but used internally at Google to help
76
+ // improve compatibility with version 1 of protocol buffers.
77
+ bool ShouldIncludeDependency(const FileDescriptor* descriptor);
78
+
79
+ scoped_ptr<ClassNameResolver> name_resolver_;
80
+ const FileDescriptor* file_;
81
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(SharedCodeGenerator);
82
+ };
83
+
84
+
85
+ } // namespace java
86
+ } // namespace compiler
87
+ } // namespace protobuf
88
+
89
+ } // namespace google
90
+ #endif // GOOGLE_PROTOBUF_COMPILER_JAVA_SHARED_CODE_GENERATOR_H__
@@ -0,0 +1,1056 @@
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
+ // Author: jonp@google.com (Jon Perlow)
33
+ // Based on original Protocol Buffers design by
34
+ // Sanjay Ghemawat, Jeff Dean, and others.
35
+
36
+ #include <map>
37
+ #include <string>
38
+
39
+ #include <google/protobuf/stubs/common.h>
40
+ #include <google/protobuf/compiler/java/java_context.h>
41
+ #include <google/protobuf/compiler/java/java_doc_comment.h>
42
+ #include <google/protobuf/compiler/java/java_helpers.h>
43
+ #include <google/protobuf/compiler/java/java_name_resolver.h>
44
+ #include <google/protobuf/compiler/java/java_string_field.h>
45
+ #include <google/protobuf/io/printer.h>
46
+ #include <google/protobuf/wire_format.h>
47
+ #include <google/protobuf/stubs/strutil.h>
48
+
49
+ namespace google {
50
+ namespace protobuf {
51
+ namespace compiler {
52
+ namespace java {
53
+
54
+ using internal::WireFormat;
55
+ using internal::WireFormatLite;
56
+
57
+ namespace {
58
+
59
+ void SetPrimitiveVariables(const FieldDescriptor* descriptor,
60
+ int messageBitIndex,
61
+ int builderBitIndex,
62
+ const FieldGeneratorInfo* info,
63
+ ClassNameResolver* name_resolver,
64
+ map<string, string>* variables) {
65
+ SetCommonFieldVariables(descriptor, info, variables);
66
+
67
+ (*variables)["empty_list"] = "com.google.protobuf.LazyStringArrayList.EMPTY";
68
+
69
+ (*variables)["default"] = ImmutableDefaultValue(descriptor, name_resolver);
70
+ (*variables)["default_init"] =
71
+ "= " + ImmutableDefaultValue(descriptor, name_resolver);
72
+ (*variables)["capitalized_type"] = "String";
73
+ (*variables)["tag"] = SimpleItoa(WireFormat::MakeTag(descriptor));
74
+ (*variables)["tag_size"] = SimpleItoa(
75
+ WireFormat::TagSize(descriptor->number(), GetType(descriptor)));
76
+ (*variables)["null_check"] =
77
+ " if (value == null) {\n"
78
+ " throw new NullPointerException();\n"
79
+ " }\n";
80
+
81
+ // TODO(birdo): Add @deprecated javadoc when generating javadoc is supported
82
+ // by the proto compiler
83
+ (*variables)["deprecation"] = descriptor->options().deprecated()
84
+ ? "@java.lang.Deprecated " : "";
85
+ (*variables)["on_changed"] =
86
+ HasDescriptorMethods(descriptor->containing_type()) ? "onChanged();" : "";
87
+
88
+ if (SupportFieldPresence(descriptor->file())) {
89
+ // For singular messages and builders, one bit is used for the hasField bit.
90
+ (*variables)["get_has_field_bit_message"] = GenerateGetBit(messageBitIndex);
91
+ (*variables)["get_has_field_bit_builder"] = GenerateGetBit(builderBitIndex);
92
+
93
+ // Note that these have a trailing ";".
94
+ (*variables)["set_has_field_bit_message"] =
95
+ GenerateSetBit(messageBitIndex) + ";";
96
+ (*variables)["set_has_field_bit_builder"] =
97
+ GenerateSetBit(builderBitIndex) + ";";
98
+ (*variables)["clear_has_field_bit_builder"] =
99
+ GenerateClearBit(builderBitIndex) + ";";
100
+
101
+ (*variables)["is_field_present_message"] = GenerateGetBit(messageBitIndex);
102
+ } else {
103
+ (*variables)["set_has_field_bit_message"] = "";
104
+ (*variables)["set_has_field_bit_builder"] = "";
105
+ (*variables)["clear_has_field_bit_builder"] = "";
106
+
107
+ (*variables)["is_field_present_message"] =
108
+ "!get" + (*variables)["capitalized_name"] + "Bytes().isEmpty()";
109
+ }
110
+
111
+ // For repeated builders, one bit is used for whether the array is immutable.
112
+ (*variables)["get_mutable_bit_builder"] = GenerateGetBit(builderBitIndex);
113
+ (*variables)["set_mutable_bit_builder"] = GenerateSetBit(builderBitIndex);
114
+ (*variables)["clear_mutable_bit_builder"] = GenerateClearBit(builderBitIndex);
115
+
116
+ // For repeated fields, one bit is used for whether the array is immutable
117
+ // in the parsing constructor.
118
+ (*variables)["get_mutable_bit_parser"] =
119
+ GenerateGetBitMutableLocal(builderBitIndex);
120
+ (*variables)["set_mutable_bit_parser"] =
121
+ GenerateSetBitMutableLocal(builderBitIndex);
122
+
123
+ (*variables)["get_has_field_bit_from_local"] =
124
+ GenerateGetBitFromLocal(builderBitIndex);
125
+ (*variables)["set_has_field_bit_to_local"] =
126
+ GenerateSetBitToLocal(messageBitIndex);
127
+ }
128
+
129
+ bool CheckUtf8(const FieldDescriptor* descriptor) {
130
+ return descriptor->file()->options().java_string_check_utf8();
131
+ }
132
+
133
+ } // namespace
134
+
135
+ // ===================================================================
136
+
137
+ ImmutableStringFieldGenerator::
138
+ ImmutableStringFieldGenerator(const FieldDescriptor* descriptor,
139
+ int messageBitIndex,
140
+ int builderBitIndex,
141
+ Context* context)
142
+ : descriptor_(descriptor), messageBitIndex_(messageBitIndex),
143
+ builderBitIndex_(builderBitIndex), context_(context),
144
+ name_resolver_(context->GetNameResolver()) {
145
+ SetPrimitiveVariables(descriptor, messageBitIndex, builderBitIndex,
146
+ context->GetFieldGeneratorInfo(descriptor),
147
+ name_resolver_, &variables_);
148
+ }
149
+
150
+ ImmutableStringFieldGenerator::~ImmutableStringFieldGenerator() {}
151
+
152
+ int ImmutableStringFieldGenerator::GetNumBitsForMessage() const {
153
+ return 1;
154
+ }
155
+
156
+ int ImmutableStringFieldGenerator::GetNumBitsForBuilder() const {
157
+ return 1;
158
+ }
159
+
160
+ // A note about how strings are handled. This code used to just store a String
161
+ // in the Message. This had two issues:
162
+ //
163
+ // 1. It wouldn't roundtrip byte arrays that were not vaid UTF-8 encoded
164
+ // strings, but rather fields that were raw bytes incorrectly marked
165
+ // as strings in the proto file. This is common because in the proto1
166
+ // syntax, string was the way to indicate bytes and C++ engineers can
167
+ // easily make this mistake without affecting the C++ API. By converting to
168
+ // strings immediately, some java code might corrupt these byte arrays as
169
+ // it passes through a java server even if the field was never accessed by
170
+ // application code.
171
+ //
172
+ // 2. There's a performance hit to converting between bytes and strings and
173
+ // it many cases, the field is never even read by the application code. This
174
+ // avoids unnecessary conversions in the common use cases.
175
+ //
176
+ // So now, the field for String is maintained as an Object reference which can
177
+ // either store a String or a ByteString. The code uses an instanceof check
178
+ // to see which one it has and converts to the other one if needed. It remembers
179
+ // the last value requested (in a thread safe manner) as this is most likely
180
+ // the one needed next. The thread safety is such that if two threads both
181
+ // convert the field because the changes made by each thread were not visible to
182
+ // the other, they may cause a conversion to happen more times than would
183
+ // otherwise be necessary. This was deemed better than adding synchronization
184
+ // overhead. It will not cause any corruption issues or affect the behavior of
185
+ // the API. The instanceof check is also highly optimized in the JVM and we
186
+ // decided it was better to reduce the memory overhead by not having two
187
+ // separate fields but rather use dynamic type checking.
188
+ //
189
+ // For single fields, the logic for this is done inside the generated code. For
190
+ // repeated fields, the logic is done in LazyStringArrayList and
191
+ // UnmodifiableLazyStringList.
192
+ void ImmutableStringFieldGenerator::
193
+ GenerateInterfaceMembers(io::Printer* printer) const {
194
+ if (SupportFieldPresence(descriptor_->file())) {
195
+ WriteFieldDocComment(printer, descriptor_);
196
+ printer->Print(variables_,
197
+ "$deprecation$boolean has$capitalized_name$();\n");
198
+ }
199
+ WriteFieldDocComment(printer, descriptor_);
200
+ printer->Print(variables_,
201
+ "$deprecation$java.lang.String get$capitalized_name$();\n");
202
+ WriteFieldDocComment(printer, descriptor_);
203
+ printer->Print(variables_,
204
+ "$deprecation$com.google.protobuf.ByteString\n"
205
+ " get$capitalized_name$Bytes();\n");
206
+ }
207
+
208
+ void ImmutableStringFieldGenerator::
209
+ GenerateMembers(io::Printer* printer) const {
210
+ printer->Print(variables_,
211
+ "private java.lang.Object $name$_;\n");
212
+ PrintExtraFieldInfo(variables_, printer);
213
+
214
+ if (SupportFieldPresence(descriptor_->file())) {
215
+ WriteFieldDocComment(printer, descriptor_);
216
+ printer->Print(variables_,
217
+ "$deprecation$public boolean has$capitalized_name$() {\n"
218
+ " return $get_has_field_bit_message$;\n"
219
+ "}\n");
220
+ }
221
+
222
+ WriteFieldDocComment(printer, descriptor_);
223
+ printer->Print(variables_,
224
+ "$deprecation$public java.lang.String get$capitalized_name$() {\n"
225
+ " java.lang.Object ref = $name$_;\n"
226
+ " if (ref instanceof java.lang.String) {\n"
227
+ " return (java.lang.String) ref;\n"
228
+ " } else {\n"
229
+ " com.google.protobuf.ByteString bs = \n"
230
+ " (com.google.protobuf.ByteString) ref;\n"
231
+ " java.lang.String s = bs.toStringUtf8();\n");
232
+ if (CheckUtf8(descriptor_)) {
233
+ printer->Print(variables_,
234
+ " $name$_ = s;\n");
235
+ } else {
236
+ printer->Print(variables_,
237
+ " if (bs.isValidUtf8()) {\n"
238
+ " $name$_ = s;\n"
239
+ " }\n");
240
+ }
241
+ printer->Print(variables_,
242
+ " return s;\n"
243
+ " }\n"
244
+ "}\n");
245
+ WriteFieldDocComment(printer, descriptor_);
246
+ printer->Print(variables_,
247
+ "$deprecation$public com.google.protobuf.ByteString\n"
248
+ " get$capitalized_name$Bytes() {\n"
249
+ " java.lang.Object ref = $name$_;\n"
250
+ " if (ref instanceof java.lang.String) {\n"
251
+ " com.google.protobuf.ByteString b = \n"
252
+ " com.google.protobuf.ByteString.copyFromUtf8(\n"
253
+ " (java.lang.String) ref);\n"
254
+ " $name$_ = b;\n"
255
+ " return b;\n"
256
+ " } else {\n"
257
+ " return (com.google.protobuf.ByteString) ref;\n"
258
+ " }\n"
259
+ "}\n");
260
+ }
261
+
262
+ void ImmutableStringFieldGenerator::
263
+ GenerateBuilderMembers(io::Printer* printer) const {
264
+ printer->Print(variables_,
265
+ "private java.lang.Object $name$_ $default_init$;\n");
266
+ if (SupportFieldPresence(descriptor_->file())) {
267
+ WriteFieldDocComment(printer, descriptor_);
268
+ printer->Print(variables_,
269
+ "$deprecation$public boolean has$capitalized_name$() {\n"
270
+ " return $get_has_field_bit_builder$;\n"
271
+ "}\n");
272
+ }
273
+
274
+ WriteFieldDocComment(printer, descriptor_);
275
+ printer->Print(variables_,
276
+ "$deprecation$public java.lang.String get$capitalized_name$() {\n"
277
+ " java.lang.Object ref = $name$_;\n"
278
+ " if (!(ref instanceof java.lang.String)) {\n"
279
+ " com.google.protobuf.ByteString bs =\n"
280
+ " (com.google.protobuf.ByteString) ref;\n"
281
+ " java.lang.String s = bs.toStringUtf8();\n");
282
+ if (CheckUtf8(descriptor_)) {
283
+ printer->Print(variables_,
284
+ " $name$_ = s;\n");
285
+ } else {
286
+ printer->Print(variables_,
287
+ " if (bs.isValidUtf8()) {\n"
288
+ " $name$_ = s;\n"
289
+ " }\n");
290
+ }
291
+ printer->Print(variables_,
292
+ " return s;\n"
293
+ " } else {\n"
294
+ " return (java.lang.String) ref;\n"
295
+ " }\n"
296
+ "}\n");
297
+
298
+ WriteFieldDocComment(printer, descriptor_);
299
+ printer->Print(variables_,
300
+ "$deprecation$public com.google.protobuf.ByteString\n"
301
+ " get$capitalized_name$Bytes() {\n"
302
+ " java.lang.Object ref = $name$_;\n"
303
+ " if (ref instanceof String) {\n"
304
+ " com.google.protobuf.ByteString b = \n"
305
+ " com.google.protobuf.ByteString.copyFromUtf8(\n"
306
+ " (java.lang.String) ref);\n"
307
+ " $name$_ = b;\n"
308
+ " return b;\n"
309
+ " } else {\n"
310
+ " return (com.google.protobuf.ByteString) ref;\n"
311
+ " }\n"
312
+ "}\n");
313
+
314
+ WriteFieldDocComment(printer, descriptor_);
315
+ printer->Print(variables_,
316
+ "$deprecation$public Builder set$capitalized_name$(\n"
317
+ " java.lang.String value) {\n"
318
+ "$null_check$"
319
+ " $set_has_field_bit_builder$\n"
320
+ " $name$_ = value;\n"
321
+ " $on_changed$\n"
322
+ " return this;\n"
323
+ "}\n");
324
+ WriteFieldDocComment(printer, descriptor_);
325
+ printer->Print(variables_,
326
+ "$deprecation$public Builder clear$capitalized_name$() {\n"
327
+ " $clear_has_field_bit_builder$\n");
328
+ // The default value is not a simple literal so we want to avoid executing
329
+ // it multiple times. Instead, get the default out of the default instance.
330
+ printer->Print(variables_,
331
+ " $name$_ = getDefaultInstance().get$capitalized_name$();\n");
332
+ printer->Print(variables_,
333
+ " $on_changed$\n"
334
+ " return this;\n"
335
+ "}\n");
336
+
337
+ WriteFieldDocComment(printer, descriptor_);
338
+ printer->Print(variables_,
339
+ "$deprecation$public Builder set$capitalized_name$Bytes(\n"
340
+ " com.google.protobuf.ByteString value) {\n"
341
+ "$null_check$");
342
+ if (CheckUtf8(descriptor_)) {
343
+ printer->Print(variables_,
344
+ " checkByteStringIsUtf8(value);\n");
345
+ }
346
+ printer->Print(variables_,
347
+ " $set_has_field_bit_builder$\n"
348
+ " $name$_ = value;\n"
349
+ " $on_changed$\n"
350
+ " return this;\n"
351
+ "}\n");
352
+ }
353
+
354
+ void ImmutableStringFieldGenerator::
355
+ GenerateFieldBuilderInitializationCode(io::Printer* printer) const {
356
+ // noop for primitives
357
+ }
358
+
359
+ void ImmutableStringFieldGenerator::
360
+ GenerateInitializationCode(io::Printer* printer) const {
361
+ printer->Print(variables_, "$name$_ = $default$;\n");
362
+ }
363
+
364
+ void ImmutableStringFieldGenerator::
365
+ GenerateBuilderClearCode(io::Printer* printer) const {
366
+ printer->Print(variables_,
367
+ "$name$_ = $default$;\n"
368
+ "$clear_has_field_bit_builder$\n");
369
+ }
370
+
371
+ void ImmutableStringFieldGenerator::
372
+ GenerateMergingCode(io::Printer* printer) const {
373
+ if (SupportFieldPresence(descriptor_->file())) {
374
+ // Allow a slight breach of abstraction here in order to avoid forcing
375
+ // all string fields to Strings when copying fields from a Message.
376
+ printer->Print(variables_,
377
+ "if (other.has$capitalized_name$()) {\n"
378
+ " $set_has_field_bit_builder$\n"
379
+ " $name$_ = other.$name$_;\n"
380
+ " $on_changed$\n"
381
+ "}\n");
382
+ } else {
383
+ printer->Print(variables_,
384
+ "if (!other.get$capitalized_name$().isEmpty()) {\n"
385
+ " $name$_ = other.$name$_;\n"
386
+ " $on_changed$\n"
387
+ "}\n");
388
+ }
389
+ }
390
+
391
+ void ImmutableStringFieldGenerator::
392
+ GenerateBuildingCode(io::Printer* printer) const {
393
+ if (SupportFieldPresence(descriptor_->file())) {
394
+ printer->Print(variables_,
395
+ "if ($get_has_field_bit_from_local$) {\n"
396
+ " $set_has_field_bit_to_local$;\n"
397
+ "}\n");
398
+ }
399
+ printer->Print(variables_,
400
+ "result.$name$_ = $name$_;\n");
401
+ }
402
+
403
+ void ImmutableStringFieldGenerator::
404
+ GenerateParsingCode(io::Printer* printer) const {
405
+ if (CheckUtf8(descriptor_)) {
406
+ printer->Print(variables_,
407
+ "String s = input.readStringRequireUtf8();\n"
408
+ "$set_has_field_bit_message$\n"
409
+ "$name$_ = s;\n");
410
+ } else {
411
+ printer->Print(variables_,
412
+ "com.google.protobuf.ByteString bs = input.readBytes();\n"
413
+ "$set_has_field_bit_message$\n"
414
+ "$name$_ = bs;\n");
415
+ }
416
+ }
417
+
418
+ void ImmutableStringFieldGenerator::
419
+ GenerateParsingDoneCode(io::Printer* printer) const {
420
+ // noop for strings.
421
+ }
422
+
423
+ void ImmutableStringFieldGenerator::
424
+ GenerateSerializationCode(io::Printer* printer) const {
425
+ printer->Print(variables_,
426
+ "if ($is_field_present_message$) {\n"
427
+ " output.writeBytes($number$, get$capitalized_name$Bytes());\n"
428
+ "}\n");
429
+ }
430
+
431
+ void ImmutableStringFieldGenerator::
432
+ GenerateSerializedSizeCode(io::Printer* printer) const {
433
+ printer->Print(variables_,
434
+ "if ($is_field_present_message$) {\n"
435
+ " size += com.google.protobuf.CodedOutputStream\n"
436
+ " .computeBytesSize($number$, get$capitalized_name$Bytes());\n"
437
+ "}\n");
438
+ }
439
+
440
+ void ImmutableStringFieldGenerator::
441
+ GenerateEqualsCode(io::Printer* printer) const {
442
+ printer->Print(variables_,
443
+ "result = result && get$capitalized_name$()\n"
444
+ " .equals(other.get$capitalized_name$());\n");
445
+ }
446
+
447
+ void ImmutableStringFieldGenerator::
448
+ GenerateHashCode(io::Printer* printer) const {
449
+ printer->Print(variables_,
450
+ "hash = (37 * hash) + $constant_name$;\n");
451
+ printer->Print(variables_,
452
+ "hash = (53 * hash) + get$capitalized_name$().hashCode();\n");
453
+ }
454
+
455
+ string ImmutableStringFieldGenerator::GetBoxedType() const {
456
+ return "java.lang.String";
457
+ }
458
+
459
+ // ===================================================================
460
+
461
+ ImmutableStringOneofFieldGenerator::
462
+ ImmutableStringOneofFieldGenerator(const FieldDescriptor* descriptor,
463
+ int messageBitIndex,
464
+ int builderBitIndex,
465
+ Context* context)
466
+ : ImmutableStringFieldGenerator(
467
+ descriptor, messageBitIndex, builderBitIndex, context) {
468
+ const OneofGeneratorInfo* info =
469
+ context->GetOneofGeneratorInfo(descriptor->containing_oneof());
470
+ SetCommonOneofVariables(descriptor, info, &variables_);
471
+ }
472
+
473
+ ImmutableStringOneofFieldGenerator::
474
+ ~ImmutableStringOneofFieldGenerator() {}
475
+
476
+ void ImmutableStringOneofFieldGenerator::
477
+ GenerateMembers(io::Printer* printer) const {
478
+ PrintExtraFieldInfo(variables_, printer);
479
+
480
+ if (SupportFieldPresence(descriptor_->file())) {
481
+ WriteFieldDocComment(printer, descriptor_);
482
+ printer->Print(variables_,
483
+ "$deprecation$public boolean has$capitalized_name$() {\n"
484
+ " return $has_oneof_case_message$;\n"
485
+ "}\n");
486
+ }
487
+
488
+ WriteFieldDocComment(printer, descriptor_);
489
+ printer->Print(variables_,
490
+ "$deprecation$public java.lang.String get$capitalized_name$() {\n"
491
+ " java.lang.Object ref $default_init$;\n"
492
+ " if ($has_oneof_case_message$) {\n"
493
+ " ref = $oneof_name$_;\n"
494
+ " }\n"
495
+ " if (ref instanceof java.lang.String) {\n"
496
+ " return (java.lang.String) ref;\n"
497
+ " } else {\n"
498
+ " com.google.protobuf.ByteString bs = \n"
499
+ " (com.google.protobuf.ByteString) ref;\n"
500
+ " java.lang.String s = bs.toStringUtf8();\n");
501
+ if (CheckUtf8(descriptor_)) {
502
+ printer->Print(variables_,
503
+ " if ($has_oneof_case_message$) {\n"
504
+ " $oneof_name$_ = s;\n"
505
+ " }\n");
506
+ } else {
507
+ printer->Print(variables_,
508
+ " if (bs.isValidUtf8() && ($has_oneof_case_message$)) {\n"
509
+ " $oneof_name$_ = s;\n"
510
+ " }\n");
511
+ }
512
+ printer->Print(variables_,
513
+ " return s;\n"
514
+ " }\n"
515
+ "}\n");
516
+ WriteFieldDocComment(printer, descriptor_);
517
+
518
+ printer->Print(variables_,
519
+ "$deprecation$public com.google.protobuf.ByteString\n"
520
+ " get$capitalized_name$Bytes() {\n"
521
+ " java.lang.Object ref $default_init$;\n"
522
+ " if ($has_oneof_case_message$) {\n"
523
+ " ref = $oneof_name$_;\n"
524
+ " }\n"
525
+ " if (ref instanceof java.lang.String) {\n"
526
+ " com.google.protobuf.ByteString b = \n"
527
+ " com.google.protobuf.ByteString.copyFromUtf8(\n"
528
+ " (java.lang.String) ref);\n"
529
+ " if ($has_oneof_case_message$) {\n"
530
+ " $oneof_name$_ = b;\n"
531
+ " }\n"
532
+ " return b;\n"
533
+ " } else {\n"
534
+ " return (com.google.protobuf.ByteString) ref;\n"
535
+ " }\n"
536
+ "}\n");
537
+ }
538
+
539
+ void ImmutableStringOneofFieldGenerator::
540
+ GenerateBuilderMembers(io::Printer* printer) const {
541
+ if (SupportFieldPresence(descriptor_->file())) {
542
+ WriteFieldDocComment(printer, descriptor_);
543
+ printer->Print(variables_,
544
+ "$deprecation$public boolean has$capitalized_name$() {\n"
545
+ " return $has_oneof_case_message$;\n"
546
+ "}\n");
547
+ }
548
+
549
+ WriteFieldDocComment(printer, descriptor_);
550
+ printer->Print(variables_,
551
+ "$deprecation$public java.lang.String get$capitalized_name$() {\n"
552
+ " java.lang.Object ref $default_init$;\n"
553
+ " if ($has_oneof_case_message$) {\n"
554
+ " ref = $oneof_name$_;\n"
555
+ " }\n"
556
+ " if (!(ref instanceof java.lang.String)) {\n"
557
+ " com.google.protobuf.ByteString bs =\n"
558
+ " (com.google.protobuf.ByteString) ref;\n"
559
+ " java.lang.String s = bs.toStringUtf8();\n"
560
+ " if ($has_oneof_case_message$) {\n");
561
+ if (CheckUtf8(descriptor_)) {
562
+ printer->Print(variables_,
563
+ " $oneof_name$_ = s;\n");
564
+ } else {
565
+ printer->Print(variables_,
566
+ " if (bs.isValidUtf8()) {\n"
567
+ " $oneof_name$_ = s;\n"
568
+ " }\n");
569
+ }
570
+ printer->Print(variables_,
571
+ " }\n"
572
+ " return s;\n"
573
+ " } else {\n"
574
+ " return (java.lang.String) ref;\n"
575
+ " }\n"
576
+ "}\n");
577
+
578
+ WriteFieldDocComment(printer, descriptor_);
579
+ printer->Print(variables_,
580
+ "$deprecation$public com.google.protobuf.ByteString\n"
581
+ " get$capitalized_name$Bytes() {\n"
582
+ " java.lang.Object ref $default_init$;\n"
583
+ " if ($has_oneof_case_message$) {\n"
584
+ " ref = $oneof_name$_;\n"
585
+ " }\n"
586
+ " if (ref instanceof String) {\n"
587
+ " com.google.protobuf.ByteString b = \n"
588
+ " com.google.protobuf.ByteString.copyFromUtf8(\n"
589
+ " (java.lang.String) ref);\n"
590
+ " if ($has_oneof_case_message$) {\n"
591
+ " $oneof_name$_ = b;\n"
592
+ " }\n"
593
+ " return b;\n"
594
+ " } else {\n"
595
+ " return (com.google.protobuf.ByteString) ref;\n"
596
+ " }\n"
597
+ "}\n");
598
+
599
+ WriteFieldDocComment(printer, descriptor_);
600
+ printer->Print(variables_,
601
+ "$deprecation$public Builder set$capitalized_name$(\n"
602
+ " java.lang.String value) {\n"
603
+ "$null_check$"
604
+ " $set_oneof_case_message$;\n"
605
+ " $oneof_name$_ = value;\n"
606
+ " $on_changed$\n"
607
+ " return this;\n"
608
+ "}\n");
609
+ WriteFieldDocComment(printer, descriptor_);
610
+ printer->Print(variables_,
611
+ "$deprecation$public Builder clear$capitalized_name$() {\n"
612
+ " if ($has_oneof_case_message$) {\n"
613
+ " $clear_oneof_case_message$;\n"
614
+ " $oneof_name$_ = null;\n"
615
+ " $on_changed$\n"
616
+ " }\n"
617
+ " return this;\n"
618
+ "}\n");
619
+
620
+ WriteFieldDocComment(printer, descriptor_);
621
+ printer->Print(variables_,
622
+ "$deprecation$public Builder set$capitalized_name$Bytes(\n"
623
+ " com.google.protobuf.ByteString value) {\n"
624
+ "$null_check$");
625
+ if (CheckUtf8(descriptor_)) {
626
+ printer->Print(variables_,
627
+ " checkByteStringIsUtf8(value);\n");
628
+ }
629
+ printer->Print(variables_,
630
+ " $set_oneof_case_message$;\n"
631
+ " $oneof_name$_ = value;\n"
632
+ " $on_changed$\n"
633
+ " return this;\n"
634
+ "}\n");
635
+ }
636
+
637
+ void ImmutableStringOneofFieldGenerator::
638
+ GenerateMergingCode(io::Printer* printer) const {
639
+ // Allow a slight breach of abstraction here in order to avoid forcing
640
+ // all string fields to Strings when copying fields from a Message.
641
+ printer->Print(variables_,
642
+ "$set_oneof_case_message$;\n"
643
+ "$oneof_name$_ = other.$oneof_name$_;\n"
644
+ "$on_changed$\n");
645
+ }
646
+
647
+ void ImmutableStringOneofFieldGenerator::
648
+ GenerateBuildingCode(io::Printer* printer) const {
649
+ printer->Print(variables_,
650
+ "if ($has_oneof_case_message$) {\n"
651
+ " result.$oneof_name$_ = $oneof_name$_;\n"
652
+ "}\n");
653
+ }
654
+
655
+ void ImmutableStringOneofFieldGenerator::
656
+ GenerateParsingCode(io::Printer* printer) const {
657
+ if (CheckUtf8(descriptor_)) {
658
+ printer->Print(variables_,
659
+ "String s = input.readStringRequireUtf8();\n"
660
+ "$set_oneof_case_message$;\n"
661
+ "$oneof_name$_ = s;\n}\n");
662
+ } else {
663
+ printer->Print(variables_,
664
+ "com.google.protobuf.ByteString bs = input.readBytes();\n"
665
+ "$set_oneof_case_message$;\n"
666
+ "$oneof_name$_ = bs;\n");
667
+ }
668
+ }
669
+
670
+ void ImmutableStringOneofFieldGenerator::
671
+ GenerateSerializationCode(io::Printer* printer) const {
672
+ printer->Print(variables_,
673
+ "if ($has_oneof_case_message$) {\n"
674
+ " output.writeBytes($number$, get$capitalized_name$Bytes());\n"
675
+ "}\n");
676
+ }
677
+
678
+ void ImmutableStringOneofFieldGenerator::
679
+ GenerateSerializedSizeCode(io::Printer* printer) const {
680
+ printer->Print(variables_,
681
+ "if ($has_oneof_case_message$) {\n"
682
+ " size += com.google.protobuf.CodedOutputStream\n"
683
+ " .computeBytesSize($number$, get$capitalized_name$Bytes());\n"
684
+ "}\n");
685
+ }
686
+
687
+ // ===================================================================
688
+
689
+ RepeatedImmutableStringFieldGenerator::
690
+ RepeatedImmutableStringFieldGenerator(const FieldDescriptor* descriptor,
691
+ int messageBitIndex,
692
+ int builderBitIndex,
693
+ Context* context)
694
+ : descriptor_(descriptor), messageBitIndex_(messageBitIndex),
695
+ builderBitIndex_(builderBitIndex), context_(context),
696
+ name_resolver_(context->GetNameResolver()) {
697
+ SetPrimitiveVariables(descriptor, messageBitIndex, builderBitIndex,
698
+ context->GetFieldGeneratorInfo(descriptor),
699
+ name_resolver_, &variables_);
700
+ }
701
+
702
+ RepeatedImmutableStringFieldGenerator::
703
+ ~RepeatedImmutableStringFieldGenerator() {}
704
+
705
+ int RepeatedImmutableStringFieldGenerator::GetNumBitsForMessage() const {
706
+ return 0;
707
+ }
708
+
709
+ int RepeatedImmutableStringFieldGenerator::GetNumBitsForBuilder() const {
710
+ return 1;
711
+ }
712
+
713
+ void RepeatedImmutableStringFieldGenerator::
714
+ GenerateInterfaceMembers(io::Printer* printer) const {
715
+ WriteFieldDocComment(printer, descriptor_);
716
+ printer->Print(variables_,
717
+ "$deprecation$com.google.protobuf.ProtocolStringList\n"
718
+ " get$capitalized_name$List();\n");
719
+ WriteFieldDocComment(printer, descriptor_);
720
+ printer->Print(variables_,
721
+ "$deprecation$int get$capitalized_name$Count();\n");
722
+ WriteFieldDocComment(printer, descriptor_);
723
+ printer->Print(variables_,
724
+ "$deprecation$java.lang.String get$capitalized_name$(int index);\n");
725
+ WriteFieldDocComment(printer, descriptor_);
726
+ printer->Print(variables_,
727
+ "$deprecation$com.google.protobuf.ByteString\n"
728
+ " get$capitalized_name$Bytes(int index);\n");
729
+ }
730
+
731
+
732
+ void RepeatedImmutableStringFieldGenerator::
733
+ GenerateMembers(io::Printer* printer) const {
734
+ printer->Print(variables_,
735
+ "private com.google.protobuf.LazyStringList $name$_;\n");
736
+ PrintExtraFieldInfo(variables_, printer);
737
+ WriteFieldDocComment(printer, descriptor_);
738
+ printer->Print(variables_,
739
+ "$deprecation$public com.google.protobuf.ProtocolStringList\n"
740
+ " get$capitalized_name$List() {\n"
741
+ " return $name$_;\n" // note: unmodifiable list
742
+ "}\n");
743
+ WriteFieldDocComment(printer, descriptor_);
744
+ printer->Print(variables_,
745
+ "$deprecation$public int get$capitalized_name$Count() {\n"
746
+ " return $name$_.size();\n"
747
+ "}\n");
748
+ WriteFieldDocComment(printer, descriptor_);
749
+ printer->Print(variables_,
750
+ "$deprecation$public java.lang.String get$capitalized_name$(int index) {\n"
751
+ " return $name$_.get(index);\n"
752
+ "}\n");
753
+ WriteFieldDocComment(printer, descriptor_);
754
+ printer->Print(variables_,
755
+ "$deprecation$public com.google.protobuf.ByteString\n"
756
+ " get$capitalized_name$Bytes(int index) {\n"
757
+ " return $name$_.getByteString(index);\n"
758
+ "}\n");
759
+
760
+ if (descriptor_->options().packed() &&
761
+ HasGeneratedMethods(descriptor_->containing_type())) {
762
+ printer->Print(variables_,
763
+ "private int $name$MemoizedSerializedSize = -1;\n");
764
+ }
765
+ }
766
+
767
+ void RepeatedImmutableStringFieldGenerator::
768
+ GenerateBuilderMembers(io::Printer* printer) const {
769
+ // One field is the list and the bit field keeps track of whether the
770
+ // list is immutable. If it's immutable, the invariant is that it must
771
+ // either an instance of Collections.emptyList() or it's an ArrayList
772
+ // wrapped in a Collections.unmodifiableList() wrapper and nobody else has
773
+ // a refererence to the underlying ArrayList. This invariant allows us to
774
+ // share instances of lists between protocol buffers avoiding expensive
775
+ // memory allocations. Note, immutable is a strong guarantee here -- not
776
+ // just that the list cannot be modified via the reference but that the
777
+ // list can never be modified.
778
+ printer->Print(variables_,
779
+ "private com.google.protobuf.LazyStringList $name$_ = $empty_list$;\n");
780
+
781
+ printer->Print(variables_,
782
+ "private void ensure$capitalized_name$IsMutable() {\n"
783
+ " if (!$get_mutable_bit_builder$) {\n"
784
+ " $name$_ = new com.google.protobuf.LazyStringArrayList($name$_);\n"
785
+ " $set_mutable_bit_builder$;\n"
786
+ " }\n"
787
+ "}\n");
788
+
789
+ // Note: We return an unmodifiable list because otherwise the caller
790
+ // could hold on to the returned list and modify it after the message
791
+ // has been built, thus mutating the message which is supposed to be
792
+ // immutable.
793
+ WriteFieldDocComment(printer, descriptor_);
794
+ printer->Print(variables_,
795
+ "$deprecation$public com.google.protobuf.ProtocolStringList\n"
796
+ " get$capitalized_name$List() {\n"
797
+ " return $name$_.getUnmodifiableView();\n"
798
+ "}\n");
799
+ WriteFieldDocComment(printer, descriptor_);
800
+ printer->Print(variables_,
801
+ "$deprecation$public int get$capitalized_name$Count() {\n"
802
+ " return $name$_.size();\n"
803
+ "}\n");
804
+ WriteFieldDocComment(printer, descriptor_);
805
+ printer->Print(variables_,
806
+ "$deprecation$public java.lang.String get$capitalized_name$(int index) {\n"
807
+ " return $name$_.get(index);\n"
808
+ "}\n");
809
+ WriteFieldDocComment(printer, descriptor_);
810
+ printer->Print(variables_,
811
+ "$deprecation$public com.google.protobuf.ByteString\n"
812
+ " get$capitalized_name$Bytes(int index) {\n"
813
+ " return $name$_.getByteString(index);\n"
814
+ "}\n");
815
+ WriteFieldDocComment(printer, descriptor_);
816
+ printer->Print(variables_,
817
+ "$deprecation$public Builder set$capitalized_name$(\n"
818
+ " int index, java.lang.String value) {\n"
819
+ "$null_check$"
820
+ " ensure$capitalized_name$IsMutable();\n"
821
+ " $name$_.set(index, value);\n"
822
+ " $on_changed$\n"
823
+ " return this;\n"
824
+ "}\n");
825
+ WriteFieldDocComment(printer, descriptor_);
826
+ printer->Print(variables_,
827
+ "$deprecation$public Builder add$capitalized_name$(\n"
828
+ " java.lang.String value) {\n"
829
+ "$null_check$"
830
+ " ensure$capitalized_name$IsMutable();\n"
831
+ " $name$_.add(value);\n"
832
+ " $on_changed$\n"
833
+ " return this;\n"
834
+ "}\n");
835
+ WriteFieldDocComment(printer, descriptor_);
836
+ printer->Print(variables_,
837
+ "$deprecation$public Builder addAll$capitalized_name$(\n"
838
+ " java.lang.Iterable<java.lang.String> values) {\n"
839
+ " ensure$capitalized_name$IsMutable();\n"
840
+ " com.google.protobuf.AbstractMessageLite.Builder.addAll(\n"
841
+ " values, $name$_);\n"
842
+ " $on_changed$\n"
843
+ " return this;\n"
844
+ "}\n");
845
+ WriteFieldDocComment(printer, descriptor_);
846
+ printer->Print(variables_,
847
+ "$deprecation$public Builder clear$capitalized_name$() {\n"
848
+ " $name$_ = $empty_list$;\n"
849
+ " $clear_mutable_bit_builder$;\n"
850
+ " $on_changed$\n"
851
+ " return this;\n"
852
+ "}\n");
853
+
854
+ WriteFieldDocComment(printer, descriptor_);
855
+ printer->Print(variables_,
856
+ "$deprecation$public Builder add$capitalized_name$Bytes(\n"
857
+ " com.google.protobuf.ByteString value) {\n"
858
+ "$null_check$");
859
+ if (CheckUtf8(descriptor_)) {
860
+ printer->Print(variables_,
861
+ " checkByteStringIsUtf8(value);\n");
862
+ }
863
+ printer->Print(variables_,
864
+ " ensure$capitalized_name$IsMutable();\n"
865
+ " $name$_.add(value);\n"
866
+ " $on_changed$\n"
867
+ " return this;\n"
868
+ "}\n");
869
+ }
870
+
871
+ void RepeatedImmutableStringFieldGenerator::
872
+ GenerateFieldBuilderInitializationCode(io::Printer* printer) const {
873
+ // noop for primitives
874
+ }
875
+
876
+ void RepeatedImmutableStringFieldGenerator::
877
+ GenerateInitializationCode(io::Printer* printer) const {
878
+ printer->Print(variables_, "$name$_ = $empty_list$;\n");
879
+ }
880
+
881
+ void RepeatedImmutableStringFieldGenerator::
882
+ GenerateBuilderClearCode(io::Printer* printer) const {
883
+ printer->Print(variables_,
884
+ "$name$_ = $empty_list$;\n"
885
+ "$clear_mutable_bit_builder$;\n");
886
+ }
887
+
888
+ void RepeatedImmutableStringFieldGenerator::
889
+ GenerateMergingCode(io::Printer* printer) const {
890
+ // The code below does two optimizations:
891
+ // 1. If the other list is empty, there's nothing to do. This ensures we
892
+ // don't allocate a new array if we already have an immutable one.
893
+ // 2. If the other list is non-empty and our current list is empty, we can
894
+ // reuse the other list which is guaranteed to be immutable.
895
+ printer->Print(variables_,
896
+ "if (!other.$name$_.isEmpty()) {\n"
897
+ " if ($name$_.isEmpty()) {\n"
898
+ " $name$_ = other.$name$_;\n"
899
+ " $clear_mutable_bit_builder$;\n"
900
+ " } else {\n"
901
+ " ensure$capitalized_name$IsMutable();\n"
902
+ " $name$_.addAll(other.$name$_);\n"
903
+ " }\n"
904
+ " $on_changed$\n"
905
+ "}\n");
906
+ }
907
+
908
+ void RepeatedImmutableStringFieldGenerator::
909
+ GenerateBuildingCode(io::Printer* printer) const {
910
+ // The code below ensures that the result has an immutable list. If our
911
+ // list is immutable, we can just reuse it. If not, we make it immutable.
912
+
913
+ printer->Print(variables_,
914
+ "if ($get_mutable_bit_builder$) {\n"
915
+ " $name$_ = $name$_.getUnmodifiableView();\n"
916
+ " $clear_mutable_bit_builder$;\n"
917
+ "}\n"
918
+ "result.$name$_ = $name$_;\n");
919
+ }
920
+
921
+ void RepeatedImmutableStringFieldGenerator::
922
+ GenerateParsingCode(io::Printer* printer) const {
923
+ if (CheckUtf8(descriptor_)) {
924
+ printer->Print(variables_,
925
+ "String s = input.readStringRequireUtf8();\n");
926
+ } else {
927
+ printer->Print(variables_,
928
+ "com.google.protobuf.ByteString bs = input.readBytes();\n");
929
+ }
930
+ printer->Print(variables_,
931
+ "if (!$get_mutable_bit_parser$) {\n"
932
+ " $name$_ = new com.google.protobuf.LazyStringArrayList();\n"
933
+ " $set_mutable_bit_parser$;\n"
934
+ "}\n");
935
+ if (CheckUtf8(descriptor_)) {
936
+ printer->Print(variables_,
937
+ "$name$_.add(s);\n");
938
+ } else {
939
+ printer->Print(variables_,
940
+ "$name$_.add(bs);\n");
941
+ }
942
+ }
943
+
944
+ void RepeatedImmutableStringFieldGenerator::
945
+ GenerateParsingCodeFromPacked(io::Printer* printer) const {
946
+ printer->Print(variables_,
947
+ "int length = input.readRawVarint32();\n"
948
+ "int limit = input.pushLimit(length);\n"
949
+ "if (!$get_mutable_bit_parser$ && input.getBytesUntilLimit() > 0) {\n"
950
+ " $name$_ = new com.google.protobuf.LazyStringArrayList();\n"
951
+ " $set_mutable_bit_parser$;\n"
952
+ "}\n"
953
+ "while (input.getBytesUntilLimit() > 0) {\n");
954
+ if (CheckUtf8(descriptor_)) {
955
+ printer->Print(variables_,
956
+ " String s = input.readStringRequireUtf8();\n");
957
+ } else {
958
+ printer->Print(variables_,
959
+ " String s = input.readString();\n");
960
+ }
961
+ printer->Print(variables_,
962
+ " $name$.add(s);\n");
963
+ printer->Print(variables_,
964
+ "}\n"
965
+ "input.popLimit(limit);\n");
966
+ }
967
+
968
+ void RepeatedImmutableStringFieldGenerator::
969
+ GenerateParsingDoneCode(io::Printer* printer) const {
970
+ printer->Print(variables_,
971
+ "if ($get_mutable_bit_parser$) {\n"
972
+ " $name$_ = $name$_.getUnmodifiableView();\n"
973
+ "}\n");
974
+ }
975
+
976
+ void RepeatedImmutableStringFieldGenerator::
977
+ GenerateSerializationCode(io::Printer* printer) const {
978
+ if (descriptor_->options().packed()) {
979
+ printer->Print(variables_,
980
+ "if (get$capitalized_name$List().size() > 0) {\n"
981
+ " output.writeRawVarint32($tag$);\n"
982
+ " output.writeRawVarint32($name$MemoizedSerializedSize);\n"
983
+ "}\n"
984
+ "for (int i = 0; i < $name$_.size(); i++) {\n"
985
+ " output.write$capitalized_type$NoTag($name$_.get(i));\n"
986
+ "}\n");
987
+ } else {
988
+ printer->Print(variables_,
989
+ "for (int i = 0; i < $name$_.size(); i++) {\n"
990
+ " output.writeBytes($number$, $name$_.getByteString(i));\n"
991
+ "}\n");
992
+ }
993
+ }
994
+
995
+ void RepeatedImmutableStringFieldGenerator::
996
+ GenerateSerializedSizeCode(io::Printer* printer) const {
997
+ printer->Print(variables_,
998
+ "{\n"
999
+ " int dataSize = 0;\n");
1000
+ printer->Indent();
1001
+
1002
+ printer->Print(variables_,
1003
+ "for (int i = 0; i < $name$_.size(); i++) {\n"
1004
+ " dataSize += com.google.protobuf.CodedOutputStream\n"
1005
+ " .computeBytesSizeNoTag($name$_.getByteString(i));\n"
1006
+ "}\n");
1007
+
1008
+ printer->Print(
1009
+ "size += dataSize;\n");
1010
+
1011
+ if (descriptor_->options().packed()) {
1012
+ printer->Print(variables_,
1013
+ "if (!get$capitalized_name$List().isEmpty()) {\n"
1014
+ " size += $tag_size$;\n"
1015
+ " size += com.google.protobuf.CodedOutputStream\n"
1016
+ " .computeInt32SizeNoTag(dataSize);\n"
1017
+ "}\n");
1018
+ } else {
1019
+ printer->Print(variables_,
1020
+ "size += $tag_size$ * get$capitalized_name$List().size();\n");
1021
+ }
1022
+
1023
+ // cache the data size for packed fields.
1024
+ if (descriptor_->options().packed()) {
1025
+ printer->Print(variables_,
1026
+ "$name$MemoizedSerializedSize = dataSize;\n");
1027
+ }
1028
+
1029
+ printer->Outdent();
1030
+ printer->Print("}\n");
1031
+ }
1032
+
1033
+ void RepeatedImmutableStringFieldGenerator::
1034
+ GenerateEqualsCode(io::Printer* printer) const {
1035
+ printer->Print(variables_,
1036
+ "result = result && get$capitalized_name$List()\n"
1037
+ " .equals(other.get$capitalized_name$List());\n");
1038
+ }
1039
+
1040
+ void RepeatedImmutableStringFieldGenerator::
1041
+ GenerateHashCode(io::Printer* printer) const {
1042
+ printer->Print(variables_,
1043
+ "if (get$capitalized_name$Count() > 0) {\n"
1044
+ " hash = (37 * hash) + $constant_name$;\n"
1045
+ " hash = (53 * hash) + get$capitalized_name$List().hashCode();\n"
1046
+ "}\n");
1047
+ }
1048
+
1049
+ string RepeatedImmutableStringFieldGenerator::GetBoxedType() const {
1050
+ return "String";
1051
+ }
1052
+
1053
+ } // namespace java
1054
+ } // namespace compiler
1055
+ } // namespace protobuf
1056
+ } // namespace google