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.
- checksums.yaml +4 -4
- data/ext/protoc/Makefile.in +10 -13
- data/ext/protoc/extconf.rb +0 -1
- data/ext/protoc/protobuf/CHANGES.txt +593 -0
- data/ext/protoc/protobuf/CONTRIBUTORS.txt +93 -0
- data/ext/protoc/protobuf/INSTALL.txt +237 -0
- data/ext/protoc/protobuf/LICENSE +33 -0
- data/ext/protoc/protobuf/Makefile.am +267 -0
- data/ext/protoc/protobuf/README.md +167 -0
- data/ext/protoc/protobuf/autogen.sh +41 -0
- data/ext/protoc/protobuf/benchmarks/ProtoBench.java +203 -0
- data/ext/protoc/protobuf/benchmarks/google_message1.dat +0 -0
- data/ext/protoc/protobuf/benchmarks/google_message2.dat +0 -0
- data/ext/protoc/protobuf/benchmarks/google_size.proto +136 -0
- data/ext/protoc/protobuf/benchmarks/google_speed.proto +136 -0
- data/ext/protoc/protobuf/benchmarks/readme.txt +50 -0
- data/ext/protoc/protobuf/configure.ac +159 -0
- data/ext/protoc/protobuf/editors/README.txt +5 -0
- data/ext/protoc/protobuf/editors/proto.vim +105 -0
- data/ext/protoc/protobuf/editors/protobuf-mode.el +220 -0
- data/ext/protoc/protobuf/examples/AddPerson.java +95 -0
- data/ext/protoc/protobuf/examples/ListPeople.java +50 -0
- data/ext/protoc/protobuf/examples/Makefile +58 -0
- data/ext/protoc/protobuf/examples/README.txt +29 -0
- data/ext/protoc/protobuf/examples/add_person.cc +95 -0
- data/ext/protoc/protobuf/examples/add_person.py +58 -0
- data/ext/protoc/protobuf/examples/addressbook.proto +30 -0
- data/ext/protoc/protobuf/examples/list_people.cc +68 -0
- data/ext/protoc/protobuf/examples/list_people.py +38 -0
- data/ext/protoc/protobuf/generate_descriptor_proto.sh +33 -0
- data/ext/protoc/protobuf/java/README.txt +96 -0
- data/ext/protoc/protobuf/java/pom.xml +217 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessage.java +466 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessageLite.java +355 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractParser.java +253 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingRpcChannel.java +51 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingService.java +64 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BoundedByteString.java +163 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ByteString.java +1022 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedInputStream.java +1311 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedOutputStream.java +1297 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Descriptors.java +2238 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/DynamicMessage.java +622 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Extension.java +96 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistry.java +392 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistryLite.java +185 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/FieldSet.java +907 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessage.java +2213 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessageLite.java +949 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Internal.java +391 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java +122 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyField.java +154 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyFieldLite.java +176 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringArrayList.java +367 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringList.java +163 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LiteralByteString.java +362 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Message.java +244 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLite.java +320 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java +60 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageOrBuilder.java +143 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageReflection.java +931 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Parser.java +261 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolMessageEnum.java +58 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolStringList.java +48 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java +696 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RopeByteString.java +957 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcCallback.java +47 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcChannel.java +71 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcController.java +118 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcUtil.java +134 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Service.java +117 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ServiceException.java +52 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SingleFieldBuilder.java +241 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SmallSortedMap.java +618 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/TextFormat.java +1984 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UninitializedMessageException.java +99 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnknownFieldSet.java +995 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java +205 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Utf8.java +349 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/WireFormat.java +163 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/AbstractMessageTest.java +527 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/BoundedByteStringTest.java +68 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ByteStringTest.java +759 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CheckUtf8Test.java +141 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java +769 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java +401 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java +80 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DescriptorsTest.java +735 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DynamicMessageTest.java +326 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java +48 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/GeneratedMessageTest.java +1515 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8Test.java +180 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java +421 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java +134 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldTest.java +121 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java +319 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java +174 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java +143 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java +85 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteTest.java +148 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteralByteStringTest.java +396 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/MessageTest.java +353 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/NestedBuildersTest.java +185 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ParserTest.java +381 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java +190 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java +97 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringTest.java +115 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ServiceTest.java +320 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java +155 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SmallSortedMapTest.java +420 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestBadIdentifiers.java +96 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestUtil.java +4124 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TextFormatTest.java +994 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java +653 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java +227 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/WireFormatTest.java +606 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lazy_fields_lite.proto +61 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto +55 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/multiple_files_test.proto +77 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_builders_test.proto +53 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension.proto +46 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension_lite.proto +48 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension.proto +49 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto +50 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test.proto +38 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test2.proto +42 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test3.proto +43 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_bad_identifiers.proto +157 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8.proto +50 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8_size.proto +51 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_custom_options.proto +43 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_extra_interfaces.proto +60 -0
- data/ext/protoc/protobuf/m4/ac_system_extensions.m4 +37 -0
- data/ext/protoc/protobuf/m4/acx_check_suncc.m4 +75 -0
- data/ext/protoc/protobuf/m4/acx_pthread.m4 +397 -0
- data/ext/protoc/protobuf/m4/stl_hash.m4 +72 -0
- data/ext/protoc/protobuf/more_tests/Makefile +41 -0
- data/ext/protoc/protobuf/post_process_dist.sh +60 -0
- data/ext/protoc/protobuf/protobuf-lite.pc.in +13 -0
- data/ext/protoc/protobuf/protobuf.pc.in +14 -0
- data/ext/protoc/protobuf/python/README.txt +105 -0
- data/ext/protoc/protobuf/python/ez_setup.py +284 -0
- data/ext/protoc/protobuf/python/google/__init__.py +1 -0
- data/ext/protoc/protobuf/python/google/protobuf/__init__.py +0 -0
- data/ext/protoc/protobuf/python/google/protobuf/descriptor.py +849 -0
- data/ext/protoc/protobuf/python/google/protobuf/descriptor_database.py +137 -0
- data/ext/protoc/protobuf/python/google/protobuf/descriptor_pool.py +643 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/__init__.py +0 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.cc +139 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.py +89 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation_default_test.py +63 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/containers.py +269 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/cpp_message.py +663 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/decoder.py +831 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_database_test.py +63 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test.py +564 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test1.proto +94 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test2.proto +70 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_python_test.py +54 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_test.py +669 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/encoder.py +788 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/enum_type_wrapper.py +89 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test1.proto +57 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test2.proto +92 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/generator_test.py +343 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_python_test.py +54 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_test.py +131 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_listener.py +78 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_python_test.py +54 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_test.py +681 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/missing_enum_values.proto +50 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions.proto +58 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions_dynamic.proto +49 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/more_messages.proto +51 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/python_message.py +1251 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/reflection_test.py +2934 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/service_reflection_test.py +136 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/symbol_database_test.py +120 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/test_bad_identifiers.proto +52 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/test_util.py +662 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/text_encoding_test.py +68 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/text_format_test.py +743 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/type_checkers.py +328 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/unknown_fields_test.py +231 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format.py +268 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format_test.py +253 -0
- data/ext/protoc/protobuf/python/google/protobuf/message.py +284 -0
- data/ext/protoc/protobuf/python/google/protobuf/message_factory.py +155 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/README +6 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/__init__.py +0 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/cpp_message.py +61 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.cc +357 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.h +96 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor_cpp2_test.py +58 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.cc +338 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.h +123 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/message.cc +2561 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/message.h +305 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/message_factory_cpp2_test.py +56 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/proto2_api_test.proto +38 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/python.proto +66 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/python_protobuf.h +57 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/reflection_cpp2_generated_test.py +94 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc +763 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.h +172 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.cc +825 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.h +112 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/scoped_pyobject_ptr.h +95 -0
- data/ext/protoc/protobuf/python/google/protobuf/reflection.py +205 -0
- data/ext/protoc/protobuf/python/google/protobuf/service.py +226 -0
- data/ext/protoc/protobuf/python/google/protobuf/service_reflection.py +284 -0
- data/ext/protoc/protobuf/python/google/protobuf/symbol_database.py +185 -0
- data/ext/protoc/protobuf/python/google/protobuf/text_encoding.py +110 -0
- data/ext/protoc/protobuf/python/google/protobuf/text_format.py +873 -0
- data/ext/protoc/protobuf/python/mox.py +1401 -0
- data/ext/protoc/protobuf/python/setup.py +201 -0
- data/ext/protoc/protobuf/python/stubout.py +140 -0
- data/ext/protoc/protobuf/src/Makefile.am +418 -0
- data/ext/protoc/protobuf/src/google/protobuf/SEBS +240 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.cc +84 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.h +145 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.cc +1603 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.h +378 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface_unittest.cc +1654 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc +158 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.cc +288 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.h +103 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.cc +431 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.h +122 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.cc +210 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.h +86 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.cc +166 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.h +185 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.cc +665 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.h +99 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.cc +125 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.cc +494 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.h +206 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.cc +2645 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.h +175 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.cc +375 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.h +121 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_options.h +58 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc +123 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc +451 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +123 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.cc +334 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.cc +642 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.h +127 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto +132 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc +2074 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.h +51 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.cc +480 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.h +317 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/importer_unittest.cc +617 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.cc +195 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.h +95 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.cc +233 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.h +69 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment_unittest.cc +67 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.cc +333 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.h +99 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.cc +778 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.h +158 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.cc +207 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.h +109 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.cc +213 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.h +162 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.cc +534 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.h +115 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.cc +158 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.h +72 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.cc +77 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.h +101 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.cc +737 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.h +322 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.cc +826 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.h +121 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.cc +1666 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.h +140 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.cc +1343 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.h +173 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.cc +266 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.h +124 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_plugin_unittest.cc +124 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.cc +877 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.h +160 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.cc +473 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.h +135 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.cc +201 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.h +90 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.cc +1056 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.h +160 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/main.cc +61 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.cc +240 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.h +117 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/package_info.h +64 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.cc +1750 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.h +522 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/parser_unittest.cc +2612 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.cc +163 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.h +72 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.cc +1148 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.h +897 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.proto +147 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.cc +1262 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.h +166 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_plugin_unittest.cc +118 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.cc +463 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.h +108 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/test_plugin.cc +51 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_output_unittest.sh +91 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.cc +218 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.h +93 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.cc +5420 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.h +1691 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.cc +9135 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.h +6761 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.proto +687 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.cc +543 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.h +369 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_database_unittest.cc +748 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_pb2_test.py +54 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_unittest.cc +5501 -0
- data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.cc +764 -0
- data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.h +148 -0
- data/ext/protoc/protobuf/src/google/protobuf/dynamic_message_unittest.cc +230 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set.cc +1663 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set.h +1234 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set_heavy.cc +734 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set_unittest.cc +1095 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_enum_reflection.h +91 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.cc +1683 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.h +504 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc +795 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.cc +65 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.h +113 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.cc +914 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.h +1220 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_inl.h +69 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_unittest.cc +1378 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.cc +326 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.h +209 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream_unittest.sh +44 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/package_info.h +54 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/printer.cc +198 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/printer.h +136 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/printer_unittest.cc +285 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/strtod.cc +113 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/strtod.h +50 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.cc +1127 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.h +402 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer_unittest.cc +999 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.cc +57 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.h +248 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc +473 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.h +358 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc +405 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.h +354 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_unittest.cc +965 -0
- data/ext/protoc/protobuf/src/google/protobuf/lite_unittest.cc +350 -0
- data/ext/protoc/protobuf/src/google/protobuf/message.cc +358 -0
- data/ext/protoc/protobuf/src/google/protobuf/message.h +866 -0
- data/ext/protoc/protobuf/src/google/protobuf/message_lite.cc +335 -0
- data/ext/protoc/protobuf/src/google/protobuf/message_lite.h +247 -0
- data/ext/protoc/protobuf/src/google/protobuf/message_unittest.cc +427 -0
- data/ext/protoc/protobuf/src/google/protobuf/package_info.h +64 -0
- data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.cc +269 -0
- data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.h +81 -0
- data/ext/protoc/protobuf/src/google/protobuf/reflection_ops_unittest.cc +475 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field.cc +87 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field.h +1603 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field_reflection_unittest.cc +195 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field_unittest.cc +1442 -0
- data/ext/protoc/protobuf/src/google/protobuf/service.cc +46 -0
- data/ext/protoc/protobuf/src/google/protobuf/service.h +291 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops.h +227 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm64_gcc.h +325 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_gcc.h +151 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_qnx.h +146 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_atomicword_compat.h +122 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h +137 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_macosx.h +225 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_mips_gcc.h +313 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_pnacl.h +73 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_solaris.h +188 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_tsan.h +219 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc +137 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h +293 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc +112 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.h +150 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/common.cc +395 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/common.h +1226 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/common_unittest.cc +357 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/hash.h +232 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/map_util.h +771 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/once.cc +99 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/once.h +166 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/once_unittest.cc +253 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/platform_macros.h +103 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/shared_ptr.h +470 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stl_util.h +121 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.cc +175 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.h +76 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf_unittest.cc +152 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid.cc +536 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid_unittest.cc +40 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.cc +1279 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.h +562 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil_unittest.cc +73 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.cc +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.h +170 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util.h +138 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util_unittest.cc +130 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits.h +336 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits_unittest.cc +628 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util.cc +3345 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util.h +215 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.cc +1585 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.h +101 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/bad_utf8_string +1 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message +0 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message_oneof_implemented +0 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_packed_fields_message +0 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_oneof_implemented.txt +129 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy_oneof.txt +129 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data_pointy.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/file.cc +194 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/file.h +97 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.cc +255 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.h +102 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/zcgunzip.cc +73 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/zcgzip.cc +79 -0
- data/ext/protoc/protobuf/src/google/protobuf/text_format.cc +1746 -0
- data/ext/protoc/protobuf/src/google/protobuf/text_format.h +473 -0
- data/ext/protoc/protobuf/src/google/protobuf/text_format_unittest.cc +1479 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest.proto +861 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_custom_options.proto +393 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_embed_optimize_for.proto +50 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_empty.proto +37 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_enormous_descriptor.proto +1046 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import.proto +64 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import_lite.proto +51 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public.proto +40 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public_lite.proto +42 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_lite.proto +384 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_lite_imports_nonlite.proto +43 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_mset.proto +83 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_no_generic_services.proto +53 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_optimize_for.proto +66 -0
- data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.cc +265 -0
- data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.h +318 -0
- data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set_unittest.cc +599 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format.cc +1101 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format.h +336 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.cc +471 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.h +661 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite_inl.h +860 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_unittest.cc +1120 -0
- data/ext/protoc/protobuf/src/solaris/libstdc++.la +51 -0
- data/ext/protoc/protobuf/vsprojects/config.h +29 -0
- data/ext/protoc/protobuf/vsprojects/convert2008to2005.sh +20 -0
- data/ext/protoc/protobuf/vsprojects/extract_includes.bat +50 -0
- data/ext/protoc/protobuf/vsprojects/libprotobuf-lite.vcproj +302 -0
- data/ext/protoc/protobuf/vsprojects/libprotobuf.vcproj +470 -0
- data/ext/protoc/protobuf/vsprojects/libprotoc.vcproj +466 -0
- data/ext/protoc/protobuf/vsprojects/lite-test.vcproj +305 -0
- data/ext/protoc/protobuf/vsprojects/protobuf.sln +92 -0
- data/ext/protoc/protobuf/vsprojects/protoc.vcproj +192 -0
- data/ext/protoc/protobuf/vsprojects/readme.txt +114 -0
- data/ext/protoc/protobuf/vsprojects/test_plugin.vcproj +209 -0
- data/ext/protoc/protobuf/vsprojects/tests.vcproj +681 -0
- data/lib/protoc/version.rb +1 -1
- metadata +480 -3
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
// Protocol Buffers - Google's data interchange format
|
|
2
|
+
// Copyright 2008 Google Inc. All rights reserved.
|
|
3
|
+
// https://developers.google.com/protocol-buffers/
|
|
4
|
+
//
|
|
5
|
+
// Redistribution and use in source and binary forms, with or without
|
|
6
|
+
// modification, are permitted provided that the following conditions are
|
|
7
|
+
// met:
|
|
8
|
+
//
|
|
9
|
+
// * Redistributions of source code must retain the above copyright
|
|
10
|
+
// notice, this list of conditions and the following disclaimer.
|
|
11
|
+
// * Redistributions in binary form must reproduce the above
|
|
12
|
+
// copyright notice, this list of conditions and the following disclaimer
|
|
13
|
+
// in the documentation and/or other materials provided with the
|
|
14
|
+
// distribution.
|
|
15
|
+
// * Neither the name of Google Inc. nor the names of its
|
|
16
|
+
// contributors may be used to endorse or promote products derived from
|
|
17
|
+
// this software without specific prior written permission.
|
|
18
|
+
//
|
|
19
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
20
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
21
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
22
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
23
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
24
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
25
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
26
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
27
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
28
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
29
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
30
|
+
|
|
31
|
+
// Author: kenton@google.com (Kenton Varda)
|
|
32
|
+
// Based on original Protocol Buffers design by
|
|
33
|
+
// Sanjay Ghemawat, Jeff Dean, and others.
|
|
34
|
+
|
|
35
|
+
#include <google/protobuf/compiler/java/java_field.h>
|
|
36
|
+
|
|
37
|
+
#include <memory>
|
|
38
|
+
|
|
39
|
+
#include <google/protobuf/stubs/common.h>
|
|
40
|
+
#include <google/protobuf/compiler/java/java_context.h>
|
|
41
|
+
#include <google/protobuf/compiler/java/java_enum_field.h>
|
|
42
|
+
#include <google/protobuf/compiler/java/java_helpers.h>
|
|
43
|
+
#include <google/protobuf/compiler/java/java_lazy_message_field.h>
|
|
44
|
+
#include <google/protobuf/compiler/java/java_message_field.h>
|
|
45
|
+
#include <google/protobuf/compiler/java/java_primitive_field.h>
|
|
46
|
+
#include <google/protobuf/compiler/java/java_string_field.h>
|
|
47
|
+
#include <google/protobuf/io/printer.h>
|
|
48
|
+
#include <google/protobuf/stubs/strutil.h>
|
|
49
|
+
#include <google/protobuf/stubs/substitute.h>
|
|
50
|
+
|
|
51
|
+
namespace google {
|
|
52
|
+
namespace protobuf {
|
|
53
|
+
namespace compiler {
|
|
54
|
+
namespace java {
|
|
55
|
+
|
|
56
|
+
namespace {
|
|
57
|
+
|
|
58
|
+
ImmutableFieldGenerator* MakeImmutableGenerator(
|
|
59
|
+
const FieldDescriptor* field, int messageBitIndex, int builderBitIndex,
|
|
60
|
+
Context* context) {
|
|
61
|
+
if (field->is_repeated()) {
|
|
62
|
+
switch (GetJavaType(field)) {
|
|
63
|
+
case JAVATYPE_MESSAGE:
|
|
64
|
+
if (IsLazy(field)) {
|
|
65
|
+
return new RepeatedImmutableLazyMessageFieldGenerator(
|
|
66
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
67
|
+
} else {
|
|
68
|
+
return new RepeatedImmutableMessageFieldGenerator(
|
|
69
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
70
|
+
}
|
|
71
|
+
case JAVATYPE_ENUM:
|
|
72
|
+
return new RepeatedImmutableEnumFieldGenerator(
|
|
73
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
74
|
+
case JAVATYPE_STRING:
|
|
75
|
+
return new RepeatedImmutableStringFieldGenerator(
|
|
76
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
77
|
+
default:
|
|
78
|
+
return new RepeatedImmutablePrimitiveFieldGenerator(
|
|
79
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
if (field->containing_oneof()) {
|
|
83
|
+
switch (GetJavaType(field)) {
|
|
84
|
+
case JAVATYPE_MESSAGE:
|
|
85
|
+
if (IsLazy(field)) {
|
|
86
|
+
return new ImmutableLazyMessageOneofFieldGenerator(
|
|
87
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
88
|
+
} else {
|
|
89
|
+
return new ImmutableMessageOneofFieldGenerator(
|
|
90
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
91
|
+
}
|
|
92
|
+
case JAVATYPE_ENUM:
|
|
93
|
+
return new ImmutableEnumOneofFieldGenerator(
|
|
94
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
95
|
+
case JAVATYPE_STRING:
|
|
96
|
+
return new ImmutableStringOneofFieldGenerator(
|
|
97
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
98
|
+
default:
|
|
99
|
+
return new ImmutablePrimitiveOneofFieldGenerator(
|
|
100
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
101
|
+
}
|
|
102
|
+
} else {
|
|
103
|
+
switch (GetJavaType(field)) {
|
|
104
|
+
case JAVATYPE_MESSAGE:
|
|
105
|
+
if (IsLazy(field)) {
|
|
106
|
+
return new ImmutableLazyMessageFieldGenerator(
|
|
107
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
108
|
+
} else {
|
|
109
|
+
return new ImmutableMessageFieldGenerator(
|
|
110
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
111
|
+
}
|
|
112
|
+
case JAVATYPE_ENUM:
|
|
113
|
+
return new ImmutableEnumFieldGenerator(
|
|
114
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
115
|
+
case JAVATYPE_STRING:
|
|
116
|
+
return new ImmutableStringFieldGenerator(
|
|
117
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
118
|
+
default:
|
|
119
|
+
return new ImmutablePrimitiveFieldGenerator(
|
|
120
|
+
field, messageBitIndex, builderBitIndex, context);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
static inline void ReportUnexpectedPackedFieldsCall(io::Printer* printer) {
|
|
128
|
+
// Reaching here indicates a bug. Cases are:
|
|
129
|
+
// - This FieldGenerator should support packing,
|
|
130
|
+
// but this method should be overridden.
|
|
131
|
+
// - This FieldGenerator doesn't support packing, and this method
|
|
132
|
+
// should never have been called.
|
|
133
|
+
GOOGLE_LOG(FATAL) << "GenerateParsingCodeFromPacked() "
|
|
134
|
+
<< "called on field generator that does not support packing.";
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
} // namespace
|
|
138
|
+
|
|
139
|
+
ImmutableFieldGenerator::~ImmutableFieldGenerator() {}
|
|
140
|
+
|
|
141
|
+
void ImmutableFieldGenerator::
|
|
142
|
+
GenerateParsingCodeFromPacked(io::Printer* printer) const {
|
|
143
|
+
ReportUnexpectedPackedFieldsCall(printer);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// ===================================================================
|
|
147
|
+
|
|
148
|
+
template <>
|
|
149
|
+
FieldGeneratorMap<ImmutableFieldGenerator>::FieldGeneratorMap(
|
|
150
|
+
const Descriptor* descriptor, Context* context)
|
|
151
|
+
: descriptor_(descriptor),
|
|
152
|
+
field_generators_(new scoped_ptr<
|
|
153
|
+
ImmutableFieldGenerator>[descriptor->field_count()]) {
|
|
154
|
+
|
|
155
|
+
// Construct all the FieldGenerators and assign them bit indices for their
|
|
156
|
+
// bit fields.
|
|
157
|
+
int messageBitIndex = 0;
|
|
158
|
+
int builderBitIndex = 0;
|
|
159
|
+
for (int i = 0; i < descriptor->field_count(); i++) {
|
|
160
|
+
ImmutableFieldGenerator* generator = MakeImmutableGenerator(
|
|
161
|
+
descriptor->field(i), messageBitIndex, builderBitIndex, context);
|
|
162
|
+
field_generators_[i].reset(generator);
|
|
163
|
+
messageBitIndex += generator->GetNumBitsForMessage();
|
|
164
|
+
builderBitIndex += generator->GetNumBitsForBuilder();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
template<>
|
|
169
|
+
FieldGeneratorMap<ImmutableFieldGenerator>::~FieldGeneratorMap() {}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
void SetCommonFieldVariables(const FieldDescriptor* descriptor,
|
|
173
|
+
const FieldGeneratorInfo* info,
|
|
174
|
+
map<string, string>* variables) {
|
|
175
|
+
(*variables)["field_name"] = descriptor->name();
|
|
176
|
+
(*variables)["name"] = info->name;
|
|
177
|
+
(*variables)["capitalized_name"] = info->capitalized_name;
|
|
178
|
+
(*variables)["disambiguated_reason"] = info->disambiguated_reason;
|
|
179
|
+
(*variables)["constant_name"] = FieldConstantName(descriptor);
|
|
180
|
+
(*variables)["number"] = SimpleItoa(descriptor->number());
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
void SetCommonOneofVariables(const FieldDescriptor* descriptor,
|
|
184
|
+
const OneofGeneratorInfo* info,
|
|
185
|
+
map<string, string>* variables) {
|
|
186
|
+
(*variables)["oneof_name"] = info->name;
|
|
187
|
+
(*variables)["oneof_capitalized_name"] = info->capitalized_name;
|
|
188
|
+
(*variables)["oneof_index"] =
|
|
189
|
+
SimpleItoa(descriptor->containing_oneof()->index());
|
|
190
|
+
(*variables)["set_oneof_case_message"] = info->name +
|
|
191
|
+
"Case_ = " + SimpleItoa(descriptor->number());
|
|
192
|
+
(*variables)["clear_oneof_case_message"] = info->name +
|
|
193
|
+
"Case_ = 0";
|
|
194
|
+
(*variables)["has_oneof_case_message"] = info->name +
|
|
195
|
+
"Case_ == " + SimpleItoa(descriptor->number());
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
void PrintExtraFieldInfo(const map<string, string>& variables,
|
|
199
|
+
io::Printer* printer) {
|
|
200
|
+
const map<string, string>::const_iterator it =
|
|
201
|
+
variables.find("disambiguated_reason");
|
|
202
|
+
if (it != variables.end() && !it->second.empty()) {
|
|
203
|
+
printer->Print(
|
|
204
|
+
variables,
|
|
205
|
+
"// An alternative name is used for field \"$field_name$\" because:\n"
|
|
206
|
+
"// $disambiguated_reason$\n");
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
} // namespace java
|
|
211
|
+
} // namespace compiler
|
|
212
|
+
} // namespace protobuf
|
|
213
|
+
} // namespace google
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
// Protocol Buffers - Google's data interchange format
|
|
2
|
+
// Copyright 2008 Google Inc. All rights reserved.
|
|
3
|
+
// https://developers.google.com/protocol-buffers/
|
|
4
|
+
//
|
|
5
|
+
// Redistribution and use in source and binary forms, with or without
|
|
6
|
+
// modification, are permitted provided that the following conditions are
|
|
7
|
+
// met:
|
|
8
|
+
//
|
|
9
|
+
// * Redistributions of source code must retain the above copyright
|
|
10
|
+
// notice, this list of conditions and the following disclaimer.
|
|
11
|
+
// * Redistributions in binary form must reproduce the above
|
|
12
|
+
// copyright notice, this list of conditions and the following disclaimer
|
|
13
|
+
// in the documentation and/or other materials provided with the
|
|
14
|
+
// distribution.
|
|
15
|
+
// * Neither the name of Google Inc. nor the names of its
|
|
16
|
+
// contributors may be used to endorse or promote products derived from
|
|
17
|
+
// this software without specific prior written permission.
|
|
18
|
+
//
|
|
19
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
20
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
21
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
22
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
23
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
24
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
25
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
26
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
27
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
28
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
29
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
30
|
+
|
|
31
|
+
// Author: kenton@google.com (Kenton Varda)
|
|
32
|
+
// Based on original Protocol Buffers design by
|
|
33
|
+
// Sanjay Ghemawat, Jeff Dean, and others.
|
|
34
|
+
|
|
35
|
+
#ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_FIELD_H__
|
|
36
|
+
#define GOOGLE_PROTOBUF_COMPILER_JAVA_FIELD_H__
|
|
37
|
+
|
|
38
|
+
#include <map>
|
|
39
|
+
#include <memory>
|
|
40
|
+
#include <string>
|
|
41
|
+
|
|
42
|
+
#include <google/protobuf/stubs/common.h>
|
|
43
|
+
#include <google/protobuf/descriptor.h>
|
|
44
|
+
|
|
45
|
+
namespace google {
|
|
46
|
+
namespace protobuf {
|
|
47
|
+
namespace compiler {
|
|
48
|
+
namespace java {
|
|
49
|
+
class Context; // context.h
|
|
50
|
+
class ClassNameResolver; // name_resolver.h
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
namespace io {
|
|
54
|
+
class Printer; // printer.h
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
namespace protobuf {
|
|
59
|
+
namespace compiler {
|
|
60
|
+
namespace java {
|
|
61
|
+
|
|
62
|
+
class ImmutableFieldGenerator {
|
|
63
|
+
public:
|
|
64
|
+
ImmutableFieldGenerator() {}
|
|
65
|
+
virtual ~ImmutableFieldGenerator();
|
|
66
|
+
|
|
67
|
+
virtual int GetNumBitsForMessage() const = 0;
|
|
68
|
+
virtual int GetNumBitsForBuilder() const = 0;
|
|
69
|
+
virtual void GenerateInterfaceMembers(io::Printer* printer) const = 0;
|
|
70
|
+
virtual void GenerateMembers(io::Printer* printer) const = 0;
|
|
71
|
+
virtual void GenerateBuilderMembers(io::Printer* printer) const = 0;
|
|
72
|
+
virtual void GenerateInitializationCode(io::Printer* printer) const = 0;
|
|
73
|
+
virtual void GenerateBuilderClearCode(io::Printer* printer) const = 0;
|
|
74
|
+
virtual void GenerateMergingCode(io::Printer* printer) const = 0;
|
|
75
|
+
virtual void GenerateBuildingCode(io::Printer* printer) const = 0;
|
|
76
|
+
virtual void GenerateParsingCode(io::Printer* printer) const = 0;
|
|
77
|
+
virtual void GenerateParsingCodeFromPacked(io::Printer* printer) const;
|
|
78
|
+
virtual void GenerateParsingDoneCode(io::Printer* printer) const = 0;
|
|
79
|
+
virtual void GenerateSerializationCode(io::Printer* printer) const = 0;
|
|
80
|
+
virtual void GenerateSerializedSizeCode(io::Printer* printer) const = 0;
|
|
81
|
+
virtual void GenerateFieldBuilderInitializationCode(io::Printer* printer)
|
|
82
|
+
const = 0;
|
|
83
|
+
|
|
84
|
+
virtual void GenerateEqualsCode(io::Printer* printer) const = 0;
|
|
85
|
+
virtual void GenerateHashCode(io::Printer* printer) const = 0;
|
|
86
|
+
|
|
87
|
+
virtual string GetBoxedType() const = 0;
|
|
88
|
+
|
|
89
|
+
private:
|
|
90
|
+
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableFieldGenerator);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
// Convenience class which constructs FieldGenerators for a Descriptor.
|
|
95
|
+
template<typename FieldGeneratorType>
|
|
96
|
+
class FieldGeneratorMap {
|
|
97
|
+
public:
|
|
98
|
+
explicit FieldGeneratorMap(const Descriptor* descriptor,
|
|
99
|
+
Context* context);
|
|
100
|
+
~FieldGeneratorMap();
|
|
101
|
+
|
|
102
|
+
const FieldGeneratorType& get(const FieldDescriptor* field) const;
|
|
103
|
+
|
|
104
|
+
private:
|
|
105
|
+
const Descriptor* descriptor_;
|
|
106
|
+
Context* context_;
|
|
107
|
+
ClassNameResolver* name_resolver_;
|
|
108
|
+
scoped_array<scoped_ptr<FieldGeneratorType> > field_generators_;
|
|
109
|
+
|
|
110
|
+
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldGeneratorMap);
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
template<typename FieldGeneratorType>
|
|
114
|
+
inline const FieldGeneratorType&
|
|
115
|
+
FieldGeneratorMap<FieldGeneratorType>::get(const FieldDescriptor* field) const {
|
|
116
|
+
GOOGLE_CHECK_EQ(field->containing_type(), descriptor_);
|
|
117
|
+
return *field_generators_[field->index()];
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Instantiate template for mutable and immutable maps.
|
|
121
|
+
template<>
|
|
122
|
+
FieldGeneratorMap<ImmutableFieldGenerator>::
|
|
123
|
+
FieldGeneratorMap(const Descriptor* descriptor,
|
|
124
|
+
Context* context);
|
|
125
|
+
|
|
126
|
+
template<>
|
|
127
|
+
FieldGeneratorMap<ImmutableFieldGenerator>::~FieldGeneratorMap();
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
// Field information used in FieldGeneartors.
|
|
131
|
+
struct FieldGeneratorInfo {
|
|
132
|
+
string name;
|
|
133
|
+
string capitalized_name;
|
|
134
|
+
string disambiguated_reason;
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
// Oneof information used in OneofFieldGeneartors.
|
|
138
|
+
struct OneofGeneratorInfo {
|
|
139
|
+
string name;
|
|
140
|
+
string capitalized_name;
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
// Set some common variables used in variable FieldGenerators.
|
|
144
|
+
void SetCommonFieldVariables(const FieldDescriptor* descriptor,
|
|
145
|
+
const FieldGeneratorInfo* info,
|
|
146
|
+
map<string, string>* variables);
|
|
147
|
+
|
|
148
|
+
// Set some common oneof variables used in OneofFieldGenerators.
|
|
149
|
+
void SetCommonOneofVariables(const FieldDescriptor* descriptor,
|
|
150
|
+
const OneofGeneratorInfo* info,
|
|
151
|
+
map<string, string>* variables);
|
|
152
|
+
|
|
153
|
+
// Print useful comments before a field's accessors.
|
|
154
|
+
void PrintExtraFieldInfo(const map<string, string>& variables,
|
|
155
|
+
io::Printer* printer);
|
|
156
|
+
|
|
157
|
+
} // namespace java
|
|
158
|
+
} // namespace compiler
|
|
159
|
+
} // namespace protobuf
|
|
160
|
+
|
|
161
|
+
} // namespace google
|
|
162
|
+
#endif // GOOGLE_PROTOBUF_COMPILER_JAVA_FIELD_H__
|
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
// Protocol Buffers - Google's data interchange format
|
|
2
|
+
// Copyright 2008 Google Inc. All rights reserved.
|
|
3
|
+
// https://developers.google.com/protocol-buffers/
|
|
4
|
+
//
|
|
5
|
+
// Redistribution and use in source and binary forms, with or without
|
|
6
|
+
// modification, are permitted provided that the following conditions are
|
|
7
|
+
// met:
|
|
8
|
+
//
|
|
9
|
+
// * Redistributions of source code must retain the above copyright
|
|
10
|
+
// notice, this list of conditions and the following disclaimer.
|
|
11
|
+
// * Redistributions in binary form must reproduce the above
|
|
12
|
+
// copyright notice, this list of conditions and the following disclaimer
|
|
13
|
+
// in the documentation and/or other materials provided with the
|
|
14
|
+
// distribution.
|
|
15
|
+
// * Neither the name of Google Inc. nor the names of its
|
|
16
|
+
// contributors may be used to endorse or promote products derived from
|
|
17
|
+
// this software without specific prior written permission.
|
|
18
|
+
//
|
|
19
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
20
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
21
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
22
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
23
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
24
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
25
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
26
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
27
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
28
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
29
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
30
|
+
|
|
31
|
+
// Author: kenton@google.com (Kenton Varda)
|
|
32
|
+
// Based on original Protocol Buffers design by
|
|
33
|
+
// Sanjay Ghemawat, Jeff Dean, and others.
|
|
34
|
+
|
|
35
|
+
#include <google/protobuf/compiler/java/java_file.h>
|
|
36
|
+
|
|
37
|
+
#include <memory>
|
|
38
|
+
|
|
39
|
+
#include <google/protobuf/compiler/java/java_context.h>
|
|
40
|
+
#include <google/protobuf/compiler/java/java_enum.h>
|
|
41
|
+
#include <google/protobuf/compiler/java/java_extension.h>
|
|
42
|
+
#include <google/protobuf/compiler/java/java_generator_factory.h>
|
|
43
|
+
#include <google/protobuf/compiler/java/java_helpers.h>
|
|
44
|
+
#include <google/protobuf/compiler/java/java_message.h>
|
|
45
|
+
#include <google/protobuf/compiler/java/java_name_resolver.h>
|
|
46
|
+
#include <google/protobuf/compiler/java/java_service.h>
|
|
47
|
+
#include <google/protobuf/compiler/java/java_shared_code_generator.h>
|
|
48
|
+
#include <google/protobuf/compiler/code_generator.h>
|
|
49
|
+
#include <google/protobuf/io/printer.h>
|
|
50
|
+
#include <google/protobuf/io/zero_copy_stream.h>
|
|
51
|
+
#include <google/protobuf/descriptor.pb.h>
|
|
52
|
+
#include <google/protobuf/dynamic_message.h>
|
|
53
|
+
#include <google/protobuf/stubs/strutil.h>
|
|
54
|
+
|
|
55
|
+
namespace google {
|
|
56
|
+
namespace protobuf {
|
|
57
|
+
namespace compiler {
|
|
58
|
+
namespace java {
|
|
59
|
+
|
|
60
|
+
namespace {
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
// Recursively searches the given message to collect extensions.
|
|
64
|
+
// Returns true if all the extensions can be recognized. The extensions will be
|
|
65
|
+
// appended in to the extensions parameter.
|
|
66
|
+
// Returns false when there are unknown fields, in which case the data in the
|
|
67
|
+
// extensions output parameter is not reliable and should be discarded.
|
|
68
|
+
bool CollectExtensions(const Message& message,
|
|
69
|
+
vector<const FieldDescriptor*>* extensions) {
|
|
70
|
+
const Reflection* reflection = message.GetReflection();
|
|
71
|
+
|
|
72
|
+
// There are unknown fields that could be extensions, thus this call fails.
|
|
73
|
+
if (reflection->GetUnknownFields(message).field_count() > 0) return false;
|
|
74
|
+
|
|
75
|
+
vector<const FieldDescriptor*> fields;
|
|
76
|
+
reflection->ListFields(message, &fields);
|
|
77
|
+
|
|
78
|
+
for (int i = 0; i < fields.size(); i++) {
|
|
79
|
+
if (fields[i]->is_extension()) extensions->push_back(fields[i]);
|
|
80
|
+
|
|
81
|
+
if (GetJavaType(fields[i]) == JAVATYPE_MESSAGE) {
|
|
82
|
+
if (fields[i]->is_repeated()) {
|
|
83
|
+
int size = reflection->FieldSize(message, fields[i]);
|
|
84
|
+
for (int j = 0; j < size; j++) {
|
|
85
|
+
const Message& sub_message =
|
|
86
|
+
reflection->GetRepeatedMessage(message, fields[i], j);
|
|
87
|
+
if (!CollectExtensions(sub_message, extensions)) return false;
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
const Message& sub_message = reflection->GetMessage(message, fields[i]);
|
|
91
|
+
if (!CollectExtensions(sub_message, extensions)) return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Finds all extensions in the given message and its sub-messages. If the
|
|
100
|
+
// message contains unknown fields (which could be extensions), then those
|
|
101
|
+
// extensions are defined in alternate_pool.
|
|
102
|
+
// The message will be converted to a DynamicMessage backed by alternate_pool
|
|
103
|
+
// in order to handle this case.
|
|
104
|
+
void CollectExtensions(const FileDescriptorProto& file_proto,
|
|
105
|
+
const DescriptorPool& alternate_pool,
|
|
106
|
+
vector<const FieldDescriptor*>* extensions,
|
|
107
|
+
const string& file_data) {
|
|
108
|
+
if (!CollectExtensions(file_proto, extensions)) {
|
|
109
|
+
// There are unknown fields in the file_proto, which are probably
|
|
110
|
+
// extensions. We need to parse the data into a dynamic message based on the
|
|
111
|
+
// builder-pool to find out all extensions.
|
|
112
|
+
const Descriptor* file_proto_desc = alternate_pool.FindMessageTypeByName(
|
|
113
|
+
file_proto.GetDescriptor()->full_name());
|
|
114
|
+
GOOGLE_CHECK(file_proto_desc)
|
|
115
|
+
<< "Find unknown fields in FileDescriptorProto when building "
|
|
116
|
+
<< file_proto.name()
|
|
117
|
+
<< ". It's likely that those fields are custom options, however, "
|
|
118
|
+
"descriptor.proto is not in the transitive dependencies. "
|
|
119
|
+
"This normally should not happen. Please report a bug.";
|
|
120
|
+
DynamicMessageFactory factory;
|
|
121
|
+
scoped_ptr<Message> dynamic_file_proto(
|
|
122
|
+
factory.GetPrototype(file_proto_desc)->New());
|
|
123
|
+
GOOGLE_CHECK(dynamic_file_proto.get() != NULL);
|
|
124
|
+
GOOGLE_CHECK(dynamic_file_proto->ParseFromString(file_data));
|
|
125
|
+
|
|
126
|
+
// Collect the extensions again from the dynamic message. There should be no
|
|
127
|
+
// more unknown fields this time, i.e. all the custom options should be
|
|
128
|
+
// parsed as extensions now.
|
|
129
|
+
extensions->clear();
|
|
130
|
+
GOOGLE_CHECK(CollectExtensions(*dynamic_file_proto, extensions))
|
|
131
|
+
<< "Find unknown fields in FileDescriptorProto when building "
|
|
132
|
+
<< file_proto.name()
|
|
133
|
+
<< ". It's likely that those fields are custom options, however, "
|
|
134
|
+
"those options cannot be recognized in the builder pool. "
|
|
135
|
+
"This normally should not happen. Please report a bug.";
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
} // namespace
|
|
141
|
+
|
|
142
|
+
FileGenerator::FileGenerator(const FileDescriptor* file, bool immutable_api)
|
|
143
|
+
: file_(file),
|
|
144
|
+
java_package_(FileJavaPackage(file, immutable_api)),
|
|
145
|
+
message_generators_(
|
|
146
|
+
new scoped_ptr<MessageGenerator>[file->message_type_count()]),
|
|
147
|
+
extension_generators_(
|
|
148
|
+
new scoped_ptr<ExtensionGenerator>[file->extension_count()]),
|
|
149
|
+
context_(new Context(file)),
|
|
150
|
+
name_resolver_(context_->GetNameResolver()),
|
|
151
|
+
immutable_api_(immutable_api) {
|
|
152
|
+
classname_ = name_resolver_->GetFileClassName(file, immutable_api);
|
|
153
|
+
generator_factory_.reset(
|
|
154
|
+
new ImmutableGeneratorFactory(context_.get()));
|
|
155
|
+
for (int i = 0; i < file_->message_type_count(); ++i) {
|
|
156
|
+
message_generators_[i].reset(
|
|
157
|
+
generator_factory_->NewMessageGenerator(file_->message_type(i)));
|
|
158
|
+
}
|
|
159
|
+
for (int i = 0; i < file_->extension_count(); ++i) {
|
|
160
|
+
extension_generators_[i].reset(
|
|
161
|
+
generator_factory_->NewExtensionGenerator(file_->extension(i)));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
FileGenerator::~FileGenerator() {}
|
|
166
|
+
|
|
167
|
+
bool FileGenerator::Validate(string* error) {
|
|
168
|
+
// Check that no class name matches the file's class name. This is a common
|
|
169
|
+
// problem that leads to Java compile errors that can be hard to understand.
|
|
170
|
+
// It's especially bad when using the java_multiple_files, since we would
|
|
171
|
+
// end up overwriting the outer class with one of the inner ones.
|
|
172
|
+
if (name_resolver_->HasConflictingClassName(file_, classname_)) {
|
|
173
|
+
error->assign(file_->name());
|
|
174
|
+
error->append(
|
|
175
|
+
": Cannot generate Java output because the file's outer class name, \"");
|
|
176
|
+
error->append(classname_);
|
|
177
|
+
error->append(
|
|
178
|
+
"\", matches the name of one of the types declared inside it. "
|
|
179
|
+
"Please either rename the type or use the java_outer_classname "
|
|
180
|
+
"option to specify a different outer class name for the .proto file.");
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
// If java_outer_classname option is not set and the default outer class name
|
|
184
|
+
// conflicts with a type defined in the message, we will append a suffix to
|
|
185
|
+
// avoid the conflict. This allows proto1 API protos to be dual-compiled into
|
|
186
|
+
// proto2 API without code change. When this happens we'd like to issue an
|
|
187
|
+
// warning to let the user know that the outer class name has been changed.
|
|
188
|
+
// Although we only do this automatic naming fix for immutable API, mutable
|
|
189
|
+
// outer class name will also be affected as it's contructed from immutable
|
|
190
|
+
// outer class name with an additional "Mutable" prefix. Since the naming
|
|
191
|
+
// change in mutable API is not caused by a naming conflict, we generate the
|
|
192
|
+
// warning for immutable API only.
|
|
193
|
+
if (immutable_api_ && !file_->options().has_java_outer_classname()) {
|
|
194
|
+
string default_classname =
|
|
195
|
+
name_resolver_->GetFileDefaultImmutableClassName(file_);
|
|
196
|
+
if (default_classname != classname_) {
|
|
197
|
+
GOOGLE_LOG(WARNING) << file_->name() << ": The default outer class name, \""
|
|
198
|
+
<< default_classname << "\", conflicts with a type "
|
|
199
|
+
<< "declared in the proto file and an alternative outer "
|
|
200
|
+
<< "class name is used: \"" << classname_ << "\". To avoid "
|
|
201
|
+
<< "this warning, please use the java_outer_classname "
|
|
202
|
+
<< "option to specify a different outer class name for "
|
|
203
|
+
<< "the .proto file.";
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
void FileGenerator::Generate(io::Printer* printer) {
|
|
210
|
+
// We don't import anything because we refer to all classes by their
|
|
211
|
+
// fully-qualified names in the generated source.
|
|
212
|
+
printer->Print(
|
|
213
|
+
"// Generated by the protocol buffer compiler. DO NOT EDIT!\n"
|
|
214
|
+
"// source: $filename$\n"
|
|
215
|
+
"\n",
|
|
216
|
+
"filename", file_->name());
|
|
217
|
+
if (!java_package_.empty()) {
|
|
218
|
+
printer->Print(
|
|
219
|
+
"package $package$;\n"
|
|
220
|
+
"\n",
|
|
221
|
+
"package", java_package_);
|
|
222
|
+
}
|
|
223
|
+
printer->Print(
|
|
224
|
+
"public final class $classname$ {\n"
|
|
225
|
+
" private $classname$() {}\n",
|
|
226
|
+
"classname", classname_);
|
|
227
|
+
printer->Indent();
|
|
228
|
+
|
|
229
|
+
// -----------------------------------------------------------------
|
|
230
|
+
|
|
231
|
+
printer->Print(
|
|
232
|
+
"public static void registerAllExtensions(\n"
|
|
233
|
+
" com.google.protobuf.ExtensionRegistry$lite$ registry) {\n",
|
|
234
|
+
"lite", HasDescriptorMethods(file_) ? "" : "Lite");
|
|
235
|
+
|
|
236
|
+
printer->Indent();
|
|
237
|
+
|
|
238
|
+
for (int i = 0; i < file_->extension_count(); i++) {
|
|
239
|
+
extension_generators_[i]->GenerateRegistrationCode(printer);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
for (int i = 0; i < file_->message_type_count(); i++) {
|
|
243
|
+
message_generators_[i]->GenerateExtensionRegistrationCode(printer);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
printer->Outdent();
|
|
247
|
+
printer->Print(
|
|
248
|
+
"}\n");
|
|
249
|
+
|
|
250
|
+
// -----------------------------------------------------------------
|
|
251
|
+
|
|
252
|
+
if (!MultipleJavaFiles(file_, immutable_api_)) {
|
|
253
|
+
for (int i = 0; i < file_->enum_type_count(); i++) {
|
|
254
|
+
EnumGenerator(file_->enum_type(i), immutable_api_, context_.get())
|
|
255
|
+
.Generate(printer);
|
|
256
|
+
}
|
|
257
|
+
for (int i = 0; i < file_->message_type_count(); i++) {
|
|
258
|
+
message_generators_[i]->GenerateInterface(printer);
|
|
259
|
+
message_generators_[i]->Generate(printer);
|
|
260
|
+
}
|
|
261
|
+
if (HasGenericServices(file_)) {
|
|
262
|
+
for (int i = 0; i < file_->service_count(); i++) {
|
|
263
|
+
scoped_ptr<ServiceGenerator> generator(
|
|
264
|
+
generator_factory_->NewServiceGenerator(file_->service(i)));
|
|
265
|
+
generator->Generate(printer);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Extensions must be generated in the outer class since they are values,
|
|
271
|
+
// not classes.
|
|
272
|
+
for (int i = 0; i < file_->extension_count(); i++) {
|
|
273
|
+
extension_generators_[i]->Generate(printer);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Static variables.
|
|
277
|
+
for (int i = 0; i < file_->message_type_count(); i++) {
|
|
278
|
+
message_generators_[i]->GenerateStaticVariables(printer);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
printer->Print("\n");
|
|
282
|
+
|
|
283
|
+
if (HasDescriptorMethods(file_)) {
|
|
284
|
+
if (immutable_api_) {
|
|
285
|
+
GenerateDescriptorInitializationCodeForImmutable(printer);
|
|
286
|
+
} else {
|
|
287
|
+
GenerateDescriptorInitializationCodeForMutable(printer);
|
|
288
|
+
}
|
|
289
|
+
} else {
|
|
290
|
+
printer->Print(
|
|
291
|
+
"static {\n");
|
|
292
|
+
printer->Indent();
|
|
293
|
+
|
|
294
|
+
for (int i = 0; i < file_->message_type_count(); i++) {
|
|
295
|
+
message_generators_[i]->GenerateStaticVariableInitializers(printer);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
printer->Outdent();
|
|
299
|
+
printer->Print(
|
|
300
|
+
"}\n");
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
printer->Print(
|
|
304
|
+
"\n"
|
|
305
|
+
"// @@protoc_insertion_point(outer_class_scope)\n");
|
|
306
|
+
|
|
307
|
+
printer->Outdent();
|
|
308
|
+
printer->Print("}\n");
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
void FileGenerator::GenerateDescriptorInitializationCodeForImmutable(
|
|
312
|
+
io::Printer* printer) {
|
|
313
|
+
printer->Print(
|
|
314
|
+
"public static com.google.protobuf.Descriptors.FileDescriptor\n"
|
|
315
|
+
" getDescriptor() {\n"
|
|
316
|
+
" return descriptor;\n"
|
|
317
|
+
"}\n"
|
|
318
|
+
"private static com.google.protobuf.Descriptors.FileDescriptor\n"
|
|
319
|
+
" descriptor;\n"
|
|
320
|
+
"static {\n");
|
|
321
|
+
printer->Indent();
|
|
322
|
+
|
|
323
|
+
SharedCodeGenerator shared_code_generator(file_);
|
|
324
|
+
shared_code_generator.GenerateDescriptors(printer);
|
|
325
|
+
|
|
326
|
+
for (int i = 0; i < file_->message_type_count(); i++) {
|
|
327
|
+
message_generators_[i]->GenerateStaticVariableInitializers(printer);
|
|
328
|
+
}
|
|
329
|
+
for (int i = 0; i < file_->extension_count(); i++) {
|
|
330
|
+
extension_generators_[i]->GenerateNonNestedInitializationCode(printer);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// Proto compiler builds a DescriptorPool, which holds all the descriptors to
|
|
334
|
+
// generate, when processing the ".proto" files. We call this DescriptorPool
|
|
335
|
+
// the parsed pool (a.k.a. file_->pool()).
|
|
336
|
+
//
|
|
337
|
+
// Note that when users try to extend the (.*)DescriptorProto in their
|
|
338
|
+
// ".proto" files, it does not affect the pre-built FileDescriptorProto class
|
|
339
|
+
// in proto compiler. When we put the descriptor data in the file_proto, those
|
|
340
|
+
// extensions become unknown fields.
|
|
341
|
+
//
|
|
342
|
+
// Now we need to find out all the extension value to the (.*)DescriptorProto
|
|
343
|
+
// in the file_proto message, and prepare an ExtensionRegistry to return.
|
|
344
|
+
//
|
|
345
|
+
// To find those extensions, we need to parse the data into a dynamic message
|
|
346
|
+
// of the FileDescriptor based on the builder-pool, then we can use
|
|
347
|
+
// reflections to find all extension fields
|
|
348
|
+
FileDescriptorProto file_proto;
|
|
349
|
+
file_->CopyTo(&file_proto);
|
|
350
|
+
string file_data;
|
|
351
|
+
file_proto.SerializeToString(&file_data);
|
|
352
|
+
vector<const FieldDescriptor*> extensions;
|
|
353
|
+
CollectExtensions(file_proto, *file_->pool(), &extensions, file_data);
|
|
354
|
+
|
|
355
|
+
if (extensions.size() > 0) {
|
|
356
|
+
// Must construct an ExtensionRegistry containing all existing extensions
|
|
357
|
+
// and use it to parse the descriptor data again to recognize extensions.
|
|
358
|
+
printer->Print(
|
|
359
|
+
"com.google.protobuf.ExtensionRegistry registry =\n"
|
|
360
|
+
" com.google.protobuf.ExtensionRegistry.newInstance();\n");
|
|
361
|
+
for (int i = 0; i < extensions.size(); i++) {
|
|
362
|
+
scoped_ptr<ExtensionGenerator> generator(
|
|
363
|
+
generator_factory_->NewExtensionGenerator(extensions[i]));
|
|
364
|
+
generator->GenerateRegistrationCode(printer);
|
|
365
|
+
}
|
|
366
|
+
printer->Print(
|
|
367
|
+
"com.google.protobuf.Descriptors.FileDescriptor\n"
|
|
368
|
+
" .internalUpdateFileDescriptor(descriptor, registry);\n");
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// Force descriptor initialization of all dependencies.
|
|
372
|
+
for (int i = 0; i < file_->dependency_count(); i++) {
|
|
373
|
+
if (ShouldIncludeDependency(file_->dependency(i), true)) {
|
|
374
|
+
string dependency =
|
|
375
|
+
name_resolver_->GetImmutableClassName(file_->dependency(i));
|
|
376
|
+
printer->Print(
|
|
377
|
+
"$dependency$.getDescriptor();\n",
|
|
378
|
+
"dependency", dependency);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
printer->Outdent();
|
|
383
|
+
printer->Print(
|
|
384
|
+
"}\n");
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
void FileGenerator::GenerateDescriptorInitializationCodeForMutable(io::Printer* printer) {
|
|
388
|
+
printer->Print(
|
|
389
|
+
"public static com.google.protobuf.Descriptors.FileDescriptor\n"
|
|
390
|
+
" getDescriptor() {\n"
|
|
391
|
+
" return descriptor;\n"
|
|
392
|
+
"}\n"
|
|
393
|
+
"private static com.google.protobuf.Descriptors.FileDescriptor\n"
|
|
394
|
+
" descriptor;\n"
|
|
395
|
+
"static {\n");
|
|
396
|
+
printer->Indent();
|
|
397
|
+
|
|
398
|
+
printer->Print(
|
|
399
|
+
"descriptor = $immutable_package$.$descriptor_classname$.descriptor;\n",
|
|
400
|
+
"immutable_package", FileJavaPackage(file_, true),
|
|
401
|
+
"descriptor_classname", name_resolver_->GetDescriptorClassName(file_));
|
|
402
|
+
|
|
403
|
+
for (int i = 0; i < file_->message_type_count(); i++) {
|
|
404
|
+
message_generators_[i]->GenerateStaticVariableInitializers(printer);
|
|
405
|
+
}
|
|
406
|
+
for (int i = 0; i < file_->extension_count(); i++) {
|
|
407
|
+
extension_generators_[i]->GenerateNonNestedInitializationCode(printer);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
// Check if custom options exist. If any, try to load immutable classes since
|
|
411
|
+
// custom options are only represented with immutable messages.
|
|
412
|
+
FileDescriptorProto file_proto;
|
|
413
|
+
file_->CopyTo(&file_proto);
|
|
414
|
+
string file_data;
|
|
415
|
+
file_proto.SerializeToString(&file_data);
|
|
416
|
+
vector<const FieldDescriptor*> extensions;
|
|
417
|
+
CollectExtensions(file_proto, *file_->pool(), &extensions, file_data);
|
|
418
|
+
|
|
419
|
+
if (extensions.size() > 0) {
|
|
420
|
+
// Try to load immutable messages' outer class. Its initialization code
|
|
421
|
+
// will take care of interpreting custom options.
|
|
422
|
+
printer->Print(
|
|
423
|
+
"try {\n"
|
|
424
|
+
// Note that we have to load the immutable class dynamically here as
|
|
425
|
+
// we want the mutable code to be independent from the immutable code
|
|
426
|
+
// at compile time. It is required to implement dual-compile for
|
|
427
|
+
// mutable and immutable API in blaze.
|
|
428
|
+
" java.lang.Class immutableClass = java.lang.Class.forName(\n"
|
|
429
|
+
" \"$immutable_classname$\");\n"
|
|
430
|
+
"} catch (java.lang.ClassNotFoundException e) {\n"
|
|
431
|
+
// The immutable class can not be found. Custom options are left
|
|
432
|
+
// as unknown fields.
|
|
433
|
+
// TODO(xiaofeng): inform the user with a warning?
|
|
434
|
+
"}\n",
|
|
435
|
+
"immutable_classname", name_resolver_->GetImmutableClassName(file_));
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
// Force descriptor initialization of all dependencies.
|
|
439
|
+
for (int i = 0; i < file_->dependency_count(); i++) {
|
|
440
|
+
if (ShouldIncludeDependency(file_->dependency(i), false)) {
|
|
441
|
+
string dependency = name_resolver_->GetMutableClassName(
|
|
442
|
+
file_->dependency(i));
|
|
443
|
+
printer->Print(
|
|
444
|
+
"$dependency$.getDescriptor();\n",
|
|
445
|
+
"dependency", dependency);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
printer->Outdent();
|
|
450
|
+
printer->Print(
|
|
451
|
+
"}\n");
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
template<typename GeneratorClass, typename DescriptorClass>
|
|
455
|
+
static void GenerateSibling(const string& package_dir,
|
|
456
|
+
const string& java_package,
|
|
457
|
+
const DescriptorClass* descriptor,
|
|
458
|
+
GeneratorContext* context,
|
|
459
|
+
vector<string>* file_list,
|
|
460
|
+
const string& name_suffix,
|
|
461
|
+
GeneratorClass* generator,
|
|
462
|
+
void (GeneratorClass::*pfn)(io::Printer* printer)) {
|
|
463
|
+
string filename = package_dir + descriptor->name() + name_suffix + ".java";
|
|
464
|
+
file_list->push_back(filename);
|
|
465
|
+
|
|
466
|
+
scoped_ptr<io::ZeroCopyOutputStream> output(context->Open(filename));
|
|
467
|
+
io::Printer printer(output.get(), '$');
|
|
468
|
+
|
|
469
|
+
printer.Print(
|
|
470
|
+
"// Generated by the protocol buffer compiler. DO NOT EDIT!\n"
|
|
471
|
+
"// source: $filename$\n"
|
|
472
|
+
"\n",
|
|
473
|
+
"filename", descriptor->file()->name());
|
|
474
|
+
if (!java_package.empty()) {
|
|
475
|
+
printer.Print(
|
|
476
|
+
"package $package$;\n"
|
|
477
|
+
"\n",
|
|
478
|
+
"package", java_package);
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
(generator->*pfn)(&printer);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
void FileGenerator::GenerateSiblings(const string& package_dir,
|
|
485
|
+
GeneratorContext* context,
|
|
486
|
+
vector<string>* file_list) {
|
|
487
|
+
if (MultipleJavaFiles(file_, immutable_api_)) {
|
|
488
|
+
for (int i = 0; i < file_->enum_type_count(); i++) {
|
|
489
|
+
EnumGenerator generator(file_->enum_type(i), immutable_api_,
|
|
490
|
+
context_.get());
|
|
491
|
+
GenerateSibling<EnumGenerator>(package_dir, java_package_,
|
|
492
|
+
file_->enum_type(i),
|
|
493
|
+
context, file_list, "",
|
|
494
|
+
&generator,
|
|
495
|
+
&EnumGenerator::Generate);
|
|
496
|
+
}
|
|
497
|
+
for (int i = 0; i < file_->message_type_count(); i++) {
|
|
498
|
+
if (immutable_api_) {
|
|
499
|
+
GenerateSibling<MessageGenerator>(package_dir, java_package_,
|
|
500
|
+
file_->message_type(i),
|
|
501
|
+
context, file_list,
|
|
502
|
+
"OrBuilder",
|
|
503
|
+
message_generators_[i].get(),
|
|
504
|
+
&MessageGenerator::GenerateInterface);
|
|
505
|
+
}
|
|
506
|
+
GenerateSibling<MessageGenerator>(package_dir, java_package_,
|
|
507
|
+
file_->message_type(i),
|
|
508
|
+
context, file_list, "",
|
|
509
|
+
message_generators_[i].get(),
|
|
510
|
+
&MessageGenerator::Generate);
|
|
511
|
+
}
|
|
512
|
+
if (HasGenericServices(file_)) {
|
|
513
|
+
for (int i = 0; i < file_->service_count(); i++) {
|
|
514
|
+
scoped_ptr<ServiceGenerator> generator(
|
|
515
|
+
generator_factory_->NewServiceGenerator(file_->service(i)));
|
|
516
|
+
GenerateSibling<ServiceGenerator>(package_dir, java_package_,
|
|
517
|
+
file_->service(i),
|
|
518
|
+
context, file_list, "",
|
|
519
|
+
generator.get(),
|
|
520
|
+
&ServiceGenerator::Generate);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
bool FileGenerator::ShouldIncludeDependency(
|
|
527
|
+
const FileDescriptor* descriptor, bool immutable_api) {
|
|
528
|
+
return true;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
} // namespace java
|
|
532
|
+
} // namespace compiler
|
|
533
|
+
} // namespace protobuf
|
|
534
|
+
} // namespace google
|