| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Change-Id: I845ee1ab1005d25c8d77a8c2ed801c0f7b7c847b
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is less ideal from a dex count perspective because it requires a
new variable for each message, and because most apps have proguard
rules that will ensure that CREATOR classes are retained.
However, it is required to be able to use nano protos inside of AIDL
files, as the autogenerated AIDL code fails to compile otherwise. This
is a substantial benefit as it allows for backwards-compatible
parameters and return types in AIDL methods along the lines of
safeparcel.
Bug: 19084705
Change-Id: I66a2c0424b96cf8ff6b631b186cc4f9407dfc1f4
|
|
|
|
|
|
|
|
|
|
| |
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
|
|\ |
|
| |\
| | |
| | |
| | |
| | |
| | |
| | | |
an integer.
* commit '46fe64be0fc97ba82c8ac34f700b43a5e1a7653d':
DO NOT MERGE Overloading createMessageTyped to accept a tag as an integer.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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
|
|\ \ \ |
|
| |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
@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
|
|/ /
| |
| |
| | |
Change-Id: Ie2a9e36276ac35e10b3f8d379b5742d50a0374e9
|
| |
| |
| |
| | |
Change-Id: I85563b74237d38c1e447b7286f5f6e62d57e3d63
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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
|
|\ \ |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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
|
| | |
| | |
| | |
| | |
| | |
| | | |
Upstreamed from Another Place (cr/57247854).
Change-Id: I2aaf59544c0f5ae21a51891d8a5eeda1dc722c90
|
|/ /
| |
| |
| |
| |
| | |
Forgot to update these in https://android-review.googlesource.com/#/c/109809/
Change-Id: I53f838e2f134f53964161d9620d5ead00c4a3939
|
| |
| |
| |
| |
| |
| |
| | |
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>
|
|\ \ |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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
|
|/ /
| |
| |
| | |
Change-Id: I2cd5cfc80dce2a297fcd2511074b2a9d23d39837
|
| |
| |
| |
| | |
Change-Id: Ibfda5bb1ac3150ea90d82a152730be76a2f8bf71
|
| |
| |
| |
| |
| |
| |
| |
| | |
Allows two messages to be compared directly for equality without
generating an equals method for every generated message.
(Ports CL58125010)
Change-Id: I92ab5088539d1fd722fee7b5e28a8c825926c3b6
|
| |
| |
| |
| |
| |
| | |
- Now with 50% less '&' and 100% fewer build breakages!
Change-Id: Icf0283220f75cd14b8564b51bd55973e5b7da56b
|
| |
| |
| |
| |
| |
| | |
This reverts commit 8b8481868877c9db407d04bdf4843e50d8920806.
Change-Id: I0876235b79cd7745312879d0f1b00c6d1c1a1b7a
|
| |
| |
| |
| | |
Change-Id: Ia848d7fae9aeab89e65b00f05cee6c1e6d649d94
|
|\ \ |
|
| | |
| | |
| | |
| | | |
Change-Id: I01921eff008a8e3f7b1fbeb653d15ff8038d3220
|
| |/
|/|
| |
| |
| |
| |
| | |
It allows checking for the presence of an extension without having to
deserialize the field.
Change-Id: Id542d20274b2435b7bc2b322740e9984cb8639a1
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
This reverts commit c6e12c6702ca764486f952654ba1568f00efe813.
|
|
|
|
|
|
|
|
| |
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
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- 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
|
| |
| |
| |
| |
| |
| |
| | |
Enum fix is already included in the previous commit.
Bug: https://code.google.com/p/android/issues/detail?id=64893
Change-Id: I9fecff3c8822918a019028eb57fa39b361a2c960
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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
|
| |
| |
| |
| |
| |
| | |
So we don't need to keep all option in a single line in the .mk files.
Change-Id: I786b879b334cac4cd13b32fabcb76efe53b4ac80
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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
|
|/
|
|
| |
Change-Id: Ibbe944fff83e44a8f2206e18ee9ec6f10661297a
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|\ |
|