aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/main/java/com
Commit message (Collapse)AuthorAgeFilesLines
* Handle 0-length byte buffers in micro and nano protobufsAndre Eisenbach2015-05-042-0/+4
| | | | Change-Id: I845ee1ab1005d25c8d77a8c2ed801c0f7b7c847b
* Throw OutOfSpaceException instead of IllegalArgumentException.Charles Munger2015-04-211-1/+10
| | | | | | | | | | | | | When a MessageNano containing a String is serialized into a buffer that is too small to contain it, and the buffer's boundary happens to be where the string field's length delimiting varint is serialized, and the string's length and 3*length have the same length when encoded as a varint, an IllegalArgumentException is thrown rather than an OutOfSpaceException. Github issue: https://github.com/google/protobuf/issues/292 Change-Id: If478d68cf15bfd0662252d008e42b2bf1ff1c75e
* 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
* | | 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-2048-58/+77
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-1540-1906/+12331
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* | Add clone() method support for nano.Brian Duff2015-01-096-2/+94
| | | | | | | | | | | | 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-071-28/+214
| | | | | | | | | | | | | | 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-021-0/+26
| | | | | | | | | | | | | | | | 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-171-0/+12
| |/ |/| | | | | | | | | | | 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-151-0/+25
| | | | | | | | | | | | | | | | | | | | | | 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-145-250/+776
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-011-1/+1
| | | | | | | 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
* Don't reset cachedSize to 0 in getSerializedSizeDave Hawkey2014-04-102-6/+14
| | | | | | | | | | | | 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-212-15/+7
| | | | This reverts commit c6e12c6702ca764486f952654ba1568f00efe813.
* Don't reset cachedSize to 0 in getSerializedSizeDave Hawkey2014-03-212-7/+15
| | | | | | | | 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
* Extension overhaul.Max Cai2014-01-105-344/+702
| | | | | | | | | | | | | | | | | | | | | | - 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 MessageNanoPrinter for accessorsAndrew Flynn2013-12-122-23/+65
| | | | | | | | | 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
* Merge "Update MessageNano#toString() to return mostly valid TextFormat."Max Cai2013-11-152-18/+59
|\
| * Update MessageNano#toString() to return mostly valid TextFormat.Nicholas Seckar2013-11-152-18/+59
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Implement hashCode() and equals() behind a generator option.Brian Duff2013-10-252-4/+236
| | | | | | | | | | | | | | | | The option is only called 'generate_equals' because: - equals() is the main thing; hashCode() is there only to complement equals(); - it's shorter; - toString() should not be included in this option because it's more for debugging and it's more likely to stop ProGuard from working well. Also shortened the "has bit" expression; was ((bitField & mask) == mask), now ((bitField & mask) != 0). Both the Java code and the bytecode are slightly shorter. Change-Id: Ic309a08a60883bf454eb6612679aa99611620e76
* Protect against null repeated fields.Brian Duff2013-10-141-1/+1
| | | | | | | | | There's no distinction between a repeated field being null and being empty. In both cases, nothing is sent on the wire. Clients might for whatever reason inadvertently set a repeated field to null, so protect against that and treat it just as if the field was empty. Change-Id: Ic3846f7f2189d6cfff6f8ef3ca217daecc3c8be7
* Fix roundtrip failure with groups when unknown fields are enabled.Nicholas Seckar2013-10-041-2/+7
| | | | | | | | | | | | | | | | When parsing a group, the group's end tag should not be stored within the message's unknownFieldData. Not only does this waste space, it is also output the next time the group is serialized, resulting in two end tags for that group. The resulting bytes are not always a valid protocol buffer and may fail to parse. This change ensures that group end tags do not result in an unknownFieldData entry, and that messages with groups can be roundtripped without corruption. Change-Id: I240f858a7217a7652b756598c34aacad5dcc3363 Conflicts: java/src/test/java/com/google/protobuf/NanoTest.java
* Make it possible to use MessageNano.mergeFrom without casting.Brian Duff2013-07-081-3/+3
| | | | | | | | | | You can now do: MyMessage foo = MessageNano.mergeFrom(new MyMessage(), bytes); without having to cast the message returned from mergeFrom. Change-Id: Ibb2ad327f75855d45352ad304c7f054f20dd29c9
* Nano support for extensions and unknown fields.Brian Duff2013-06-245-3/+402
| | | | | | | | | | | | | | | | | | | | You can use the processor option store_unknown_fields to switch this support on: aprotoc --javanano_out=store_unknown_fields=true:/tmp/out A separate option for extensions isn't required. Support for unknown fields must be turned on to allow storing and retrieving extensions, because they are just stored as unknown fields. If unknown fields are switched on, extension related code will be generated when a proto message includes an extension range, or an extension is encountered. By default, store_unknown_fields is false. No additional code is generated, and the generator will error out if protos contain extension ranges or extensions. Change-Id: I1e034c9e8f3305612953f72438189a7da6ed2167
* Add toString() method to MessageNano.Andrew Flynn2013-06-042-0/+187
| | | | | | | | | | | | - All of the real work for printing the proto is actually done in MessageNanoPrinter. - Uses reflection to find proto-defined fields and prints those. - Prints all fields, even defaults and nulls. - Also added a simple test to make sure it handles all proto types well. Tried not to make the test too brittle (but hey it's testing a toString() so how flexible can it be) Change-Id: I3e360ef8b0561041e010c1f3445ec45ecdcd2559
* Nano protobufs.Ulas Kirazci2013-04-016-0/+2006
| | | | | | | | | | | | | | | | | | Like micro protobufs except: - No setter/getter/hazzer functions. - Has state is not available. Outputs all fields != their default. - CodedInputStream can only take byte[] (not InputStream). - Repeated fields are in arrays, not ArrayList or Vector. - Unset messages/groups are null, not "defaultInstance()". - Required fields are always serialized. To use: - Link libprotobuf-java-2.3.0-nano runtime. - Use LOCAL_PROTOC_OPTIMIZE_TYPE := nano Change-Id: I7429015b3c5f7f38b7be01eb2d4927f7a9999c80
* When computing Group and Message size use getSerializedSize.Wink Saville2012-06-111-2/+2
| | | | | Bug: 6589939 Change-Id: I3050a99b08edf48301314163d41ea6f8080ffcdb
* Fix bug in skipRawBytes if request is larger than buffer.Wink Saville2011-06-202-2/+2
| | | | | | | Original solution by Scott Barta this change adds tests and also fixes the same bug that was in CodedInputStream. Change-Id: Idb49691822b3f292c5092edc52db4e153e9da49a
* Changed speed optimization for strings.Wink Saville2010-06-072-102/+32
| | | | | | | | | | | Removed use of StringUtf8Micro and instead use an extra byte array instance variable directly in the class. This allows the list returned for repeated strings to be a String instead of a StringUtf8Micro making the class compatible with existing code. Removed PerfTimer.java which isn't used. Change-Id: Ie6acfb40f98f59a48c1a795d86f715078f9611f5
* Add support for Java micro protobuf's to protobuf-2.3.0.Wink Saville2010-05-297-0/+2410
| | | | | | See README.android for additional information. Change-Id: I6693e405c0d651eacacd3227a876129865dd0d3c
* Add protobuf 2.3.0 sourcesWink Saville2010-05-2925-2585/+402
| | | | | | | This is the contents of protobuf-2.3.0.tar.bz2 from http://code.google.com/p/protobuf/downloads/list. Change-Id: Idfde09ce7ef5ac027b07ee83f2674fbbed5c30b2
* Add support for Java micro protobuf's to protobuf-2.2.0a.Wink Saville2010-05-287-0/+2410
| | | | | | See README.android for additional information. Change-Id: I9c5ef2eec484cc87e32841f39060f8f27b8e8472