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,2213 @@
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
+ package com.google.protobuf;
32
+
33
+ import com.google.protobuf.Descriptors.Descriptor;
34
+ import com.google.protobuf.Descriptors.EnumValueDescriptor;
35
+ import com.google.protobuf.Descriptors.FieldDescriptor;
36
+ import com.google.protobuf.Descriptors.FileDescriptor;
37
+ import com.google.protobuf.Descriptors.OneofDescriptor;
38
+
39
+ import java.io.IOException;
40
+ import java.io.ObjectStreamException;
41
+ import java.io.Serializable;
42
+ import java.lang.reflect.InvocationTargetException;
43
+ import java.lang.reflect.Method;
44
+ import java.util.ArrayList;
45
+ import java.util.Collections;
46
+ import java.util.Iterator;
47
+ import java.util.List;
48
+ import java.util.Map;
49
+ import java.util.TreeMap;
50
+
51
+ /**
52
+ * All generated protocol message classes extend this class. This class
53
+ * implements most of the Message and Builder interfaces using Java reflection.
54
+ * Users can ignore this class and pretend that generated messages implement
55
+ * the Message interface directly.
56
+ *
57
+ * @author kenton@google.com Kenton Varda
58
+ */
59
+ public abstract class GeneratedMessage extends AbstractMessage
60
+ implements Serializable {
61
+ private static final long serialVersionUID = 1L;
62
+
63
+ /**
64
+ * For testing. Allows a test to disable the optimization that avoids using
65
+ * field builders for nested messages until they are requested. By disabling
66
+ * this optimization, existing tests can be reused to test the field builders.
67
+ */
68
+ protected static boolean alwaysUseFieldBuilders = false;
69
+
70
+ protected GeneratedMessage() {
71
+ }
72
+
73
+ protected GeneratedMessage(Builder<?> builder) {
74
+ }
75
+
76
+ public Parser<? extends GeneratedMessage> getParserForType() {
77
+ throw new UnsupportedOperationException(
78
+ "This is supposed to be overridden by subclasses.");
79
+ }
80
+
81
+ /**
82
+ * For testing. Allows a test to disable the optimization that avoids using
83
+ * field builders for nested messages until they are requested. By disabling
84
+ * this optimization, existing tests can be reused to test the field builders.
85
+ * See {@link RepeatedFieldBuilder} and {@link SingleFieldBuilder}.
86
+ */
87
+ static void enableAlwaysUseFieldBuildersForTesting() {
88
+ alwaysUseFieldBuilders = true;
89
+ }
90
+
91
+ /**
92
+ * Get the FieldAccessorTable for this type. We can't have the message
93
+ * class pass this in to the constructor because of bootstrapping trouble
94
+ * with DescriptorProtos.
95
+ */
96
+ protected abstract FieldAccessorTable internalGetFieldAccessorTable();
97
+
98
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
99
+ public Descriptor getDescriptorForType() {
100
+ return internalGetFieldAccessorTable().descriptor;
101
+ }
102
+
103
+ /** Internal helper which returns a mutable map. */
104
+ private Map<FieldDescriptor, Object> getAllFieldsMutable() {
105
+ final TreeMap<FieldDescriptor, Object> result =
106
+ new TreeMap<FieldDescriptor, Object>();
107
+ final Descriptor descriptor = internalGetFieldAccessorTable().descriptor;
108
+ for (final FieldDescriptor field : descriptor.getFields()) {
109
+ if (field.isRepeated()) {
110
+ final List<?> value = (List<?>) getField(field);
111
+ if (!value.isEmpty()) {
112
+ result.put(field, value);
113
+ }
114
+ } else {
115
+ if (hasField(field)) {
116
+ result.put(field, getField(field));
117
+ }
118
+ }
119
+ }
120
+ return result;
121
+ }
122
+
123
+ @Override
124
+ public boolean isInitialized() {
125
+ for (final FieldDescriptor field : getDescriptorForType().getFields()) {
126
+ // Check that all required fields are present.
127
+ if (field.isRequired()) {
128
+ if (!hasField(field)) {
129
+ return false;
130
+ }
131
+ }
132
+ // Check that embedded messages are initialized.
133
+ if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) {
134
+ if (field.isRepeated()) {
135
+ @SuppressWarnings("unchecked") final
136
+ List<Message> messageList = (List<Message>) getField(field);
137
+ for (final Message element : messageList) {
138
+ if (!element.isInitialized()) {
139
+ return false;
140
+ }
141
+ }
142
+ } else {
143
+ if (hasField(field) && !((Message) getField(field)).isInitialized()) {
144
+ return false;
145
+ }
146
+ }
147
+ }
148
+ }
149
+
150
+ return true;
151
+ }
152
+
153
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
154
+ public Map<FieldDescriptor, Object> getAllFields() {
155
+ return Collections.unmodifiableMap(getAllFieldsMutable());
156
+ }
157
+
158
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
159
+ public boolean hasOneof(final OneofDescriptor oneof) {
160
+ return internalGetFieldAccessorTable().getOneof(oneof).has(this);
161
+ }
162
+
163
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
164
+ public FieldDescriptor getOneofFieldDescriptor(final OneofDescriptor oneof) {
165
+ return internalGetFieldAccessorTable().getOneof(oneof).get(this);
166
+ }
167
+
168
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
169
+ public boolean hasField(final FieldDescriptor field) {
170
+ return internalGetFieldAccessorTable().getField(field).has(this);
171
+ }
172
+
173
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
174
+ public Object getField(final FieldDescriptor field) {
175
+ return internalGetFieldAccessorTable().getField(field).get(this);
176
+ }
177
+
178
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
179
+ public int getRepeatedFieldCount(final FieldDescriptor field) {
180
+ return internalGetFieldAccessorTable().getField(field)
181
+ .getRepeatedCount(this);
182
+ }
183
+
184
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
185
+ public Object getRepeatedField(final FieldDescriptor field, final int index) {
186
+ return internalGetFieldAccessorTable().getField(field)
187
+ .getRepeated(this, index);
188
+ }
189
+
190
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
191
+ public UnknownFieldSet getUnknownFields() {
192
+ throw new UnsupportedOperationException(
193
+ "This is supposed to be overridden by subclasses.");
194
+ }
195
+
196
+ /**
197
+ * Called by subclasses to parse an unknown field.
198
+ * @return {@code true} unless the tag is an end-group tag.
199
+ */
200
+ protected boolean parseUnknownField(
201
+ CodedInputStream input,
202
+ UnknownFieldSet.Builder unknownFields,
203
+ ExtensionRegistryLite extensionRegistry,
204
+ int tag) throws IOException {
205
+ return unknownFields.mergeFieldFrom(tag, input);
206
+ }
207
+
208
+
209
+ /**
210
+ * Used by parsing constructors in generated classes.
211
+ */
212
+ protected void makeExtensionsImmutable() {
213
+ // Noop for messages without extensions.
214
+ }
215
+
216
+ protected abstract Message.Builder newBuilderForType(BuilderParent parent);
217
+
218
+ /**
219
+ * Interface for the parent of a Builder that allows the builder to
220
+ * communicate invalidations back to the parent for use when using nested
221
+ * builders.
222
+ */
223
+ protected interface BuilderParent {
224
+
225
+ /**
226
+ * A builder becomes dirty whenever a field is modified -- including fields
227
+ * in nested builders -- and becomes clean when build() is called. Thus,
228
+ * when a builder becomes dirty, all its parents become dirty as well, and
229
+ * when it becomes clean, all its children become clean. The dirtiness
230
+ * state is used to invalidate certain cached values.
231
+ * <br>
232
+ * To this end, a builder calls markAsDirty() on its parent whenever it
233
+ * transitions from clean to dirty. The parent must propagate this call to
234
+ * its own parent, unless it was already dirty, in which case the
235
+ * grandparent must necessarily already be dirty as well. The parent can
236
+ * only transition back to "clean" after calling build() on all children.
237
+ */
238
+ void markDirty();
239
+ }
240
+
241
+ @SuppressWarnings("unchecked")
242
+ public abstract static class Builder <BuilderType extends Builder>
243
+ extends AbstractMessage.Builder<BuilderType> {
244
+
245
+ private BuilderParent builderParent;
246
+
247
+ private BuilderParentImpl meAsParent;
248
+
249
+ // Indicates that we've built a message and so we are now obligated
250
+ // to dispatch dirty invalidations. See GeneratedMessage.BuilderListener.
251
+ private boolean isClean;
252
+
253
+ private UnknownFieldSet unknownFields =
254
+ UnknownFieldSet.getDefaultInstance();
255
+
256
+ protected Builder() {
257
+ this(null);
258
+ }
259
+
260
+ protected Builder(BuilderParent builderParent) {
261
+ this.builderParent = builderParent;
262
+ }
263
+
264
+ void dispose() {
265
+ builderParent = null;
266
+ }
267
+
268
+ /**
269
+ * Called by the subclass when a message is built.
270
+ */
271
+ protected void onBuilt() {
272
+ if (builderParent != null) {
273
+ markClean();
274
+ }
275
+ }
276
+
277
+ /**
278
+ * Called by the subclass or a builder to notify us that a message was
279
+ * built and may be cached and therefore invalidations are needed.
280
+ */
281
+ protected void markClean() {
282
+ this.isClean = true;
283
+ }
284
+
285
+ /**
286
+ * Gets whether invalidations are needed
287
+ *
288
+ * @return whether invalidations are needed
289
+ */
290
+ protected boolean isClean() {
291
+ return isClean;
292
+ }
293
+
294
+ // This is implemented here only to work around an apparent bug in the
295
+ // Java compiler and/or build system. See bug #1898463. The mere presence
296
+ // of this dummy clone() implementation makes it go away.
297
+ @Override
298
+ public BuilderType clone() {
299
+ throw new UnsupportedOperationException(
300
+ "This is supposed to be overridden by subclasses.");
301
+ }
302
+
303
+ /**
304
+ * Called by the initialization and clear code paths to allow subclasses to
305
+ * reset any of their builtin fields back to the initial values.
306
+ */
307
+ public BuilderType clear() {
308
+ unknownFields = UnknownFieldSet.getDefaultInstance();
309
+ onChanged();
310
+ return (BuilderType) this;
311
+ }
312
+
313
+ /**
314
+ * Get the FieldAccessorTable for this type. We can't have the message
315
+ * class pass this in to the constructor because of bootstrapping trouble
316
+ * with DescriptorProtos.
317
+ */
318
+ protected abstract FieldAccessorTable internalGetFieldAccessorTable();
319
+
320
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
321
+ public Descriptor getDescriptorForType() {
322
+ return internalGetFieldAccessorTable().descriptor;
323
+ }
324
+
325
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
326
+ public Map<FieldDescriptor, Object> getAllFields() {
327
+ return Collections.unmodifiableMap(getAllFieldsMutable());
328
+ }
329
+
330
+ /** Internal helper which returns a mutable map. */
331
+ private Map<FieldDescriptor, Object> getAllFieldsMutable() {
332
+ final TreeMap<FieldDescriptor, Object> result =
333
+ new TreeMap<FieldDescriptor, Object>();
334
+ final Descriptor descriptor = internalGetFieldAccessorTable().descriptor;
335
+ for (final FieldDescriptor field : descriptor.getFields()) {
336
+ if (field.isRepeated()) {
337
+ final List value = (List) getField(field);
338
+ if (!value.isEmpty()) {
339
+ result.put(field, value);
340
+ }
341
+ } else {
342
+ if (hasField(field)) {
343
+ result.put(field, getField(field));
344
+ }
345
+ }
346
+ }
347
+ return result;
348
+ }
349
+
350
+ public Message.Builder newBuilderForField(
351
+ final FieldDescriptor field) {
352
+ return internalGetFieldAccessorTable().getField(field).newBuilder();
353
+ }
354
+
355
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
356
+ public Message.Builder getFieldBuilder(final FieldDescriptor field) {
357
+ return internalGetFieldAccessorTable().getField(field).getBuilder(this);
358
+ }
359
+
360
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
361
+ public boolean hasOneof(final OneofDescriptor oneof) {
362
+ return internalGetFieldAccessorTable().getOneof(oneof).has(this);
363
+ }
364
+
365
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
366
+ public FieldDescriptor getOneofFieldDescriptor(final OneofDescriptor oneof) {
367
+ return internalGetFieldAccessorTable().getOneof(oneof).get(this);
368
+ }
369
+
370
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
371
+ public boolean hasField(final FieldDescriptor field) {
372
+ return internalGetFieldAccessorTable().getField(field).has(this);
373
+ }
374
+
375
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
376
+ public Object getField(final FieldDescriptor field) {
377
+ Object object = internalGetFieldAccessorTable().getField(field).get(this);
378
+ if (field.isRepeated()) {
379
+ // The underlying list object is still modifiable at this point.
380
+ // Make sure not to expose the modifiable list to the caller.
381
+ return Collections.unmodifiableList((List) object);
382
+ } else {
383
+ return object;
384
+ }
385
+ }
386
+
387
+ public BuilderType setField(final FieldDescriptor field,
388
+ final Object value) {
389
+ internalGetFieldAccessorTable().getField(field).set(this, value);
390
+ return (BuilderType) this;
391
+ }
392
+
393
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
394
+ public BuilderType clearField(final FieldDescriptor field) {
395
+ internalGetFieldAccessorTable().getField(field).clear(this);
396
+ return (BuilderType) this;
397
+ }
398
+
399
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
400
+ public BuilderType clearOneof(final OneofDescriptor oneof) {
401
+ internalGetFieldAccessorTable().getOneof(oneof).clear(this);
402
+ return (BuilderType) this;
403
+ }
404
+
405
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
406
+ public int getRepeatedFieldCount(final FieldDescriptor field) {
407
+ return internalGetFieldAccessorTable().getField(field)
408
+ .getRepeatedCount(this);
409
+ }
410
+
411
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
412
+ public Object getRepeatedField(final FieldDescriptor field,
413
+ final int index) {
414
+ return internalGetFieldAccessorTable().getField(field)
415
+ .getRepeated(this, index);
416
+ }
417
+
418
+ public BuilderType setRepeatedField(final FieldDescriptor field,
419
+ final int index, final Object value) {
420
+ internalGetFieldAccessorTable().getField(field)
421
+ .setRepeated(this, index, value);
422
+ return (BuilderType) this;
423
+ }
424
+
425
+ public BuilderType addRepeatedField(final FieldDescriptor field,
426
+ final Object value) {
427
+ internalGetFieldAccessorTable().getField(field).addRepeated(this, value);
428
+ return (BuilderType) this;
429
+ }
430
+
431
+ public final BuilderType setUnknownFields(
432
+ final UnknownFieldSet unknownFields) {
433
+ this.unknownFields = unknownFields;
434
+ onChanged();
435
+ return (BuilderType) this;
436
+ }
437
+
438
+ @Override
439
+ public final BuilderType mergeUnknownFields(
440
+ final UnknownFieldSet unknownFields) {
441
+ this.unknownFields =
442
+ UnknownFieldSet.newBuilder(this.unknownFields)
443
+ .mergeFrom(unknownFields)
444
+ .build();
445
+ onChanged();
446
+ return (BuilderType) this;
447
+ }
448
+
449
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
450
+ public boolean isInitialized() {
451
+ for (final FieldDescriptor field : getDescriptorForType().getFields()) {
452
+ // Check that all required fields are present.
453
+ if (field.isRequired()) {
454
+ if (!hasField(field)) {
455
+ return false;
456
+ }
457
+ }
458
+ // Check that embedded messages are initialized.
459
+ if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) {
460
+ if (field.isRepeated()) {
461
+ @SuppressWarnings("unchecked") final
462
+ List<Message> messageList = (List<Message>) getField(field);
463
+ for (final Message element : messageList) {
464
+ if (!element.isInitialized()) {
465
+ return false;
466
+ }
467
+ }
468
+ } else {
469
+ if (hasField(field) &&
470
+ !((Message) getField(field)).isInitialized()) {
471
+ return false;
472
+ }
473
+ }
474
+ }
475
+ }
476
+ return true;
477
+ }
478
+
479
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
480
+ public final UnknownFieldSet getUnknownFields() {
481
+ return unknownFields;
482
+ }
483
+
484
+ /**
485
+ * Called by subclasses to parse an unknown field.
486
+ * @return {@code true} unless the tag is an end-group tag.
487
+ */
488
+ protected boolean parseUnknownField(
489
+ final CodedInputStream input,
490
+ final UnknownFieldSet.Builder unknownFields,
491
+ final ExtensionRegistryLite extensionRegistry,
492
+ final int tag) throws IOException {
493
+ return unknownFields.mergeFieldFrom(tag, input);
494
+ }
495
+
496
+ /**
497
+ * Implementation of {@link BuilderParent} for giving to our children. This
498
+ * small inner class makes it so we don't publicly expose the BuilderParent
499
+ * methods.
500
+ */
501
+ private class BuilderParentImpl implements BuilderParent {
502
+
503
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
504
+ public void markDirty() {
505
+ onChanged();
506
+ }
507
+ }
508
+
509
+ /**
510
+ * Gets the {@link BuilderParent} for giving to our children.
511
+ * @return The builder parent for our children.
512
+ */
513
+ protected BuilderParent getParentForChildren() {
514
+ if (meAsParent == null) {
515
+ meAsParent = new BuilderParentImpl();
516
+ }
517
+ return meAsParent;
518
+ }
519
+
520
+ /**
521
+ * Called when a the builder or one of its nested children has changed
522
+ * and any parent should be notified of its invalidation.
523
+ */
524
+ protected final void onChanged() {
525
+ if (isClean && builderParent != null) {
526
+ builderParent.markDirty();
527
+
528
+ // Don't keep dispatching invalidations until build is called again.
529
+ isClean = false;
530
+ }
531
+ }
532
+ }
533
+
534
+ // =================================================================
535
+ // Extensions-related stuff
536
+
537
+ public interface ExtendableMessageOrBuilder<
538
+ MessageType extends ExtendableMessage> extends MessageOrBuilder {
539
+ // Re-define for return type covariance.
540
+ Message getDefaultInstanceForType();
541
+
542
+ /** Check if a singular extension is present. */
543
+ <Type> boolean hasExtension(
544
+ Extension<MessageType, Type> extension);
545
+
546
+ /** Get the number of elements in a repeated extension. */
547
+ <Type> int getExtensionCount(
548
+ Extension<MessageType, List<Type>> extension);
549
+
550
+ /** Get the value of an extension. */
551
+ <Type> Type getExtension(
552
+ Extension<MessageType, Type> extension);
553
+
554
+ /** Get one element of a repeated extension. */
555
+ <Type> Type getExtension(
556
+ Extension<MessageType, List<Type>> extension,
557
+ int index);
558
+ }
559
+
560
+ /**
561
+ * Generated message classes for message types that contain extension ranges
562
+ * subclass this.
563
+ *
564
+ * <p>This class implements type-safe accessors for extensions. They
565
+ * implement all the same operations that you can do with normal fields --
566
+ * e.g. "has", "get", and "getCount" -- but for extensions. The extensions
567
+ * are identified using instances of the class {@link GeneratedExtension};
568
+ * the protocol compiler generates a static instance of this class for every
569
+ * extension in its input. Through the magic of generics, all is made
570
+ * type-safe.
571
+ *
572
+ * <p>For example, imagine you have the {@code .proto} file:
573
+ *
574
+ * <pre>
575
+ * option java_class = "MyProto";
576
+ *
577
+ * message Foo {
578
+ * extensions 1000 to max;
579
+ * }
580
+ *
581
+ * extend Foo {
582
+ * optional int32 bar;
583
+ * }
584
+ * </pre>
585
+ *
586
+ * <p>Then you might write code like:
587
+ *
588
+ * <pre>
589
+ * MyProto.Foo foo = getFoo();
590
+ * int i = foo.getExtension(MyProto.bar);
591
+ * </pre>
592
+ *
593
+ * <p>See also {@link ExtendableBuilder}.
594
+ */
595
+ public abstract static class ExtendableMessage<
596
+ MessageType extends ExtendableMessage>
597
+ extends GeneratedMessage
598
+ implements ExtendableMessageOrBuilder<MessageType> {
599
+
600
+ private final FieldSet<FieldDescriptor> extensions;
601
+
602
+ protected ExtendableMessage() {
603
+ this.extensions = FieldSet.newFieldSet();
604
+ }
605
+
606
+ protected ExtendableMessage(
607
+ ExtendableBuilder<MessageType, ?> builder) {
608
+ super(builder);
609
+ this.extensions = builder.buildExtensions();
610
+ }
611
+
612
+ private void verifyExtensionContainingType(
613
+ final Extension<MessageType, ?> extension) {
614
+ if (extension.getDescriptor().getContainingType() !=
615
+ getDescriptorForType()) {
616
+ // This can only happen if someone uses unchecked operations.
617
+ throw new IllegalArgumentException(
618
+ "Extension is for type \"" +
619
+ extension.getDescriptor().getContainingType().getFullName() +
620
+ "\" which does not match message type \"" +
621
+ getDescriptorForType().getFullName() + "\".");
622
+ }
623
+ }
624
+
625
+ /** Check if a singular extension is present. */
626
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
627
+ public final <Type> boolean hasExtension(
628
+ final Extension<MessageType, Type> extension) {
629
+ verifyExtensionContainingType(extension);
630
+ return extensions.hasField(extension.getDescriptor());
631
+ }
632
+
633
+ /** Get the number of elements in a repeated extension. */
634
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
635
+ public final <Type> int getExtensionCount(
636
+ final Extension<MessageType, List<Type>> extension) {
637
+ verifyExtensionContainingType(extension);
638
+ final FieldDescriptor descriptor = extension.getDescriptor();
639
+ return extensions.getRepeatedFieldCount(descriptor);
640
+ }
641
+
642
+ /** Get the value of an extension. */
643
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
644
+ @SuppressWarnings("unchecked")
645
+ public final <Type> Type getExtension(
646
+ final Extension<MessageType, Type> extension) {
647
+ verifyExtensionContainingType(extension);
648
+ FieldDescriptor descriptor = extension.getDescriptor();
649
+ final Object value = extensions.getField(descriptor);
650
+ if (value == null) {
651
+ if (descriptor.isRepeated()) {
652
+ return (Type) Collections.emptyList();
653
+ } else if (descriptor.getJavaType() ==
654
+ FieldDescriptor.JavaType.MESSAGE) {
655
+ return (Type) extension.getMessageDefaultInstance();
656
+ } else {
657
+ return (Type) extension.fromReflectionType(
658
+ descriptor.getDefaultValue());
659
+ }
660
+ } else {
661
+ return (Type) extension.fromReflectionType(value);
662
+ }
663
+ }
664
+
665
+ /** Get one element of a repeated extension. */
666
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
667
+ @SuppressWarnings("unchecked")
668
+ public final <Type> Type getExtension(
669
+ final Extension<MessageType, List<Type>> extension,
670
+ final int index) {
671
+ verifyExtensionContainingType(extension);
672
+ FieldDescriptor descriptor = extension.getDescriptor();
673
+ return (Type) extension.singularFromReflectionType(
674
+ extensions.getRepeatedField(descriptor, index));
675
+ }
676
+
677
+ /** Called by subclasses to check if all extensions are initialized. */
678
+ protected boolean extensionsAreInitialized() {
679
+ return extensions.isInitialized();
680
+ }
681
+
682
+ @Override
683
+ public boolean isInitialized() {
684
+ return super.isInitialized() && extensionsAreInitialized();
685
+ }
686
+
687
+ @Override
688
+ protected boolean parseUnknownField(
689
+ CodedInputStream input,
690
+ UnknownFieldSet.Builder unknownFields,
691
+ ExtensionRegistryLite extensionRegistry,
692
+ int tag) throws IOException {
693
+ return MessageReflection.mergeFieldFrom(
694
+ input, unknownFields, extensionRegistry, getDescriptorForType(),
695
+ new MessageReflection.ExtensionAdapter(extensions), tag);
696
+ }
697
+
698
+
699
+ /**
700
+ * Used by parsing constructors in generated classes.
701
+ */
702
+ @Override
703
+ protected void makeExtensionsImmutable() {
704
+ extensions.makeImmutable();
705
+ }
706
+
707
+ /**
708
+ * Used by subclasses to serialize extensions. Extension ranges may be
709
+ * interleaved with field numbers, but we must write them in canonical
710
+ * (sorted by field number) order. ExtensionWriter helps us write
711
+ * individual ranges of extensions at once.
712
+ */
713
+ protected class ExtensionWriter {
714
+ // Imagine how much simpler this code would be if Java iterators had
715
+ // a way to get the next element without advancing the iterator.
716
+
717
+ private final Iterator<Map.Entry<FieldDescriptor, Object>> iter =
718
+ extensions.iterator();
719
+ private Map.Entry<FieldDescriptor, Object> next;
720
+ private final boolean messageSetWireFormat;
721
+
722
+ private ExtensionWriter(final boolean messageSetWireFormat) {
723
+ if (iter.hasNext()) {
724
+ next = iter.next();
725
+ }
726
+ this.messageSetWireFormat = messageSetWireFormat;
727
+ }
728
+
729
+ public void writeUntil(final int end, final CodedOutputStream output)
730
+ throws IOException {
731
+ while (next != null && next.getKey().getNumber() < end) {
732
+ FieldDescriptor descriptor = next.getKey();
733
+ if (messageSetWireFormat && descriptor.getLiteJavaType() ==
734
+ WireFormat.JavaType.MESSAGE &&
735
+ !descriptor.isRepeated()) {
736
+ if (next instanceof LazyField.LazyEntry<?>) {
737
+ output.writeRawMessageSetExtension(descriptor.getNumber(),
738
+ ((LazyField.LazyEntry<?>) next).getField().toByteString());
739
+ } else {
740
+ output.writeMessageSetExtension(descriptor.getNumber(),
741
+ (Message) next.getValue());
742
+ }
743
+ } else {
744
+ // TODO(xiangl): Taken care of following code, it may cause
745
+ // problem when we use LazyField for normal fields/extensions.
746
+ // Due to the optional field can be duplicated at the end of
747
+ // serialized bytes, which will make the serialized size change
748
+ // after lazy field parsed. So when we use LazyField globally,
749
+ // we need to change the following write method to write cached
750
+ // bytes directly rather than write the parsed message.
751
+ FieldSet.writeField(descriptor, next.getValue(), output);
752
+ }
753
+ if (iter.hasNext()) {
754
+ next = iter.next();
755
+ } else {
756
+ next = null;
757
+ }
758
+ }
759
+ }
760
+ }
761
+
762
+ protected ExtensionWriter newExtensionWriter() {
763
+ return new ExtensionWriter(false);
764
+ }
765
+ protected ExtensionWriter newMessageSetExtensionWriter() {
766
+ return new ExtensionWriter(true);
767
+ }
768
+
769
+ /** Called by subclasses to compute the size of extensions. */
770
+ protected int extensionsSerializedSize() {
771
+ return extensions.getSerializedSize();
772
+ }
773
+ protected int extensionsSerializedSizeAsMessageSet() {
774
+ return extensions.getMessageSetSerializedSize();
775
+ }
776
+
777
+ // ---------------------------------------------------------------
778
+ // Reflection
779
+
780
+ protected Map<FieldDescriptor, Object> getExtensionFields() {
781
+ return extensions.getAllFields();
782
+ }
783
+
784
+ @Override
785
+ public Map<FieldDescriptor, Object> getAllFields() {
786
+ final Map<FieldDescriptor, Object> result = super.getAllFieldsMutable();
787
+ result.putAll(getExtensionFields());
788
+ return Collections.unmodifiableMap(result);
789
+ }
790
+
791
+ @Override
792
+ public boolean hasField(final FieldDescriptor field) {
793
+ if (field.isExtension()) {
794
+ verifyContainingType(field);
795
+ return extensions.hasField(field);
796
+ } else {
797
+ return super.hasField(field);
798
+ }
799
+ }
800
+
801
+ @Override
802
+ public Object getField(final FieldDescriptor field) {
803
+ if (field.isExtension()) {
804
+ verifyContainingType(field);
805
+ final Object value = extensions.getField(field);
806
+ if (value == null) {
807
+ if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) {
808
+ // Lacking an ExtensionRegistry, we have no way to determine the
809
+ // extension's real type, so we return a DynamicMessage.
810
+ return DynamicMessage.getDefaultInstance(field.getMessageType());
811
+ } else {
812
+ return field.getDefaultValue();
813
+ }
814
+ } else {
815
+ return value;
816
+ }
817
+ } else {
818
+ return super.getField(field);
819
+ }
820
+ }
821
+
822
+ @Override
823
+ public int getRepeatedFieldCount(final FieldDescriptor field) {
824
+ if (field.isExtension()) {
825
+ verifyContainingType(field);
826
+ return extensions.getRepeatedFieldCount(field);
827
+ } else {
828
+ return super.getRepeatedFieldCount(field);
829
+ }
830
+ }
831
+
832
+ @Override
833
+ public Object getRepeatedField(final FieldDescriptor field,
834
+ final int index) {
835
+ if (field.isExtension()) {
836
+ verifyContainingType(field);
837
+ return extensions.getRepeatedField(field, index);
838
+ } else {
839
+ return super.getRepeatedField(field, index);
840
+ }
841
+ }
842
+
843
+ private void verifyContainingType(final FieldDescriptor field) {
844
+ if (field.getContainingType() != getDescriptorForType()) {
845
+ throw new IllegalArgumentException(
846
+ "FieldDescriptor does not match message type.");
847
+ }
848
+ }
849
+ }
850
+
851
+ /**
852
+ * Generated message builders for message types that contain extension ranges
853
+ * subclass this.
854
+ *
855
+ * <p>This class implements type-safe accessors for extensions. They
856
+ * implement all the same operations that you can do with normal fields --
857
+ * e.g. "get", "set", and "add" -- but for extensions. The extensions are
858
+ * identified using instances of the class {@link GeneratedExtension}; the
859
+ * protocol compiler generates a static instance of this class for every
860
+ * extension in its input. Through the magic of generics, all is made
861
+ * type-safe.
862
+ *
863
+ * <p>For example, imagine you have the {@code .proto} file:
864
+ *
865
+ * <pre>
866
+ * option java_class = "MyProto";
867
+ *
868
+ * message Foo {
869
+ * extensions 1000 to max;
870
+ * }
871
+ *
872
+ * extend Foo {
873
+ * optional int32 bar;
874
+ * }
875
+ * </pre>
876
+ *
877
+ * <p>Then you might write code like:
878
+ *
879
+ * <pre>
880
+ * MyProto.Foo foo =
881
+ * MyProto.Foo.newBuilder()
882
+ * .setExtension(MyProto.bar, 123)
883
+ * .build();
884
+ * </pre>
885
+ *
886
+ * <p>See also {@link ExtendableMessage}.
887
+ */
888
+ @SuppressWarnings("unchecked")
889
+ public abstract static class ExtendableBuilder<
890
+ MessageType extends ExtendableMessage,
891
+ BuilderType extends ExtendableBuilder>
892
+ extends Builder<BuilderType>
893
+ implements ExtendableMessageOrBuilder<MessageType> {
894
+
895
+ private FieldSet<FieldDescriptor> extensions = FieldSet.emptySet();
896
+
897
+ protected ExtendableBuilder() {}
898
+
899
+ protected ExtendableBuilder(
900
+ BuilderParent parent) {
901
+ super(parent);
902
+ }
903
+
904
+ // For immutable message conversion.
905
+ void internalSetExtensionSet(FieldSet<FieldDescriptor> extensions) {
906
+ this.extensions = extensions;
907
+ }
908
+
909
+ @Override
910
+ public BuilderType clear() {
911
+ extensions = FieldSet.emptySet();
912
+ return super.clear();
913
+ }
914
+
915
+ // This is implemented here only to work around an apparent bug in the
916
+ // Java compiler and/or build system. See bug #1898463. The mere presence
917
+ // of this dummy clone() implementation makes it go away.
918
+ @Override
919
+ public BuilderType clone() {
920
+ throw new UnsupportedOperationException(
921
+ "This is supposed to be overridden by subclasses.");
922
+ }
923
+
924
+ private void ensureExtensionsIsMutable() {
925
+ if (extensions.isImmutable()) {
926
+ extensions = extensions.clone();
927
+ }
928
+ }
929
+
930
+ private void verifyExtensionContainingType(
931
+ final Extension<MessageType, ?> extension) {
932
+ if (extension.getDescriptor().getContainingType() !=
933
+ getDescriptorForType()) {
934
+ // This can only happen if someone uses unchecked operations.
935
+ throw new IllegalArgumentException(
936
+ "Extension is for type \"" +
937
+ extension.getDescriptor().getContainingType().getFullName() +
938
+ "\" which does not match message type \"" +
939
+ getDescriptorForType().getFullName() + "\".");
940
+ }
941
+ }
942
+
943
+ /** Check if a singular extension is present. */
944
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
945
+ public final <Type> boolean hasExtension(
946
+ final Extension<MessageType, Type> extension) {
947
+ verifyExtensionContainingType(extension);
948
+ return extensions.hasField(extension.getDescriptor());
949
+ }
950
+
951
+ /** Get the number of elements in a repeated extension. */
952
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
953
+ public final <Type> int getExtensionCount(
954
+ final Extension<MessageType, List<Type>> extension) {
955
+ verifyExtensionContainingType(extension);
956
+ final FieldDescriptor descriptor = extension.getDescriptor();
957
+ return extensions.getRepeatedFieldCount(descriptor);
958
+ }
959
+
960
+ /** Get the value of an extension. */
961
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
962
+ public final <Type> Type getExtension(
963
+ final Extension<MessageType, Type> extension) {
964
+ verifyExtensionContainingType(extension);
965
+ FieldDescriptor descriptor = extension.getDescriptor();
966
+ final Object value = extensions.getField(descriptor);
967
+ if (value == null) {
968
+ if (descriptor.isRepeated()) {
969
+ return (Type) Collections.emptyList();
970
+ } else if (descriptor.getJavaType() ==
971
+ FieldDescriptor.JavaType.MESSAGE) {
972
+ return (Type) extension.getMessageDefaultInstance();
973
+ } else {
974
+ return (Type) extension.fromReflectionType(
975
+ descriptor.getDefaultValue());
976
+ }
977
+ } else {
978
+ return (Type) extension.fromReflectionType(value);
979
+ }
980
+ }
981
+
982
+ /** Get one element of a repeated extension. */
983
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
984
+ public final <Type> Type getExtension(
985
+ final Extension<MessageType, List<Type>> extension,
986
+ final int index) {
987
+ verifyExtensionContainingType(extension);
988
+ FieldDescriptor descriptor = extension.getDescriptor();
989
+ return (Type) extension.singularFromReflectionType(
990
+ extensions.getRepeatedField(descriptor, index));
991
+ }
992
+
993
+ /** Set the value of an extension. */
994
+ public final <Type> BuilderType setExtension(
995
+ final Extension<MessageType, Type> extension,
996
+ final Type value) {
997
+ verifyExtensionContainingType(extension);
998
+ ensureExtensionsIsMutable();
999
+ final FieldDescriptor descriptor = extension.getDescriptor();
1000
+ extensions.setField(descriptor, extension.toReflectionType(value));
1001
+ onChanged();
1002
+ return (BuilderType) this;
1003
+ }
1004
+
1005
+ /** Set the value of one element of a repeated extension. */
1006
+ public final <Type> BuilderType setExtension(
1007
+ final Extension<MessageType, List<Type>> extension,
1008
+ final int index, final Type value) {
1009
+ verifyExtensionContainingType(extension);
1010
+ ensureExtensionsIsMutable();
1011
+ final FieldDescriptor descriptor = extension.getDescriptor();
1012
+ extensions.setRepeatedField(
1013
+ descriptor, index,
1014
+ extension.singularToReflectionType(value));
1015
+ onChanged();
1016
+ return (BuilderType) this;
1017
+ }
1018
+
1019
+ /** Append a value to a repeated extension. */
1020
+ public final <Type> BuilderType addExtension(
1021
+ final Extension<MessageType, List<Type>> extension,
1022
+ final Type value) {
1023
+ verifyExtensionContainingType(extension);
1024
+ ensureExtensionsIsMutable();
1025
+ final FieldDescriptor descriptor = extension.getDescriptor();
1026
+ extensions.addRepeatedField(
1027
+ descriptor, extension.singularToReflectionType(value));
1028
+ onChanged();
1029
+ return (BuilderType) this;
1030
+ }
1031
+
1032
+ /** Clear an extension. */
1033
+ public final <Type> BuilderType clearExtension(
1034
+ final Extension<MessageType, ?> extension) {
1035
+ verifyExtensionContainingType(extension);
1036
+ ensureExtensionsIsMutable();
1037
+ extensions.clearField(extension.getDescriptor());
1038
+ onChanged();
1039
+ return (BuilderType) this;
1040
+ }
1041
+
1042
+ /** Called by subclasses to check if all extensions are initialized. */
1043
+ protected boolean extensionsAreInitialized() {
1044
+ return extensions.isInitialized();
1045
+ }
1046
+
1047
+ /**
1048
+ * Called by the build code path to create a copy of the extensions for
1049
+ * building the message.
1050
+ */
1051
+ private FieldSet<FieldDescriptor> buildExtensions() {
1052
+ extensions.makeImmutable();
1053
+ return extensions;
1054
+ }
1055
+
1056
+ @Override
1057
+ public boolean isInitialized() {
1058
+ return super.isInitialized() && extensionsAreInitialized();
1059
+ }
1060
+
1061
+ /**
1062
+ * Called by subclasses to parse an unknown field or an extension.
1063
+ * @return {@code true} unless the tag is an end-group tag.
1064
+ */
1065
+ @Override
1066
+ protected boolean parseUnknownField(
1067
+ final CodedInputStream input,
1068
+ final UnknownFieldSet.Builder unknownFields,
1069
+ final ExtensionRegistryLite extensionRegistry,
1070
+ final int tag) throws IOException {
1071
+ return MessageReflection.mergeFieldFrom(
1072
+ input, unknownFields, extensionRegistry, getDescriptorForType(),
1073
+ new MessageReflection.BuilderAdapter(this), tag);
1074
+ }
1075
+
1076
+ // ---------------------------------------------------------------
1077
+ // Reflection
1078
+
1079
+ @Override
1080
+ public Map<FieldDescriptor, Object> getAllFields() {
1081
+ final Map<FieldDescriptor, Object> result = super.getAllFieldsMutable();
1082
+ result.putAll(extensions.getAllFields());
1083
+ return Collections.unmodifiableMap(result);
1084
+ }
1085
+
1086
+ @Override
1087
+ public Object getField(final FieldDescriptor field) {
1088
+ if (field.isExtension()) {
1089
+ verifyContainingType(field);
1090
+ final Object value = extensions.getField(field);
1091
+ if (value == null) {
1092
+ if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) {
1093
+ // Lacking an ExtensionRegistry, we have no way to determine the
1094
+ // extension's real type, so we return a DynamicMessage.
1095
+ return DynamicMessage.getDefaultInstance(field.getMessageType());
1096
+ } else {
1097
+ return field.getDefaultValue();
1098
+ }
1099
+ } else {
1100
+ return value;
1101
+ }
1102
+ } else {
1103
+ return super.getField(field);
1104
+ }
1105
+ }
1106
+
1107
+ @Override
1108
+ public int getRepeatedFieldCount(final FieldDescriptor field) {
1109
+ if (field.isExtension()) {
1110
+ verifyContainingType(field);
1111
+ return extensions.getRepeatedFieldCount(field);
1112
+ } else {
1113
+ return super.getRepeatedFieldCount(field);
1114
+ }
1115
+ }
1116
+
1117
+ @Override
1118
+ public Object getRepeatedField(final FieldDescriptor field,
1119
+ final int index) {
1120
+ if (field.isExtension()) {
1121
+ verifyContainingType(field);
1122
+ return extensions.getRepeatedField(field, index);
1123
+ } else {
1124
+ return super.getRepeatedField(field, index);
1125
+ }
1126
+ }
1127
+
1128
+ @Override
1129
+ public boolean hasField(final FieldDescriptor field) {
1130
+ if (field.isExtension()) {
1131
+ verifyContainingType(field);
1132
+ return extensions.hasField(field);
1133
+ } else {
1134
+ return super.hasField(field);
1135
+ }
1136
+ }
1137
+
1138
+ @Override
1139
+ public BuilderType setField(final FieldDescriptor field,
1140
+ final Object value) {
1141
+ if (field.isExtension()) {
1142
+ verifyContainingType(field);
1143
+ ensureExtensionsIsMutable();
1144
+ extensions.setField(field, value);
1145
+ onChanged();
1146
+ return (BuilderType) this;
1147
+ } else {
1148
+ return super.setField(field, value);
1149
+ }
1150
+ }
1151
+
1152
+ @Override
1153
+ public BuilderType clearField(final FieldDescriptor field) {
1154
+ if (field.isExtension()) {
1155
+ verifyContainingType(field);
1156
+ ensureExtensionsIsMutable();
1157
+ extensions.clearField(field);
1158
+ onChanged();
1159
+ return (BuilderType) this;
1160
+ } else {
1161
+ return super.clearField(field);
1162
+ }
1163
+ }
1164
+
1165
+ @Override
1166
+ public BuilderType setRepeatedField(final FieldDescriptor field,
1167
+ final int index, final Object value) {
1168
+ if (field.isExtension()) {
1169
+ verifyContainingType(field);
1170
+ ensureExtensionsIsMutable();
1171
+ extensions.setRepeatedField(field, index, value);
1172
+ onChanged();
1173
+ return (BuilderType) this;
1174
+ } else {
1175
+ return super.setRepeatedField(field, index, value);
1176
+ }
1177
+ }
1178
+
1179
+ @Override
1180
+ public BuilderType addRepeatedField(final FieldDescriptor field,
1181
+ final Object value) {
1182
+ if (field.isExtension()) {
1183
+ verifyContainingType(field);
1184
+ ensureExtensionsIsMutable();
1185
+ extensions.addRepeatedField(field, value);
1186
+ onChanged();
1187
+ return (BuilderType) this;
1188
+ } else {
1189
+ return super.addRepeatedField(field, value);
1190
+ }
1191
+ }
1192
+
1193
+ protected final void mergeExtensionFields(final ExtendableMessage other) {
1194
+ ensureExtensionsIsMutable();
1195
+ extensions.mergeFrom(other.extensions);
1196
+ onChanged();
1197
+ }
1198
+
1199
+ private void verifyContainingType(final FieldDescriptor field) {
1200
+ if (field.getContainingType() != getDescriptorForType()) {
1201
+ throw new IllegalArgumentException(
1202
+ "FieldDescriptor does not match message type.");
1203
+ }
1204
+ }
1205
+ }
1206
+
1207
+ // -----------------------------------------------------------------
1208
+
1209
+ /**
1210
+ * Gets the descriptor for an extension. The implementation depends on whether
1211
+ * the extension is scoped in the top level of a file or scoped in a Message.
1212
+ */
1213
+ static interface ExtensionDescriptorRetriever {
1214
+ FieldDescriptor getDescriptor();
1215
+ }
1216
+
1217
+ /** For use by generated code only. */
1218
+ public static <ContainingType extends Message, Type>
1219
+ GeneratedExtension<ContainingType, Type>
1220
+ newMessageScopedGeneratedExtension(final Message scope,
1221
+ final int descriptorIndex,
1222
+ final Class singularType,
1223
+ final Message defaultInstance) {
1224
+ // For extensions scoped within a Message, we use the Message to resolve
1225
+ // the outer class's descriptor, from which the extension descriptor is
1226
+ // obtained.
1227
+ return new GeneratedExtension<ContainingType, Type>(
1228
+ new CachedDescriptorRetriever() {
1229
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
1230
+ public FieldDescriptor loadDescriptor() {
1231
+ return scope.getDescriptorForType().getExtensions()
1232
+ .get(descriptorIndex);
1233
+ }
1234
+ },
1235
+ singularType,
1236
+ defaultInstance,
1237
+ Extension.ExtensionType.IMMUTABLE);
1238
+ }
1239
+
1240
+ /** For use by generated code only. */
1241
+ public static <ContainingType extends Message, Type>
1242
+ GeneratedExtension<ContainingType, Type>
1243
+ newFileScopedGeneratedExtension(final Class singularType,
1244
+ final Message defaultInstance) {
1245
+ // For extensions scoped within a file, we rely on the outer class's
1246
+ // static initializer to call internalInit() on the extension when the
1247
+ // descriptor is available.
1248
+ return new GeneratedExtension<ContainingType, Type>(
1249
+ null, // ExtensionDescriptorRetriever is initialized in internalInit();
1250
+ singularType,
1251
+ defaultInstance,
1252
+ Extension.ExtensionType.IMMUTABLE);
1253
+ }
1254
+
1255
+ private abstract static class CachedDescriptorRetriever
1256
+ implements ExtensionDescriptorRetriever {
1257
+ private volatile FieldDescriptor descriptor;
1258
+ protected abstract FieldDescriptor loadDescriptor();
1259
+
1260
+ public FieldDescriptor getDescriptor() {
1261
+ if (descriptor == null) {
1262
+ synchronized (this) {
1263
+ if (descriptor == null) {
1264
+ descriptor = loadDescriptor();
1265
+ }
1266
+ }
1267
+ }
1268
+ return descriptor;
1269
+ }
1270
+ }
1271
+
1272
+ /**
1273
+ * Used in proto1 generated code only.
1274
+ *
1275
+ * After enabling bridge, we can define proto2 extensions (the extended type
1276
+ * is a proto2 mutable message) in a proto1 .proto file. For these extensions
1277
+ * we should generate proto2 GeneratedExtensions.
1278
+ */
1279
+ public static <ContainingType extends Message, Type>
1280
+ GeneratedExtension<ContainingType, Type>
1281
+ newMessageScopedGeneratedExtension(
1282
+ final Message scope, final String name,
1283
+ final Class singularType, final Message defaultInstance) {
1284
+ // For extensions scoped within a Message, we use the Message to resolve
1285
+ // the outer class's descriptor, from which the extension descriptor is
1286
+ // obtained.
1287
+ return new GeneratedExtension<ContainingType, Type>(
1288
+ new CachedDescriptorRetriever() {
1289
+ protected FieldDescriptor loadDescriptor() {
1290
+ return scope.getDescriptorForType().findFieldByName(name);
1291
+ }
1292
+ },
1293
+ singularType,
1294
+ defaultInstance,
1295
+ Extension.ExtensionType.MUTABLE);
1296
+ }
1297
+
1298
+ /**
1299
+ * Used in proto1 generated code only.
1300
+ *
1301
+ * After enabling bridge, we can define proto2 extensions (the extended type
1302
+ * is a proto2 mutable message) in a proto1 .proto file. For these extensions
1303
+ * we should generate proto2 GeneratedExtensions.
1304
+ */
1305
+ public static <ContainingType extends Message, Type>
1306
+ GeneratedExtension<ContainingType, Type>
1307
+ newFileScopedGeneratedExtension(
1308
+ final Class singularType, final Message defaultInstance,
1309
+ final String descriptorOuterClass, final String extensionName) {
1310
+ // For extensions scoped within a file, we load the descriptor outer
1311
+ // class and rely on it to get the FileDescriptor which then can be
1312
+ // used to obtain the extension's FieldDescriptor.
1313
+ return new GeneratedExtension<ContainingType, Type>(
1314
+ new CachedDescriptorRetriever() {
1315
+ protected FieldDescriptor loadDescriptor() {
1316
+ try {
1317
+ Class clazz =
1318
+ singularType.getClassLoader().loadClass(descriptorOuterClass);
1319
+ FileDescriptor file =
1320
+ (FileDescriptor) clazz.getField("descriptor").get(null);
1321
+ return file.findExtensionByName(extensionName);
1322
+ } catch (Exception e) {
1323
+ throw new RuntimeException(
1324
+ "Cannot load descriptors: " + descriptorOuterClass +
1325
+ " is not a valid descriptor class name", e);
1326
+ }
1327
+ }
1328
+ },
1329
+ singularType,
1330
+ defaultInstance,
1331
+ Extension.ExtensionType.MUTABLE);
1332
+ }
1333
+
1334
+ /**
1335
+ * Type used to represent generated extensions. The protocol compiler
1336
+ * generates a static singleton instance of this class for each extension.
1337
+ *
1338
+ * <p>For example, imagine you have the {@code .proto} file:
1339
+ *
1340
+ * <pre>
1341
+ * option java_class = "MyProto";
1342
+ *
1343
+ * message Foo {
1344
+ * extensions 1000 to max;
1345
+ * }
1346
+ *
1347
+ * extend Foo {
1348
+ * optional int32 bar;
1349
+ * }
1350
+ * </pre>
1351
+ *
1352
+ * <p>Then, {@code MyProto.Foo.bar} has type
1353
+ * {@code GeneratedExtension<MyProto.Foo, Integer>}.
1354
+ *
1355
+ * <p>In general, users should ignore the details of this type, and simply use
1356
+ * these static singletons as parameters to the extension accessors defined
1357
+ * in {@link ExtendableMessage} and {@link ExtendableBuilder}.
1358
+ */
1359
+ public static class GeneratedExtension<
1360
+ ContainingType extends Message, Type> extends
1361
+ Extension<ContainingType, Type> {
1362
+ // TODO(kenton): Find ways to avoid using Java reflection within this
1363
+ // class. Also try to avoid suppressing unchecked warnings.
1364
+
1365
+ // We can't always initialize the descriptor of a GeneratedExtension when
1366
+ // we first construct it due to initialization order difficulties (namely,
1367
+ // the descriptor may not have been constructed yet, since it is often
1368
+ // constructed by the initializer of a separate module).
1369
+ //
1370
+ // In the case of nested extensions, we initialize the
1371
+ // ExtensionDescriptorRetriever with an instance that uses the scoping
1372
+ // Message's default instance to retrieve the extension's descriptor.
1373
+ //
1374
+ // In the case of non-nested extensions, we initialize the
1375
+ // ExtensionDescriptorRetriever to null and rely on the outer class's static
1376
+ // initializer to call internalInit() after the descriptor has been parsed.
1377
+ GeneratedExtension(ExtensionDescriptorRetriever descriptorRetriever,
1378
+ Class singularType,
1379
+ Message messageDefaultInstance,
1380
+ ExtensionType extensionType) {
1381
+ if (Message.class.isAssignableFrom(singularType) &&
1382
+ !singularType.isInstance(messageDefaultInstance)) {
1383
+ throw new IllegalArgumentException(
1384
+ "Bad messageDefaultInstance for " + singularType.getName());
1385
+ }
1386
+ this.descriptorRetriever = descriptorRetriever;
1387
+ this.singularType = singularType;
1388
+ this.messageDefaultInstance = messageDefaultInstance;
1389
+
1390
+ if (ProtocolMessageEnum.class.isAssignableFrom(singularType)) {
1391
+ this.enumValueOf = getMethodOrDie(singularType, "valueOf",
1392
+ EnumValueDescriptor.class);
1393
+ this.enumGetValueDescriptor =
1394
+ getMethodOrDie(singularType, "getValueDescriptor");
1395
+ } else {
1396
+ this.enumValueOf = null;
1397
+ this.enumGetValueDescriptor = null;
1398
+ }
1399
+ this.extensionType = extensionType;
1400
+ }
1401
+
1402
+ /** For use by generated code only. */
1403
+ public void internalInit(final FieldDescriptor descriptor) {
1404
+ if (descriptorRetriever != null) {
1405
+ throw new IllegalStateException("Already initialized.");
1406
+ }
1407
+ descriptorRetriever = new ExtensionDescriptorRetriever() {
1408
+ //@Override (Java 1.6 override semantics, but we must support 1.5)
1409
+ public FieldDescriptor getDescriptor() {
1410
+ return descriptor;
1411
+ }
1412
+ };
1413
+ }
1414
+
1415
+ private ExtensionDescriptorRetriever descriptorRetriever;
1416
+ private final Class singularType;
1417
+ private final Message messageDefaultInstance;
1418
+ private final Method enumValueOf;
1419
+ private final Method enumGetValueDescriptor;
1420
+ private final ExtensionType extensionType;
1421
+
1422
+ public FieldDescriptor getDescriptor() {
1423
+ if (descriptorRetriever == null) {
1424
+ throw new IllegalStateException(
1425
+ "getDescriptor() called before internalInit()");
1426
+ }
1427
+ return descriptorRetriever.getDescriptor();
1428
+ }
1429
+
1430
+ /**
1431
+ * If the extension is an embedded message or group, returns the default
1432
+ * instance of the message.
1433
+ */
1434
+ public Message getMessageDefaultInstance() {
1435
+ return messageDefaultInstance;
1436
+ }
1437
+
1438
+ protected ExtensionType getExtensionType() {
1439
+ return extensionType;
1440
+ }
1441
+
1442
+ /**
1443
+ * Convert from the type used by the reflection accessors to the type used
1444
+ * by native accessors. E.g., for enums, the reflection accessors use
1445
+ * EnumValueDescriptors but the native accessors use the generated enum
1446
+ * type.
1447
+ */
1448
+ // @Override
1449
+ @SuppressWarnings("unchecked")
1450
+ protected Object fromReflectionType(final Object value) {
1451
+ FieldDescriptor descriptor = getDescriptor();
1452
+ if (descriptor.isRepeated()) {
1453
+ if (descriptor.getJavaType() == FieldDescriptor.JavaType.MESSAGE ||
1454
+ descriptor.getJavaType() == FieldDescriptor.JavaType.ENUM) {
1455
+ // Must convert the whole list.
1456
+ final List result = new ArrayList();
1457
+ for (final Object element : (List) value) {
1458
+ result.add(singularFromReflectionType(element));
1459
+ }
1460
+ return result;
1461
+ } else {
1462
+ return value;
1463
+ }
1464
+ } else {
1465
+ return singularFromReflectionType(value);
1466
+ }
1467
+ }
1468
+
1469
+ /**
1470
+ * Like {@link #fromReflectionType(Object)}, but if the type is a repeated
1471
+ * type, this converts a single element.
1472
+ */
1473
+ // @Override
1474
+ protected Object singularFromReflectionType(final Object value) {
1475
+ FieldDescriptor descriptor = getDescriptor();
1476
+ switch (descriptor.getJavaType()) {
1477
+ case MESSAGE:
1478
+ if (singularType.isInstance(value)) {
1479
+ return value;
1480
+ } else {
1481
+ return messageDefaultInstance.newBuilderForType()
1482
+ .mergeFrom((Message) value).build();
1483
+ }
1484
+ case ENUM:
1485
+ return invokeOrDie(enumValueOf, null, (EnumValueDescriptor) value);
1486
+ default:
1487
+ return value;
1488
+ }
1489
+ }
1490
+
1491
+ /**
1492
+ * Convert from the type used by the native accessors to the type used
1493
+ * by reflection accessors. E.g., for enums, the reflection accessors use
1494
+ * EnumValueDescriptors but the native accessors use the generated enum
1495
+ * type.
1496
+ */
1497
+ // @Override
1498
+ @SuppressWarnings("unchecked")
1499
+ protected Object toReflectionType(final Object value) {
1500
+ FieldDescriptor descriptor = getDescriptor();
1501
+ if (descriptor.isRepeated()) {
1502
+ if (descriptor.getJavaType() == FieldDescriptor.JavaType.ENUM) {
1503
+ // Must convert the whole list.
1504
+ final List result = new ArrayList();
1505
+ for (final Object element : (List) value) {
1506
+ result.add(singularToReflectionType(element));
1507
+ }
1508
+ return result;
1509
+ } else {
1510
+ return value;
1511
+ }
1512
+ } else {
1513
+ return singularToReflectionType(value);
1514
+ }
1515
+ }
1516
+
1517
+ /**
1518
+ * Like {@link #toReflectionType(Object)}, but if the type is a repeated
1519
+ * type, this converts a single element.
1520
+ */
1521
+ // @Override
1522
+ protected Object singularToReflectionType(final Object value) {
1523
+ FieldDescriptor descriptor = getDescriptor();
1524
+ switch (descriptor.getJavaType()) {
1525
+ case ENUM:
1526
+ return invokeOrDie(enumGetValueDescriptor, value);
1527
+ default:
1528
+ return value;
1529
+ }
1530
+ }
1531
+
1532
+ // @Override
1533
+ public int getNumber() {
1534
+ return getDescriptor().getNumber();
1535
+ }
1536
+
1537
+ // @Override
1538
+ public WireFormat.FieldType getLiteType() {
1539
+ return getDescriptor().getLiteType();
1540
+ }
1541
+
1542
+ // @Override
1543
+ public boolean isRepeated() {
1544
+ return getDescriptor().isRepeated();
1545
+ }
1546
+
1547
+ // @Override
1548
+ @SuppressWarnings("unchecked")
1549
+ public Type getDefaultValue() {
1550
+ if (isRepeated()) {
1551
+ return (Type) Collections.emptyList();
1552
+ }
1553
+ if (getDescriptor().getJavaType() == FieldDescriptor.JavaType.MESSAGE) {
1554
+ return (Type) messageDefaultInstance;
1555
+ }
1556
+ return (Type) singularFromReflectionType(
1557
+ getDescriptor().getDefaultValue());
1558
+ }
1559
+ }
1560
+
1561
+ // =================================================================
1562
+
1563
+ /** Calls Class.getMethod and throws a RuntimeException if it fails. */
1564
+ @SuppressWarnings("unchecked")
1565
+ private static Method getMethodOrDie(
1566
+ final Class clazz, final String name, final Class... params) {
1567
+ try {
1568
+ return clazz.getMethod(name, params);
1569
+ } catch (NoSuchMethodException e) {
1570
+ throw new RuntimeException(
1571
+ "Generated message class \"" + clazz.getName() +
1572
+ "\" missing method \"" + name + "\".", e);
1573
+ }
1574
+ }
1575
+
1576
+ /** Calls invoke and throws a RuntimeException if it fails. */
1577
+ private static Object invokeOrDie(
1578
+ final Method method, final Object object, final Object... params) {
1579
+ try {
1580
+ return method.invoke(object, params);
1581
+ } catch (IllegalAccessException e) {
1582
+ throw new RuntimeException(
1583
+ "Couldn't use Java reflection to implement protocol message " +
1584
+ "reflection.", e);
1585
+ } catch (InvocationTargetException e) {
1586
+ final Throwable cause = e.getCause();
1587
+ if (cause instanceof RuntimeException) {
1588
+ throw (RuntimeException) cause;
1589
+ } else if (cause instanceof Error) {
1590
+ throw (Error) cause;
1591
+ } else {
1592
+ throw new RuntimeException(
1593
+ "Unexpected exception thrown by generated accessor method.", cause);
1594
+ }
1595
+ }
1596
+ }
1597
+
1598
+ /**
1599
+ * Users should ignore this class. This class provides the implementation
1600
+ * with access to the fields of a message object using Java reflection.
1601
+ */
1602
+ public static final class FieldAccessorTable {
1603
+
1604
+ /**
1605
+ * Construct a FieldAccessorTable for a particular message class. Only
1606
+ * one FieldAccessorTable should ever be constructed per class.
1607
+ *
1608
+ * @param descriptor The type's descriptor.
1609
+ * @param camelCaseNames The camelcase names of all fields in the message.
1610
+ * These are used to derive the accessor method names.
1611
+ * @param messageClass The message type.
1612
+ * @param builderClass The builder type.
1613
+ */
1614
+ public FieldAccessorTable(
1615
+ final Descriptor descriptor,
1616
+ final String[] camelCaseNames,
1617
+ final Class<? extends GeneratedMessage> messageClass,
1618
+ final Class<? extends Builder> builderClass) {
1619
+ this(descriptor, camelCaseNames);
1620
+ ensureFieldAccessorsInitialized(messageClass, builderClass);
1621
+ }
1622
+
1623
+ /**
1624
+ * Construct a FieldAccessorTable for a particular message class without
1625
+ * initializing FieldAccessors.
1626
+ */
1627
+ public FieldAccessorTable(
1628
+ final Descriptor descriptor,
1629
+ final String[] camelCaseNames) {
1630
+ this.descriptor = descriptor;
1631
+ this.camelCaseNames = camelCaseNames;
1632
+ fields = new FieldAccessor[descriptor.getFields().size()];
1633
+ oneofs = new OneofAccessor[descriptor.getOneofs().size()];
1634
+ initialized = false;
1635
+ }
1636
+
1637
+ /**
1638
+ * Ensures the field accessors are initialized. This method is thread-safe.
1639
+ *
1640
+ * @param messageClass The message type.
1641
+ * @param builderClass The builder type.
1642
+ * @return this
1643
+ */
1644
+ public FieldAccessorTable ensureFieldAccessorsInitialized(
1645
+ Class<? extends GeneratedMessage> messageClass,
1646
+ Class<? extends Builder> builderClass) {
1647
+ if (initialized) { return this; }
1648
+ synchronized (this) {
1649
+ if (initialized) { return this; }
1650
+ int fieldsSize = fields.length;
1651
+ for (int i = 0; i < fieldsSize; i++) {
1652
+ FieldDescriptor field = descriptor.getFields().get(i);
1653
+ String containingOneofCamelCaseName = null;
1654
+ if (field.getContainingOneof() != null) {
1655
+ containingOneofCamelCaseName =
1656
+ camelCaseNames[fieldsSize + field.getContainingOneof().getIndex()];
1657
+ }
1658
+ if (field.isRepeated()) {
1659
+ if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) {
1660
+ fields[i] = new RepeatedMessageFieldAccessor(
1661
+ field, camelCaseNames[i], messageClass, builderClass);
1662
+ } else if (field.getJavaType() == FieldDescriptor.JavaType.ENUM) {
1663
+ fields[i] = new RepeatedEnumFieldAccessor(
1664
+ field, camelCaseNames[i], messageClass, builderClass);
1665
+ } else {
1666
+ fields[i] = new RepeatedFieldAccessor(
1667
+ field, camelCaseNames[i], messageClass, builderClass);
1668
+ }
1669
+ } else {
1670
+ if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) {
1671
+ fields[i] = new SingularMessageFieldAccessor(
1672
+ field, camelCaseNames[i], messageClass, builderClass,
1673
+ containingOneofCamelCaseName);
1674
+ } else if (field.getJavaType() == FieldDescriptor.JavaType.ENUM) {
1675
+ fields[i] = new SingularEnumFieldAccessor(
1676
+ field, camelCaseNames[i], messageClass, builderClass,
1677
+ containingOneofCamelCaseName);
1678
+ } else {
1679
+ fields[i] = new SingularFieldAccessor(
1680
+ field, camelCaseNames[i], messageClass, builderClass,
1681
+ containingOneofCamelCaseName);
1682
+ }
1683
+ }
1684
+ }
1685
+
1686
+ int oneofsSize = oneofs.length;
1687
+ for (int i = 0; i < oneofsSize; i++) {
1688
+ oneofs[i] = new OneofAccessor(
1689
+ descriptor, camelCaseNames[i + fieldsSize],
1690
+ messageClass, builderClass);
1691
+ }
1692
+ initialized = true;
1693
+ camelCaseNames = null;
1694
+ return this;
1695
+ }
1696
+ }
1697
+
1698
+ private final Descriptor descriptor;
1699
+ private final FieldAccessor[] fields;
1700
+ private String[] camelCaseNames;
1701
+ private final OneofAccessor[] oneofs;
1702
+ private volatile boolean initialized;
1703
+
1704
+ /** Get the FieldAccessor for a particular field. */
1705
+ private FieldAccessor getField(final FieldDescriptor field) {
1706
+ if (field.getContainingType() != descriptor) {
1707
+ throw new IllegalArgumentException(
1708
+ "FieldDescriptor does not match message type.");
1709
+ } else if (field.isExtension()) {
1710
+ // If this type had extensions, it would subclass ExtendableMessage,
1711
+ // which overrides the reflection interface to handle extensions.
1712
+ throw new IllegalArgumentException(
1713
+ "This type does not have extensions.");
1714
+ }
1715
+ return fields[field.getIndex()];
1716
+ }
1717
+
1718
+ /** Get the OneofAccessor for a particular oneof. */
1719
+ private OneofAccessor getOneof(final OneofDescriptor oneof) {
1720
+ if (oneof.getContainingType() != descriptor) {
1721
+ throw new IllegalArgumentException(
1722
+ "OneofDescriptor does not match message type.");
1723
+ }
1724
+ return oneofs[oneof.getIndex()];
1725
+ }
1726
+
1727
+ /**
1728
+ * Abstract interface that provides access to a single field. This is
1729
+ * implemented differently depending on the field type and cardinality.
1730
+ */
1731
+ private interface FieldAccessor {
1732
+ Object get(GeneratedMessage message);
1733
+ Object get(GeneratedMessage.Builder builder);
1734
+ void set(Builder builder, Object value);
1735
+ Object getRepeated(GeneratedMessage message, int index);
1736
+ Object getRepeated(GeneratedMessage.Builder builder, int index);
1737
+ void setRepeated(Builder builder,
1738
+ int index, Object value);
1739
+ void addRepeated(Builder builder, Object value);
1740
+ boolean has(GeneratedMessage message);
1741
+ boolean has(GeneratedMessage.Builder builder);
1742
+ int getRepeatedCount(GeneratedMessage message);
1743
+ int getRepeatedCount(GeneratedMessage.Builder builder);
1744
+ void clear(Builder builder);
1745
+ Message.Builder newBuilder();
1746
+ Message.Builder getBuilder(GeneratedMessage.Builder builder);
1747
+ }
1748
+
1749
+ /** OneofAccessor provides access to a single oneof. */
1750
+ private static class OneofAccessor {
1751
+ OneofAccessor(
1752
+ final Descriptor descriptor, final String camelCaseName,
1753
+ final Class<? extends GeneratedMessage> messageClass,
1754
+ final Class<? extends Builder> builderClass) {
1755
+ this.descriptor = descriptor;
1756
+ caseMethod =
1757
+ getMethodOrDie(messageClass, "get" + camelCaseName + "Case");
1758
+ caseMethodBuilder =
1759
+ getMethodOrDie(builderClass, "get" + camelCaseName + "Case");
1760
+ clearMethod = getMethodOrDie(builderClass, "clear" + camelCaseName);
1761
+ }
1762
+
1763
+ private final Descriptor descriptor;
1764
+ private final Method caseMethod;
1765
+ private final Method caseMethodBuilder;
1766
+ private final Method clearMethod;
1767
+
1768
+ public boolean has(final GeneratedMessage message) {
1769
+ if (((Internal.EnumLite) invokeOrDie(caseMethod, message)).getNumber() == 0) {
1770
+ return false;
1771
+ }
1772
+ return true;
1773
+ }
1774
+
1775
+ public boolean has(GeneratedMessage.Builder builder) {
1776
+ if (((Internal.EnumLite) invokeOrDie(caseMethodBuilder, builder)).getNumber() == 0) {
1777
+ return false;
1778
+ }
1779
+ return true;
1780
+ }
1781
+
1782
+ public FieldDescriptor get(final GeneratedMessage message) {
1783
+ int fieldNumber = ((Internal.EnumLite) invokeOrDie(caseMethod, message)).getNumber();
1784
+ if (fieldNumber > 0) {
1785
+ return descriptor.findFieldByNumber(fieldNumber);
1786
+ }
1787
+ return null;
1788
+ }
1789
+
1790
+ public FieldDescriptor get(GeneratedMessage.Builder builder) {
1791
+ int fieldNumber = ((Internal.EnumLite) invokeOrDie(caseMethodBuilder, builder)).getNumber();
1792
+ if (fieldNumber > 0) {
1793
+ return descriptor.findFieldByNumber(fieldNumber);
1794
+ }
1795
+ return null;
1796
+ }
1797
+
1798
+ public void clear(final Builder builder) {
1799
+ invokeOrDie(clearMethod, builder);
1800
+ }
1801
+ }
1802
+
1803
+ private static boolean supportFieldPresence(FileDescriptor file) {
1804
+ return true;
1805
+ }
1806
+
1807
+ // ---------------------------------------------------------------
1808
+
1809
+ private static class SingularFieldAccessor implements FieldAccessor {
1810
+ SingularFieldAccessor(
1811
+ final FieldDescriptor descriptor, final String camelCaseName,
1812
+ final Class<? extends GeneratedMessage> messageClass,
1813
+ final Class<? extends Builder> builderClass,
1814
+ final String containingOneofCamelCaseName) {
1815
+ field = descriptor;
1816
+ isOneofField = descriptor.getContainingOneof() != null;
1817
+ hasHasMethod = supportFieldPresence(descriptor.getFile())
1818
+ || (!isOneofField && descriptor.getJavaType() == FieldDescriptor.JavaType.MESSAGE);
1819
+ getMethod = getMethodOrDie(messageClass, "get" + camelCaseName);
1820
+ getMethodBuilder = getMethodOrDie(builderClass, "get" + camelCaseName);
1821
+ type = getMethod.getReturnType();
1822
+ setMethod = getMethodOrDie(builderClass, "set" + camelCaseName, type);
1823
+ hasMethod =
1824
+ hasHasMethod ? getMethodOrDie(messageClass, "has" + camelCaseName) : null;
1825
+ hasMethodBuilder =
1826
+ hasHasMethod ? getMethodOrDie(builderClass, "has" + camelCaseName) : null;
1827
+ clearMethod = getMethodOrDie(builderClass, "clear" + camelCaseName);
1828
+ caseMethod = isOneofField ? getMethodOrDie(
1829
+ messageClass, "get" + containingOneofCamelCaseName + "Case") : null;
1830
+ caseMethodBuilder = isOneofField ? getMethodOrDie(
1831
+ builderClass, "get" + containingOneofCamelCaseName + "Case") : null;
1832
+ }
1833
+
1834
+ // Note: We use Java reflection to call public methods rather than
1835
+ // access private fields directly as this avoids runtime security
1836
+ // checks.
1837
+ protected final Class<?> type;
1838
+ protected final Method getMethod;
1839
+ protected final Method getMethodBuilder;
1840
+ protected final Method setMethod;
1841
+ protected final Method hasMethod;
1842
+ protected final Method hasMethodBuilder;
1843
+ protected final Method clearMethod;
1844
+ protected final Method caseMethod;
1845
+ protected final Method caseMethodBuilder;
1846
+ protected final FieldDescriptor field;
1847
+ protected final boolean isOneofField;
1848
+ protected final boolean hasHasMethod;
1849
+
1850
+ private int getOneofFieldNumber(final GeneratedMessage message) {
1851
+ return ((Internal.EnumLite) invokeOrDie(caseMethod, message)).getNumber();
1852
+ }
1853
+
1854
+ private int getOneofFieldNumber(final GeneratedMessage.Builder builder) {
1855
+ return ((Internal.EnumLite) invokeOrDie(caseMethodBuilder, builder)).getNumber();
1856
+ }
1857
+
1858
+ public Object get(final GeneratedMessage message) {
1859
+ return invokeOrDie(getMethod, message);
1860
+ }
1861
+ public Object get(GeneratedMessage.Builder builder) {
1862
+ return invokeOrDie(getMethodBuilder, builder);
1863
+ }
1864
+ public void set(final Builder builder, final Object value) {
1865
+ invokeOrDie(setMethod, builder, value);
1866
+ }
1867
+ public Object getRepeated(final GeneratedMessage message,
1868
+ final int index) {
1869
+ throw new UnsupportedOperationException(
1870
+ "getRepeatedField() called on a singular field.");
1871
+ }
1872
+ public Object getRepeated(GeneratedMessage.Builder builder, int index) {
1873
+ throw new UnsupportedOperationException(
1874
+ "getRepeatedField() called on a singular field.");
1875
+ }
1876
+ public void setRepeated(final Builder builder,
1877
+ final int index, final Object value) {
1878
+ throw new UnsupportedOperationException(
1879
+ "setRepeatedField() called on a singular field.");
1880
+ }
1881
+ public void addRepeated(final Builder builder, final Object value) {
1882
+ throw new UnsupportedOperationException(
1883
+ "addRepeatedField() called on a singular field.");
1884
+ }
1885
+ public boolean has(final GeneratedMessage message) {
1886
+ if (!hasHasMethod) {
1887
+ if (isOneofField) {
1888
+ return getOneofFieldNumber(message) == field.getNumber();
1889
+ }
1890
+ return !get(message).equals(field.getDefaultValue());
1891
+ }
1892
+ return (Boolean) invokeOrDie(hasMethod, message);
1893
+ }
1894
+ public boolean has(GeneratedMessage.Builder builder) {
1895
+ if (!hasHasMethod) {
1896
+ if (isOneofField) {
1897
+ return getOneofFieldNumber(builder) == field.getNumber();
1898
+ }
1899
+ return !get(builder).equals(field.getDefaultValue());
1900
+ }
1901
+ return (Boolean) invokeOrDie(hasMethodBuilder, builder);
1902
+ }
1903
+ public int getRepeatedCount(final GeneratedMessage message) {
1904
+ throw new UnsupportedOperationException(
1905
+ "getRepeatedFieldSize() called on a singular field.");
1906
+ }
1907
+ public int getRepeatedCount(GeneratedMessage.Builder builder) {
1908
+ throw new UnsupportedOperationException(
1909
+ "getRepeatedFieldSize() called on a singular field.");
1910
+ }
1911
+ public void clear(final Builder builder) {
1912
+ invokeOrDie(clearMethod, builder);
1913
+ }
1914
+ public Message.Builder newBuilder() {
1915
+ throw new UnsupportedOperationException(
1916
+ "newBuilderForField() called on a non-Message type.");
1917
+ }
1918
+ public Message.Builder getBuilder(GeneratedMessage.Builder builder) {
1919
+ throw new UnsupportedOperationException(
1920
+ "getFieldBuilder() called on a non-Message type.");
1921
+ }
1922
+ }
1923
+
1924
+ private static class RepeatedFieldAccessor implements FieldAccessor {
1925
+ protected final Class type;
1926
+ protected final Method getMethod;
1927
+ protected final Method getMethodBuilder;
1928
+ protected final Method getRepeatedMethod;
1929
+ protected final Method getRepeatedMethodBuilder;
1930
+ protected final Method setRepeatedMethod;
1931
+ protected final Method addRepeatedMethod;
1932
+ protected final Method getCountMethod;
1933
+ protected final Method getCountMethodBuilder;
1934
+ protected final Method clearMethod;
1935
+
1936
+ RepeatedFieldAccessor(
1937
+ final FieldDescriptor descriptor, final String camelCaseName,
1938
+ final Class<? extends GeneratedMessage> messageClass,
1939
+ final Class<? extends Builder> builderClass) {
1940
+ getMethod = getMethodOrDie(messageClass,
1941
+ "get" + camelCaseName + "List");
1942
+ getMethodBuilder = getMethodOrDie(builderClass,
1943
+ "get" + camelCaseName + "List");
1944
+ getRepeatedMethod =
1945
+ getMethodOrDie(messageClass, "get" + camelCaseName, Integer.TYPE);
1946
+ getRepeatedMethodBuilder =
1947
+ getMethodOrDie(builderClass, "get" + camelCaseName, Integer.TYPE);
1948
+ type = getRepeatedMethod.getReturnType();
1949
+ setRepeatedMethod =
1950
+ getMethodOrDie(builderClass, "set" + camelCaseName,
1951
+ Integer.TYPE, type);
1952
+ addRepeatedMethod =
1953
+ getMethodOrDie(builderClass, "add" + camelCaseName, type);
1954
+ getCountMethod =
1955
+ getMethodOrDie(messageClass, "get" + camelCaseName + "Count");
1956
+ getCountMethodBuilder =
1957
+ getMethodOrDie(builderClass, "get" + camelCaseName + "Count");
1958
+
1959
+ clearMethod = getMethodOrDie(builderClass, "clear" + camelCaseName);
1960
+ }
1961
+
1962
+ public Object get(final GeneratedMessage message) {
1963
+ return invokeOrDie(getMethod, message);
1964
+ }
1965
+ public Object get(GeneratedMessage.Builder builder) {
1966
+ return invokeOrDie(getMethodBuilder, builder);
1967
+ }
1968
+ public void set(final Builder builder, final Object value) {
1969
+ // Add all the elements individually. This serves two purposes:
1970
+ // 1) Verifies that each element has the correct type.
1971
+ // 2) Insures that the caller cannot modify the list later on and
1972
+ // have the modifications be reflected in the message.
1973
+ clear(builder);
1974
+ for (final Object element : (List<?>) value) {
1975
+ addRepeated(builder, element);
1976
+ }
1977
+ }
1978
+ public Object getRepeated(final GeneratedMessage message,
1979
+ final int index) {
1980
+ return invokeOrDie(getRepeatedMethod, message, index);
1981
+ }
1982
+ public Object getRepeated(GeneratedMessage.Builder builder, int index) {
1983
+ return invokeOrDie(getRepeatedMethodBuilder, builder, index);
1984
+ }
1985
+ public void setRepeated(final Builder builder,
1986
+ final int index, final Object value) {
1987
+ invokeOrDie(setRepeatedMethod, builder, index, value);
1988
+ }
1989
+ public void addRepeated(final Builder builder, final Object value) {
1990
+ invokeOrDie(addRepeatedMethod, builder, value);
1991
+ }
1992
+ public boolean has(final GeneratedMessage message) {
1993
+ throw new UnsupportedOperationException(
1994
+ "hasField() called on a repeated field.");
1995
+ }
1996
+ public boolean has(GeneratedMessage.Builder builder) {
1997
+ throw new UnsupportedOperationException(
1998
+ "hasField() called on a repeated field.");
1999
+ }
2000
+ public int getRepeatedCount(final GeneratedMessage message) {
2001
+ return (Integer) invokeOrDie(getCountMethod, message);
2002
+ }
2003
+ public int getRepeatedCount(GeneratedMessage.Builder builder) {
2004
+ return (Integer) invokeOrDie(getCountMethodBuilder, builder);
2005
+ }
2006
+ public void clear(final Builder builder) {
2007
+ invokeOrDie(clearMethod, builder);
2008
+ }
2009
+ public Message.Builder newBuilder() {
2010
+ throw new UnsupportedOperationException(
2011
+ "newBuilderForField() called on a non-Message type.");
2012
+ }
2013
+ public Message.Builder getBuilder(GeneratedMessage.Builder builder) {
2014
+ throw new UnsupportedOperationException(
2015
+ "getFieldBuilder() called on a non-Message type.");
2016
+ }
2017
+ }
2018
+
2019
+ // ---------------------------------------------------------------
2020
+
2021
+ private static final class SingularEnumFieldAccessor
2022
+ extends SingularFieldAccessor {
2023
+ SingularEnumFieldAccessor(
2024
+ final FieldDescriptor descriptor, final String camelCaseName,
2025
+ final Class<? extends GeneratedMessage> messageClass,
2026
+ final Class<? extends Builder> builderClass,
2027
+ final String containingOneofCamelCaseName) {
2028
+ super(descriptor, camelCaseName, messageClass, builderClass, containingOneofCamelCaseName);
2029
+
2030
+ valueOfMethod = getMethodOrDie(type, "valueOf",
2031
+ EnumValueDescriptor.class);
2032
+ getValueDescriptorMethod =
2033
+ getMethodOrDie(type, "getValueDescriptor");
2034
+ }
2035
+
2036
+ private Method valueOfMethod;
2037
+ private Method getValueDescriptorMethod;
2038
+
2039
+ @Override
2040
+ public Object get(final GeneratedMessage message) {
2041
+ return invokeOrDie(getValueDescriptorMethod, super.get(message));
2042
+ }
2043
+
2044
+ @Override
2045
+ public Object get(final GeneratedMessage.Builder builder) {
2046
+ return invokeOrDie(getValueDescriptorMethod, super.get(builder));
2047
+ }
2048
+
2049
+ @Override
2050
+ public void set(final Builder builder, final Object value) {
2051
+ super.set(builder, invokeOrDie(valueOfMethod, null, value));
2052
+ }
2053
+ }
2054
+
2055
+ private static final class RepeatedEnumFieldAccessor
2056
+ extends RepeatedFieldAccessor {
2057
+ RepeatedEnumFieldAccessor(
2058
+ final FieldDescriptor descriptor, final String camelCaseName,
2059
+ final Class<? extends GeneratedMessage> messageClass,
2060
+ final Class<? extends Builder> builderClass) {
2061
+ super(descriptor, camelCaseName, messageClass, builderClass);
2062
+
2063
+ valueOfMethod = getMethodOrDie(type, "valueOf",
2064
+ EnumValueDescriptor.class);
2065
+ getValueDescriptorMethod =
2066
+ getMethodOrDie(type, "getValueDescriptor");
2067
+ }
2068
+
2069
+ private final Method valueOfMethod;
2070
+ private final Method getValueDescriptorMethod;
2071
+
2072
+ @Override
2073
+ @SuppressWarnings("unchecked")
2074
+ public Object get(final GeneratedMessage message) {
2075
+ final List newList = new ArrayList();
2076
+ for (final Object element : (List) super.get(message)) {
2077
+ newList.add(invokeOrDie(getValueDescriptorMethod, element));
2078
+ }
2079
+ return Collections.unmodifiableList(newList);
2080
+ }
2081
+
2082
+ @Override
2083
+ @SuppressWarnings("unchecked")
2084
+ public Object get(final GeneratedMessage.Builder builder) {
2085
+ final List newList = new ArrayList();
2086
+ for (final Object element : (List) super.get(builder)) {
2087
+ newList.add(invokeOrDie(getValueDescriptorMethod, element));
2088
+ }
2089
+ return Collections.unmodifiableList(newList);
2090
+ }
2091
+
2092
+ @Override
2093
+ public Object getRepeated(final GeneratedMessage message,
2094
+ final int index) {
2095
+ return invokeOrDie(getValueDescriptorMethod,
2096
+ super.getRepeated(message, index));
2097
+ }
2098
+ @Override
2099
+ public Object getRepeated(final GeneratedMessage.Builder builder,
2100
+ final int index) {
2101
+ return invokeOrDie(getValueDescriptorMethod,
2102
+ super.getRepeated(builder, index));
2103
+ }
2104
+ @Override
2105
+ public void setRepeated(final Builder builder,
2106
+ final int index, final Object value) {
2107
+ super.setRepeated(builder, index, invokeOrDie(valueOfMethod, null,
2108
+ value));
2109
+ }
2110
+ @Override
2111
+ public void addRepeated(final Builder builder, final Object value) {
2112
+ super.addRepeated(builder, invokeOrDie(valueOfMethod, null, value));
2113
+ }
2114
+ }
2115
+
2116
+ // ---------------------------------------------------------------
2117
+
2118
+ private static final class SingularMessageFieldAccessor
2119
+ extends SingularFieldAccessor {
2120
+ SingularMessageFieldAccessor(
2121
+ final FieldDescriptor descriptor, final String camelCaseName,
2122
+ final Class<? extends GeneratedMessage> messageClass,
2123
+ final Class<? extends Builder> builderClass,
2124
+ final String containingOneofCamelCaseName) {
2125
+ super(descriptor, camelCaseName, messageClass, builderClass, containingOneofCamelCaseName);
2126
+
2127
+ newBuilderMethod = getMethodOrDie(type, "newBuilder");
2128
+ getBuilderMethodBuilder =
2129
+ getMethodOrDie(builderClass, "get" + camelCaseName + "Builder");
2130
+ }
2131
+
2132
+ private final Method newBuilderMethod;
2133
+ private final Method getBuilderMethodBuilder;
2134
+
2135
+ private Object coerceType(final Object value) {
2136
+ if (type.isInstance(value)) {
2137
+ return value;
2138
+ } else {
2139
+ // The value is not the exact right message type. However, if it
2140
+ // is an alternative implementation of the same type -- e.g. a
2141
+ // DynamicMessage -- we should accept it. In this case we can make
2142
+ // a copy of the message.
2143
+ return ((Message.Builder) invokeOrDie(newBuilderMethod, null))
2144
+ .mergeFrom((Message) value).buildPartial();
2145
+ }
2146
+ }
2147
+
2148
+ @Override
2149
+ public void set(final Builder builder, final Object value) {
2150
+ super.set(builder, coerceType(value));
2151
+ }
2152
+ @Override
2153
+ public Message.Builder newBuilder() {
2154
+ return (Message.Builder) invokeOrDie(newBuilderMethod, null);
2155
+ }
2156
+ @Override
2157
+ public Message.Builder getBuilder(GeneratedMessage.Builder builder) {
2158
+ return (Message.Builder) invokeOrDie(getBuilderMethodBuilder, builder);
2159
+ }
2160
+ }
2161
+
2162
+ private static final class RepeatedMessageFieldAccessor
2163
+ extends RepeatedFieldAccessor {
2164
+ RepeatedMessageFieldAccessor(
2165
+ final FieldDescriptor descriptor, final String camelCaseName,
2166
+ final Class<? extends GeneratedMessage> messageClass,
2167
+ final Class<? extends Builder> builderClass) {
2168
+ super(descriptor, camelCaseName, messageClass, builderClass);
2169
+
2170
+ newBuilderMethod = getMethodOrDie(type, "newBuilder");
2171
+ }
2172
+
2173
+ private final Method newBuilderMethod;
2174
+
2175
+ private Object coerceType(final Object value) {
2176
+ if (type.isInstance(value)) {
2177
+ return value;
2178
+ } else {
2179
+ // The value is not the exact right message type. However, if it
2180
+ // is an alternative implementation of the same type -- e.g. a
2181
+ // DynamicMessage -- we should accept it. In this case we can make
2182
+ // a copy of the message.
2183
+ return ((Message.Builder) invokeOrDie(newBuilderMethod, null))
2184
+ .mergeFrom((Message) value).build();
2185
+ }
2186
+ }
2187
+
2188
+ @Override
2189
+ public void setRepeated(final Builder builder,
2190
+ final int index, final Object value) {
2191
+ super.setRepeated(builder, index, coerceType(value));
2192
+ }
2193
+ @Override
2194
+ public void addRepeated(final Builder builder, final Object value) {
2195
+ super.addRepeated(builder, coerceType(value));
2196
+ }
2197
+ @Override
2198
+ public Message.Builder newBuilder() {
2199
+ return (Message.Builder) invokeOrDie(newBuilderMethod, null);
2200
+ }
2201
+ }
2202
+ }
2203
+
2204
+ /**
2205
+ * Replaces this object in the output stream with a serialized form.
2206
+ * Part of Java's serialization magic. Generated sub-classes must override
2207
+ * this method by calling {@code return super.writeReplace();}
2208
+ * @return a SerializedForm of this message
2209
+ */
2210
+ protected Object writeReplace() throws ObjectStreamException {
2211
+ return new GeneratedMessageLite.SerializedForm(this);
2212
+ }
2213
+ }