Index: third_party/protobuf/javanano/README.md |
diff --git a/third_party/protobuf/javanano/README.md b/third_party/protobuf/javanano/README.md |
deleted file mode 100644 |
index e19b90b1c275024c668f74e2e9d8eb0bbc4023ce..0000000000000000000000000000000000000000 |
--- a/third_party/protobuf/javanano/README.md |
+++ /dev/null |
@@ -1,398 +0,0 @@ |
-Protocol Buffers - Google's data interchange format |
-=================================================== |
- |
-[](https://travis-ci.org/google/protobuf) |
- |
-Copyright 2008 Google Inc. |
- |
-This directory contains the Java Protocol Buffers Nano runtime library. |
- |
-Installation - With Maven |
-------------------------- |
- |
-The Protocol Buffers build is managed using Maven. If you would |
-rather build without Maven, see below. |
- |
-1) Install Apache Maven if you don't have it: |
- |
- http://maven.apache.org/ |
- |
-2) Build the C++ code, or obtain a binary distribution of protoc. If |
- you install a binary distribution, make sure that it is the same |
- version as this package. If in doubt, run: |
- |
- $ protoc --version |
- |
- You will need to place the protoc executable in ../src. (If you |
- built it yourself, it should already be there.) |
- |
-3) Run the tests: |
- |
- $ mvn test |
- |
- If some tests fail, this library may not work correctly on your |
- system. Continue at your own risk. |
- |
-4) Install the library into your Maven repository: |
- |
- $ mvn install |
- |
-5) If you do not use Maven to manage your own build, you can build a |
- .jar file to use: |
- |
- $ mvn package |
- |
- The .jar will be placed in the "target" directory. |
- |
-Installation - Without Maven |
----------------------------- |
- |
-If you would rather not install Maven to build the library, you may |
-follow these instructions instead. Note that these instructions skip |
-running unit tests. |
- |
-1) Build the C++ code, or obtain a binary distribution of protoc. If |
- you install a binary distribution, make sure that it is the same |
- version as this package. If in doubt, run: |
- |
- $ protoc --version |
- |
- If you built the C++ code without installing, the compiler binary |
- should be located in ../src. |
- |
-2) Invoke protoc to build DescriptorProtos.java: |
- |
- $ protoc --java_out=src/main/java -I../src \ |
- ../src/google/protobuf/descriptor.proto |
- |
-3) Compile the code in src/main/java using whatever means you prefer. |
- |
-4) Install the classes wherever you prefer. |
- |
-Nano version |
------------- |
- |
-JavaNano is a special code generator and runtime library designed specially for |
-resource-restricted systems, like Android. It is very resource-friendly in both |
-the amount of code and the runtime overhead. Here is an overview of JavaNano |
-features compared with the official Java protobuf: |
- |
-- No descriptors or message builders. |
-- All messages are mutable; fields are public Java fields. |
-- For optional fields only, encapsulation behind setter/getter/hazzer/ |
- clearer functions is opt-in, which provide proper 'has' state support. |
-- For proto2, if not opted in, has state (field presence) is not available. |
- Serialization outputs all fields not equal to their defaults |
- (see important implications below). |
- The behavior is consistent with proto3 semantics. |
-- Required fields (proto2 only) are always serialized. |
-- Enum constants are integers; protection against invalid values only |
- when parsing from the wire. |
-- Enum constants can be generated into container interfaces bearing |
- the enum's name (so the referencing code is in Java style). |
-- CodedInputByteBufferNano can only take byte[] (not InputStream). |
-- Similarly CodedOutputByteBufferNano can only write to byte[]. |
-- Repeated fields are in arrays, not ArrayList or Vector. Null array |
- elements are allowed and silently ignored. |
-- Full support for serializing/deserializing repeated packed fields. |
-- Support extensions (in proto2). |
-- Unset messages/groups are null, not an immutable empty default |
- instance. |
-- toByteArray(...) and mergeFrom(...) are now static functions of |
- MessageNano. |
-- The 'bytes' type translates to the Java type byte[]. |
- |
-The generated messages are not thread-safe for writes, but may be |
-used simultaneously from multiple threads in a read-only manner. |
-In other words, an appropriate synchronization mechanism (such as |
-a ReadWriteLock) must be used to ensure that a message, its |
-ancestors, and descendants are not accessed by any other threads |
-while the message is being modified. Field reads, getter methods |
-(but not getExtension(...)), toByteArray(...), writeTo(...), |
-getCachedSize(), and getSerializedSize() are all considered read-only |
-operations. |
- |
-IMPORTANT: If you have fields with defaults and opt out of accessors |
- |
-How fields with defaults are serialized has changed. Because we don't |
-keep "has" state, any field equal to its default is assumed to be not |
-set and therefore is not serialized. Consider the situation where we |
-change the default value of a field. Senders compiled against an older |
-version of the proto continue to match against the old default, and |
-don't send values to the receiver even though the receiver assumes the |
-new default value. Therefore, think carefully about the implications |
-of changing the default value. Alternatively, turn on accessors and |
-enjoy the benefit of the explicit has() checks. |
- |
-IMPORTANT: If you have "bytes" fields with non-empty defaults |
- |
-Because the byte buffer is now of mutable type byte[], the default |
-static final cannot be exposed through a public field. Each time a |
-message's constructor or clear() function is called, the default value |
-(kept in a private byte[]) is cloned. This causes a small memory |
-penalty. This is not a problem if the field has no default or is an |
-empty default. |
- |
-Nano Generator options |
----------------------- |
- |
-``` |
-java_package -> <file-name>|<package-name> |
-java_outer_classname -> <file-name>|<package-name> |
-java_multiple_files -> true or false |
-java_nano_generate_has -> true or false [DEPRECATED] |
-optional_field_style -> default or accessors |
-enum_style -> c or java |
-ignore_services -> true or false |
-parcelable_messages -> true or false |
-generate_intdefs -> true or false |
-``` |
- |
-**java_package=\<file-name\>|\<package-name\>** (no default) |
- |
- This allows overriding the 'java_package' option value |
- for the given file from the command line. Use multiple |
- java_package options to override the option for multiple |
- files. The final Java package for each file is the value |
- of this command line option if present, or the value of |
- the same option defined in the file if present, or the |
- proto package if present, or the default Java package. |
- |
-**java_outer_classname=\<file-name\>|\<outer-classname\>** (no default) |
- |
- This allows overriding the 'java_outer_classname' option |
- for the given file from the command line. Use multiple |
- java_outer_classname options to override the option for |
- multiple files. The final Java outer class name for each |
- file is the value of this command line option if present, |
- or the value of the same option defined in the file if |
- present, or the file name converted to CamelCase. This |
- outer class will nest all classes and integer constants |
- generated from file-scope messages and enums. |
- |
-**java_multiple_files={true,false}** (no default) |
- |
- This allows overriding the 'java_multiple_files' option |
- in all source files and their imported files from the |
- command line. The final value of this option for each |
- file is the value defined in this command line option, or |
- the value of the same option defined in the file if |
- present, or false. This specifies whether to generate |
- package-level classes for the file-scope messages in the |
- same Java package as the outer class (instead of nested |
- classes in the outer class). File-scope enum constants |
- are still generated as integer constants in the outer |
- class. This affects the fully qualified references in the |
- Java code. NOTE: because the command line option |
- overrides the value for all files and their imported |
- files, using this option inconsistently may result in |
- incorrect references to the imported messages and enum |
- constants. |
- |
-**java_nano_generate_has={true,false}** (default: false) |
- |
- DEPRECATED. Use optional_field_style=accessors. |
- |
- If true, generates a public boolean variable has\<fieldname\> |
- accompanying each optional or required field (not present for |
- repeated fields, groups or messages). It is set to false initially |
- and upon clear(). If parseFrom(...) reads the field from the wire, |
- it is set to true. This is a way for clients to inspect the "has" |
- value upon parse. If it is set to true, writeTo(...) will ALWAYS |
- output that field (even if field value is equal to its |
- default). |
- |
- IMPORTANT: This option costs an extra 4 bytes per primitive field in |
- the message. Think carefully about whether you really need this. In |
- many cases reading the default works and determining whether the |
- field was received over the wire is irrelevant. |
- |
-**optional_field_style={default,accessors,reftypes}** (default: default) |
- |
- Defines the style of the generated code for fields. |
- |
- * default |
- |
- In the default style, optional fields translate into public mutable |
- Java fields, and the serialization process is as discussed in the |
- "IMPORTANT" section above. |
- |
- * accessors |
- |
- When set to 'accessors', each optional field is encapsulated behind |
- 4 accessors, namely get\<fieldname\>(), set\<fieldname\>(), has\<fieldname\>() |
- and clear\<fieldname\>() methods, with the standard semantics. The hazzer's |
- return value determines whether a field is serialized, so this style is |
- useful when you need to serialize a field with the default value, or check |
- if a field has been explicitly set to its default value from the wire. |
- |
- In the 'accessors' style, required and nested message fields are still |
- translated to one public mutable Java field each, repeated fields are still |
- translated to arrays. No accessors are generated for them. |
- |
- IMPORTANT: When using the 'accessors' style, ProGuard should always |
- be enabled with optimization (don't use -dontoptimize) and allowing |
- access modification (use -allowaccessmodification). This removes the |
- unused accessors and maybe inline the rest at the call sites, |
- reducing the final code size. |
- TODO(maxtroy): find ProGuard config that would work the best. |
- |
- * reftypes |
- |
- When set to 'reftypes', each proto field is generated as a public Java |
- field. For primitive types, these fields use the Java reference types |
- such as java.lang.Integer instead of primitive types such as int. |
- |
- In the 'reftypes' style, fields are initialized to null (or empty |
- arrays for repeated fields), and their default values are not available. |
- They are serialized over the wire based on equality to null. |
- |
- The 'reftypes' mode has some additional cost due to autoboxing and usage |
- of reference types. In practice, many boxed types are cached, and so don't |
- result in object creation. However, references do take slightly more memory |
- than primitives. |
- |
- The 'reftypes' mode is useful when you want to be able to serialize fields |
- with default values, or check if a field has been explicitly set to the |
- default over the wire without paying the extra method cost of the |
- 'accessors' mode. |
- |
- Note that if you attempt to write null to a required field in the reftypes |
- mode, serialization of the proto will cause a NullPointerException. This is |
- an intentional indicator that you must set required fields. |
- |
- NOTE |
- optional_field_style=accessors or reftypes cannot be used together with |
- java_nano_generate_has=true. If you need the 'has' flag for any |
- required field (you have no reason to), you can only use |
- java_nano_generate_has=true. |
- |
-**enum_style={c,java}** (default: c) |
- |
- Defines where to put the int constants generated from enum members. |
- |
- * c |
- |
- Use C-style, so the enum constants are available at the scope where |
- the enum is defined. A file-scope enum's members are referenced like |
- 'FileOuterClass.ENUM_VALUE'; a message-scope enum's members are |
- referenced as 'Message.ENUM_VALUE'. The enum name is unavailable. |
- This complies with the Micro code generator's behavior. |
- |
- * java |
- |
- Use Java-style, so the enum constants are available under the enum |
- name and referenced like 'EnumName.ENUM_VALUE' (they are still int |
- constants). The enum name becomes the name of a public interface, at |
- the scope where the enum is defined. If the enum is file-scope and |
- the java_multiple_files option is on, the interface will be defined |
- in its own file. To reduce code size, this interface should not be |
- implemented and ProGuard shrinking should be used, so after the Java |
- compiler inlines all referenced enum constants into the call sites, |
- the interface remains unused and can be removed by ProGuard. |
- |
-**ignore_services={true,false}** (default: false) |
- |
- Skips services definitions. |
- |
- Nano doesn't support services. By default, if a service is defined |
- it will generate a compilation error. If this flag is set to true, |
- services will be silently ignored, instead. |
- |
-**parcelable_messages={true,false}** (default: false) |
- |
- Android-specific option to generate Parcelable messages. |
- |
-**generate_intdefs={true,false}** (default: false) |
- Android-specific option to generate @IntDef annotations for enums. |
- |
- If turned on, an '@IntDef' annotation (a public @interface) will be |
- generated for each enum, and every integer parameter and return |
- value in the generated code meant for this enum will be annotated |
- with it. This interface is generated with the same name and at the |
- same place as the enum members' container interfaces described |
- above under 'enum_style=java', regardless of the enum_style option |
- used. When this is combined with enum_style=java, the interface |
- will be both the '@IntDef' annotation and the container of the enum |
- members; otherwise the interface has an empty body. |
- |
- Your app must declare a compile-time dependency on the |
- android-support-annotations library. |
- |
- For more information on how these @IntDef annotations help with |
- compile-time type safety, see: |
- https://sites.google.com/a/android.com/tools/tech-docs/support-annotations |
- and |
- https://developer.android.com/reference/android/support/annotation/IntDef.html |
- |
- |
-To use nano protobufs within the Android repo: |
----------------------------------------------- |
- |
-- Set 'LOCAL_PROTOC_OPTIMIZE_TYPE := nano' in your local .mk file. |
- When building a Java library or an app (package) target, the build |
- system will add the Java nano runtime library to the |
- LOCAL_STATIC_JAVA_LIBRARIES variable, so you don't need to. |
-- Set 'LOCAL_PROTO_JAVA_OUTPUT_PARAMS := ...' in your local .mk file |
- for any command-line options you need. Use commas to join multiple |
- options. In the nano flavor only, whitespace surrounding the option |
- names and values are ignored, so you can use backslash-newline or |
- '+=' to structure your make files nicely. |
-- The options will be applied to *all* proto files in LOCAL_SRC_FILES |
- when you build a Java library or package. In case different options |
- are needed for different proto files, build separate Java libraries |
- and reference them in your main target. Note: you should make sure |
- that, for each separate target, all proto files imported from any |
- proto file in LOCAL_SRC_FILES are included in LOCAL_SRC_FILES. This |
- is because the generator has to assume that the imported files are |
- built using the same options, and will generate code that reference |
- the fields and enums from the imported files using the same code |
- style. |
-- Hint: 'include $(CLEAR_VARS)' resets all LOCAL_ variables, including |
- the two above. |
- |
-To use nano protobufs outside of Android repo: |
----------------------------------------------- |
- |
-- Link with the generated jar file |
- \<protobuf-root\>java/target/protobuf-java-2.3.0-nano.jar. |
-- Invoke with --javanano_out, e.g.: |
-``` |
-./protoc '--javanano_out=\ |
- java_package=src/proto/simple-data.proto|my_package,\ |
- java_outer_classname=src/proto/simple-data.proto|OuterName\ |
- :.' src/proto/simple-data.proto |
-``` |
- |
-Contributing to nano: |
---------------------- |
- |
-Please add/edit tests in NanoTest.java. |
- |
-Please run the following steps to test: |
- |
-- cd external/protobuf |
-- ./configure |
-- Run "make -j12 check" and verify all tests pass. |
-- cd java |
-- Run "mvn test" and verify all tests pass. |
-- cd ../../.. |
-- . build/envsetup.sh |
-- lunch 1 |
-- "make -j12 aprotoc libprotobuf-java-2.3.0-nano aprotoc-test-nano-params NanoAndroidTest" and |
- check for build errors. |
-- Plug in an Android device or start an emulator. |
-- adb install -r out/target/product/generic/data/app/NanoAndroidTest.apk |
-- Run: |
- "adb shell am instrument -w com.google.protobuf.nano.test/android.test.InstrumentationTestRunner" |
- and verify all tests pass. |
-- repo sync -c -j256 |
-- "make -j12" and check for build errors |
- |
-Usage |
------ |
- |
-The complete documentation for Protocol Buffers is available via the |
-web at: |
- |
- https://developers.google.com/protocol-buffers/ |