aboutsummaryrefslogtreecommitdiffstats
path: root/java
Commit message (Collapse)AuthorAgeFilesLines
* Inline unknownFieldData{Equals,HashCode} to generated code.Brian Duff2015-03-202-33/+11
| | | | | | | | | | It turns out dex (apparently) was inlining these protected final methods from ExtendableMessageNano into every message class. Removing these methods from the base class and inlining their code reduces the method count by 2 methods / message when the store_unknown_fields option is on. Change-Id: I0aa09f2016d39939c4c8b8219601793b8fab301f
* Merge commit '7304898f86cd6b2e525772e9cda4ba686b7d3fd2' into HEADBill Yi2015-02-191-0/+13
|\
| * am 46fe64be: DO NOT MERGE Overloading createMessageTyped to accept a tag as ↵Kweku Adams2015-02-111-0/+13
| |\ | | | | | | | | | | | | | | | | | | an integer. * commit '46fe64be0fc97ba82c8ac34f700b43a5e1a7653d': DO NOT MERGE Overloading createMessageTyped to accept a tag as an integer.
| | * DO NOT MERGE Overloading createMessageTyped to accept a tag as an integer.Kweku Adams2015-02-101-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When building, some instances expect createMessageTyped to have the signature (int, Class, long), while others expect (int, Class, int). Simply having the former signature meant that builds expecting the latter would fail. This is a cherrypick of change b2a9d4321578139677c146ce37eba5e27e8f5c79 from master. Change-Id: Ib02dbf66173510f4edea32c7b43e82c1a7a38aa2
| | * DO NOT MERGE Fix bug with large extension field numbers.Brian Duff2015-02-101-8/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, extensions with field numbers greater than 268435455 would result in a compile time error in generated code that looks something like this: Foo.java:3178: error: integer number too large: 3346754610 3346754610); This is because we were trying to represent the tag number (an unsigned int) using a java int constant, but java int constants are signed, and can't exceed Integer.MAX_VALUE. Fixed by declaring it as a long instead, and casting it down to an int in the implementation. This is safe, because the tag value always fits in 32 bis. This is a cherrypick of change b7cf53ba3b46eb17180465d3d3bb151fa4d93f3d from master. Change-Id: If2017bacb4e20af667eaeaf9b65ddc2c30a7709f
* | | Merge "Generate @IntDef annotations for nanoproto enums."Jeff Davidson2015-02-191-1/+23
|\ \ \
| * | | Generate @IntDef annotations for nanoproto enums.Jeff Davidson2015-02-191-1/+23
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | @IntDef is a support library annotation which allows build tools to determine the valid set of values for a given integer field when that field is intended to be restricted like an enum. This avoids the overhead of enums while still allowing for compile-time type checking in most circumstances. Change-Id: Iee02e0b49a8e069f6456572f538e0a0d301fdfd5
* | | Add reset() and position() to CodedOutputByteBufferNano.Shai Barack2015-02-171-0/+17
|/ / | | | | | | Change-Id: Ie2a9e36276ac35e10b3f8d379b5742d50a0374e9
* | Exclude cachedSize when printing fields.Brian Duff2015-01-221-0/+4
| | | | | | | | Change-Id: I85563b74237d38c1e447b7286f5f6e62d57e3d63
* | Upgrade protobuf library to v2.6.1.Jeff Davidson2015-01-20102-118/+180
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous commit was actually between v2.6.0 and v2.6.1. This CL was created by generating a patch with: git format-patch edc5994525c79cd1919859a370837a6ff7c8e308..v2.6.1 and applying this patch to the tree. The patch was clean except for pom.xml, where the packaging type should have previously been changed from "jar" to "bundle". Reran ./configure && make -j12 check to regenerate configure script and makefiles. Change-Id: I817ff426c9a512cbda0246df5aee38f97e762dea
* | Update protobuf library from 2.3 to 2.6.Jeff Davidson2015-01-1594-2105/+21108
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Copied in all files from the open source protobuf project at commit edc5994525c79cd1919859a370837a6ff7c8e308, removing files which have been renamed (COPYING.txt -> LICENSE, README.txt -> README.md). Removed 2.3 prebuilts, which is an approach that will not work due to incompatibility with the 2.6 runtime. Merged in micro/nano-specific changes in the following files: -Android.mk - updated list of C++/Java sources, bumped versions -java/README.txt - merged in micro/nano instructions, bumped versions -java/pom.xml - merged in micro/nano build rules, set packaging to jar -src/Makefile.am - merged in references to micro/nano generators -src/google/protobuf/compiler/javamicro/javamicro_file.h - imported google/protobuf/compiler/code_generator.h and removed redundant OutputDirectory class. -src/google/protobuf/compiler/javanano/javanano_file.h - same -Replaced instances of vector with std::vector as needed to get libprotobuf-cpp-full to compile. Plan to upstream this fix per discussion with protobuf maintainers. Reran autogen.sh to update ./configure and associated scripts. Change-Id: I949d32fb5126f1c05e2a6ed48f6636a4a9b15a48
* | Merge "When no clear() is generated, still initialize fields."Brian Duff2015-01-092-0/+12
|\ \
| * | When no clear() is generated, still initialize fields.Brian Duff2015-01-092-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | https://android-review.googlesource.com/#/c/67890/ removed field initialization from the ctor, making it just call clear() instead. When I added the generate_clear option back (as part of the reftypes compat mode) in https://android-review.googlesource.com/#/c/109530/, I forgot to ensure that what clear() used to do was inlined in the constructor. This change fixes NPEs that are happening for users of reftypes_compat_mode who rely on unset repeated fields being empty arrays rather than null. Change-Id: Idb58746c60f4a4054b7ebb5c3b0e76b16ff88184
* | | Add clone() method support for nano.Brian Duff2015-01-098-5/+117
| | | | | | | | | | | | | | | | | | Upstreamed from Another Place (cr/57247854). Change-Id: I2aaf59544c0f5ae21a51891d8a5eeda1dc722c90
* | | Fix comments.Brian Duff2015-01-071-2/+2
|/ / | | | | | | | | | | Forgot to update these in https://android-review.googlesource.com/#/c/109809/ Change-Id: I53f838e2f134f53964161d9620d5ead00c4a3939
* | Optimize measurement and serialization of nano protos.Charles Munger2015-01-072-28/+250
| | | | | | | | | | | | | | Measuring the serialized size of nano protos is now a zero-alloc operation, and serializing a proto now allocates no memory (other than the output buffer) instead of O(total length of strings). Change-Id: Id5e2ac3bdc4ac56c0bf13d725472da3a00c9baec Signed-off-by: Charles Munger <clm@google.com>
* | Merge "Fix bug with large extension field numbers."Brian Duff2015-01-061-8/+14
|\ \
| * | Fix bug with large extension field numbers.Brian Duff2014-10-031-8/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, extensions with field numbers greater than 268435455 would result in a compile time error in generated code that looks something like this: Foo.java:3178: error: integer number too large: 3346754610 3346754610); This is because we were trying to represent the tag number (an unsigned int) using a java int constant, but java int constants are signed, and can't exceed Integer.MAX_VALUE. Fixed by declaring it as a long instead, and casting it down to an int in the implementation. This is safe, because the tag value always fits in 32 bis. Change-Id: If2017bacb4e20af667eaeaf9b65ddc2c30a7709f
* | | Added an API method in FieldData to allow access to the UnknownField dataBehrooz Khorashadi2014-11-051-0/+17
|/ / | | | | | | Change-Id: I2cd5cfc80dce2a297fcd2511074b2a9d23d39837
* | Make the tag field public.Brian Duff2014-09-021-1/+1
| | | | | | | | Change-Id: Ibfda5bb1ac3150ea90d82a152730be76a2f8bf71
* | Add MessageNano.messageNanoEquals().Brian Duff2014-09-022-0/+29
| | | | | | | | | | | | | | | | Allows two messages to be compared directly for equality without generating an equals method for every generated message. (Ports CL58125010) Change-Id: I92ab5088539d1fd722fee7b5e28a8c825926c3b6
* | Fixed octal printing of bytearraysLinus Tufvesson2014-08-291-1/+1
| | | | | | | | | | | | - Now with 50% less '&' and 100% fewer build breakages! Change-Id: Icf0283220f75cd14b8564b51bd55973e5b7da56b
* | Revert "Fixed octal printing of bytearrays"Max Cai2014-08-281-1/+1
| | | | | | | | | | | | This reverts commit 8b8481868877c9db407d04bdf4843e50d8920806. Change-Id: I0876235b79cd7745312879d0f1b00c6d1c1a1b7a
* | Fixed octal printing of bytearraysLinus Tufvesson2014-08-281-1/+1
| | | | | | | | Change-Id: Ia848d7fae9aeab89e65b00f05cee6c1e6d649d94
* | Merge "Fix how getRepeatedFieldArrayLength works"Max Cai2014-08-051-5/+1
|\ \
| * | Fix how getRepeatedFieldArrayLength worksMax Cai2014-07-031-5/+1
| | | | | | | | | | | | Change-Id: I01921eff008a8e3f7b1fbeb653d15ff8038d3220
* | | Add a hasExtension method to ExtendableMessageNano.Juan Silveira2014-07-172-2/+69
| |/ |/| | | | | | | | | | | It allows checking for the presence of an extension without having to deserialize the field. Change-Id: Id542d20274b2435b7bc2b322740e9984cb8639a1
* | Fix access around unknownFieldData.Max Cai2014-07-154-7/+32
| | | | | | | | | | | | | | | | | | | | | | Instead of publishing its class I chose to encapsulate the troublesome references in equals()/hashCode() in the generated code into superclass methods in ExtendableMessageNano. Changed a couple of java packages in the test suite to catch this issue easier in the future. Change-Id: I43f88411f63bb6f3ffc8d63361f2f77bebf6220a
* | Keep pointers to extension values.Juan Silveira2014-07-148-256/+920
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current implementation of getExtension deserialises the field from bytes and returns a new object every time. This means that changes to those objects are reflected when the messages is serialised unless setExtension is called. It also means that every call to getExtension and setExtension is expensive. This change introduces a FieldData class that contains everything that's known about the field at the time. This can be all the tag/byte[] pairs associated with a given field or an Extension and a value object. This is so that two messages with a repeated extension can be compared even if the extension has been deserialised in one of them but not the other. This change also adds FieldArray class based on SparseArray from the Android compatibility library. This is used in ExtendableMessageNano to make lookup of FieldDatas by their field number faster. Implications: * calling getExtension multiple times deserialises the field only once and returns the same object. * calling setExtension doesn't cause the object to be serialised immediately, that only happens when the container message is serialised. * getExtension is no longer a read-only thread-safe operation. README.txt has been updated to relfect that. * comparison using equals and hashCode continues to work. Bug: 10863158 Change-Id: I81c7cb0c73cc0611a1f7c1eabf5eed259738e8bc
* Fix NPE when clearing an extension in nano protosJan-Willem Maarse2014-05-012-1/+15
| | | | | | | If ExtendableMessageNano doesn't have any unknown fields, trying to clear an extension by setting it to null would throw an NPE. Change-Id: I6abcdfcc0193de44f97b21dd6cc2f40604938a1a
* Support generation of Parcelable nano messages.Jeff Davidson2014-04-256-1/+355
| | | | | | | | | | | | | | | | | | | | This CL adds the "parcelable_messages" option. When enabled, all generated message classes will conform to the Android Parcelable contract. This is achieved by introducing a new parent class for generated classes which implements the required functionality. Since the store_unknown_fields option also makes use of a superclass, ExtendableMessageNano, we have two versions of the new Parcelable superclass: one extending MessageNano, and one extending ExtendableMessageNano. These classes are otherwise identical. As these classes depend on Android framework jars, they are not included in the host .jar build of the nanoproto library. Finally, add a test suite for running tests of Android-specific functionality, as this cannot be done on a desktop JVM. Change-Id: Icc2a257f03317e947f7078dbb9857c3286857497
* Adds --ignore_service nano proto compiler flagJie Dai2014-04-231-0/+8
| | | | | | | | Nano proto compiler normally throws an error if any service is defined. If --ignore-services=true is set, no error is thrown and the service is simply skipped. Change-Id: Id82583555085cc55550d03a485d3f0189885240b
* Don't reset cachedSize to 0 in getSerializedSizeDave Hawkey2014-04-104-6/+35
| | | | | | | | | | | | This avoids a race-condition when cachedSize is momentarily set to 0 for non-empty messages if multiple threads call getSerializedSize (e.g. during serialization). This is a retry of https://android-review.googlesource.com/#/c/88570/. getSerializedSize() has been kept non-final so that messages generated with a previous version of the compiler will not break. Change-Id: I8d8154a10938cde579ae19c55eae55b1e70e0bda
* Revert "Don't reset cachedSize to 0 in getSerializedSize"Wink Saville2014-03-214-39/+7
| | | | This reverts commit c6e12c6702ca764486f952654ba1568f00efe813.
* Don't reset cachedSize to 0 in getSerializedSizeDave Hawkey2014-03-214-7/+39
| | | | | | | | This avoids a race-condition when cachedSize is momentarily set to 0 for non-empty messages if multiple threads call getSerializedSize (e.g. during serialization). Change-Id: I15a8ded92edbf41bf1c8d787960c5bbbc8a323c5
* Merge "Extension overhaul."Max Cai2014-02-177-407/+884
|\
| * Extension overhaul.Max Cai2014-01-107-407/+884
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Get rid of TypeLiteral<T>. It was introduced to read the component type of a List<T> at runtime. But we use arrays everywhere else, and we can always read the component type of an array type at runtime. - Properly read/write "minor" types (e.g. sint32, sfixed32). The old implementation could only read/write data as the "typical" types (one per Java type), e.g. java.lang.Integer -> int32, java.lang.Long -> int64. So if e.g. an extension specifies sfixed32 as the type, it would be read/written in the totally incompatible int32 format. - Properly serialize repeated packed fields. The old implementation doesn't do packed serialization. As an added bonus, and to be more aligned with the rest of protobuf nano / main, repeated packable extensions can deserialize both packed and non-packed data. - Split Extension class into a hierarchy so under typical usage a large chunk of code dealing with primitive type extensions can be removed by ProGuard. Bug: https://code.google.com/p/android/issues/detail?id=62586 Change-Id: I0d692f35cc2a8ad3a5a1cb3ce001282b2356b041
* | Fix repeated packed field merging code for non-packed data.Max Cai2014-01-161-8/+12
| | | | | | | | | | | | | | Enum fix is already included in the previous commit. Bug: https://code.google.com/p/android/issues/detail?id=64893 Change-Id: I9fecff3c8822918a019028eb57fa39b361a2c960
* | Add validation when parsing enum fields.Max Cai2014-01-163-19/+151
| | | | | | | | | | | | | | | | | | | | | | | | Invalid values from the wire are silently ignored. Unlike full/lite, the invalid values are not stored into the unknown fields, because there's no way to get them out from Nano's unknown fields without a matching Extension. Edited README and slightly moved it towards a standalone section for Nano, independent of the Micro section. Change-Id: I2c1eb07f4d6d8f3aea242b8ddd95b9c966f3f177
* | Allow whitespace in nano codegen options.Max Cai2014-01-142-8/+11
| | | | | | | | | | | | So we don't need to keep all option in a single line in the .mk files. Change-Id: I786b879b334cac4cd13b32fabcb76efe53b4ac80
* | Correctness: floating point equality using bits instead of ==.Max Cai2014-01-101-10/+121
| | | | | | | | | | | | | | | | | | | | | | Special values for float and double make it inaccurate to test the equality with ==. The main Java library uses the standard Object.equals() implementation for all fields, which for floating point fields means Float.equals() or Double.equals(). They define equality as bitwise equality, with all NaN representations normalized to the same bit sequence (and therefore equal to each other). This test checks that the nano implementation complies with Object.equals(), so NaN == NaN and +0.0 != -0.0. Change-Id: I97bb4a3687223d8a212c70cd736436b9dd80c1d7
* | Don't serialize required fields whose 'has' flags are unset.Max Cai2014-01-101-1/+6
|/ | | | Change-Id: Ibbe944fff83e44a8f2206e18ee9ec6f10661297a
* Fix MessageNanoPrinter for accessorsAndrew Flynn2013-12-123-25/+102
| | | | | | | | | accessors mode switches proto fields away from being public fields (which is how MessageNanoPrinter found which fields to print via reflection). Add a pass through the methods looking for generated accessor methods to print those as well. Change-Id: I7c47853ecbd5534086f44b25a89dbbe56f63ed03
* Avoid class initializers to help ProGuard.Max Cai2013-12-102-18/+29
| | | | | | | | | | | | | | | | | | | Class initializers prevent ProGuard from inlining any methods because it thinks the class initializer may have side effects. This is true for static methods, but instance methods can still be inlined, because to have an instance you will have touched the class and any class initializers would have run. But ProGuard only starts inlining instance methods of classes with class initializers from v4.11b6, and Android uses v4.4 now. This change tries to avoid the class initializers as much as possible, by delaying the initialization of the empty array and some fields' saved defaults until when they're needed. However, if the message hosts any extensions, they must be public static final and therefore introducing the class initializer. In that case we won't bother with lazy initialization. Change-Id: I00d8296f6eb0023112b93ee135cdb28dbd52b0b8
* Nano: don't generate accessor methods for nested methodsAndrew Flynn2013-12-092-19/+47
| | | | | | | | | For nested message objects, don't generate accessor methods because they have a default value that is not a valid value (null), so there is no reason to have get/set/has/clear methods for them. Clients and protos (while serializing) can check against the invalid value to see if it's been set. Change-Id: Ic63400889581271b8cbcd9c45c84519d4921fd4b
* Align with main: two ways of parsing repeated packable fields.Max Cai2013-11-183-0/+74
| | | | | | | | | | | | | | | It is a requirement for parsing code to handle packed and unpacked forms on the wire for repeated packable fields. This change aligns the javanano's behavior with the java's. Bonus: optimize array length calculation when parsing repeated fixed-size-element-type fields. Bonus 2: lose "xMemoizedSerializedSize" for repeated enum fields, and make the serialized size calculation match that for repeated int32 fields. Change-Id: I8a06103d9290234adb46b0971b5ed155544fe86a
* Merge "Update MessageNano#toString() to return mostly valid TextFormat."Max Cai2013-11-153-40/+84
|\
| * Update MessageNano#toString() to return mostly valid TextFormat.Nicholas Seckar2013-11-153-40/+84
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The output of toString is now aligned with that used by non-nano and C++ runtimes, with the exception of groups. Groups should be serialized using a camelized name (e.g. "FooBar" rather than "foo_bar") however the nano runtime does not have information on which fields are groups. Changes are: - bytes fields are output within double-quotes, non-printable characters are output as octal escape sequences (i.e. \NNN); - field identifiers are output in underscored format; - unset fields are not output (rather than printing "null"); - the type name of the root message is not output. With these changes the nano toString, normal toString, and C++'s DebugString all produce equivalent output when given the same message. (Provided that message uses no deprecated features.) Change-Id: Id4791d73822846db29344db9f7bc3781c3e183a6
* | Minimize method count for nanoproto.Tom Chao2013-11-112-2/+84
|/ | | | | | | | | | | - Migrates getCachedSize to the MessageNano parent class to save one method per message. - Create ExtendableMessageNano parent class for protos with extensions, this saves the getExtension and setExtension methods on the relevant messages. - getSerializedSize's default case (with no fields to serialize) also migrate to the parent class, which saves methods on empty messages. - Container classes become interfaces to save the constructor. Change-Id: I81f1a1b6d6a660096835e9df3ea20456655aab4a
* Allow for ref-type arrays containing null elements.Aurash Mahbod2013-11-051-2/+31
| | | | | | | | | | | | | | | | | | | Strip the null elements out before serializing the array. This is helpful in the cases where the user wants to construct an array of an inexact size for serialization. For example: User constructs array of size 5 because they anticipate adding more than 1 element before serialization. Only 3 get added, so the array looks like [Obj, Obj, Obj, null, null]. This would curently crash without this CL. All repeated fields of ref-type elements can contain null elements: repeated strings, repeated bytes, and repeated messages/groups. Change-Id: I117391c868c9a436536d70d6151780e9cc7e8227 Conflicts: src/google/protobuf/compiler/javanano/javanano_message_field.cc