Add full support for unknown fields in storage service.

This commit is contained in:
Greyson Parrelli 2021-10-29 11:09:13 -04:00
parent 4f3c545eda
commit 62ee60df82
14 changed files with 28 additions and 68 deletions

View file

@ -54,7 +54,7 @@ repositories {
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.10.0'
artifact = 'com.google.protobuf:protoc:3.11.4'
}
generateProtoTasks {
all().each { task ->

View file

@ -420,8 +420,8 @@ dependencyVerification {
['com.google.j2objc:j2objc-annotations:1.3',
'21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b'],
['com.google.protobuf:protobuf-javalite:3.10.0',
'215a94dbe100130295906b531bb72a26965c7ac8fcd9a75bf8054a8ac2abf4b4'],
['com.google.protobuf:protobuf-javalite:3.11.4',
'8cacea2f7a042dabae295c509dcdbfe32a49aa3708eec6ddb8efd8593aa0b4a3'],
['com.google.zxing:android-integration:3.1.0',
'89e56aadf1164bd71e57949163c53abf90af368b51669c0d4a47a163335f95c4'],

View file

@ -27,8 +27,8 @@ dependencyVerification {
['androidx.versionedparcelable:versionedparcelable:1.1.1',
'57e8d93260d18d5b9007c9eed3c64ad159de90c8609ebfc74a347cbd514535a4'],
['com.google.protobuf:protobuf-javalite:3.10.0',
'215a94dbe100130295906b531bb72a26965c7ac8fcd9a75bf8054a8ac2abf4b4'],
['com.google.protobuf:protobuf-javalite:3.11.4',
'8cacea2f7a042dabae295c509dcdbfe32a49aa3708eec6ddb8efd8593aa0b4a3'],
['org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32',
'e1ff6f55ee9e7591dcc633f7757bac25a7edb1cc7f738b37ec652f10f66a4145'],

View file

@ -51,7 +51,7 @@ dependencyResolutionManagement {
alias('material-material').to('com.google.android.material:material:1.3.0')
// Google
alias('google-protobuf-javalite').to('com.google.protobuf:protobuf-javalite:3.10.0')
alias('google-protobuf-javalite').to('com.google.protobuf:protobuf-javalite:3.11.4')
alias('google-libphonenumber').to('com.googlecode.libphonenumber:libphonenumber:8.12.17')
alias('google-play-services-maps').to('com.google.android.gms:play-services-maps:16.1.0')
alias('google-play-services-auth').to('com.google.android.gms:play-services-auth:16.0.1')

View file

@ -78,8 +78,8 @@ dependencyVerification {
['androidx.viewpager:viewpager:1.0.0',
'147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682'],
['com.google.protobuf:protobuf-javalite:3.10.0',
'215a94dbe100130295906b531bb72a26965c7ac8fcd9a75bf8054a8ac2abf4b4'],
['com.google.protobuf:protobuf-javalite:3.11.4',
'8cacea2f7a042dabae295c509dcdbfe32a49aa3708eec6ddb8efd8593aa0b4a3'],
['org.greenrobot:eventbus:3.0.0',
'180d4212467df06f2fbc9c8d8a2984533ac79c87769ad883bc421612f0b4e17c'],

View file

@ -141,8 +141,8 @@ dependencyVerification {
['com.google.android.material:material:1.3.0',
'cbf1e7d69fc236cdadcbd1ec5f6c0a1a41aca6ad1ef7f8481058956270ab1f0a'],
['com.google.protobuf:protobuf-javalite:3.10.0',
'215a94dbe100130295906b531bb72a26965c7ac8fcd9a75bf8054a8ac2abf4b4'],
['com.google.protobuf:protobuf-javalite:3.11.4',
'8cacea2f7a042dabae295c509dcdbfe32a49aa3708eec6ddb8efd8593aa0b4a3'],
['com.squareup.okhttp3:okhttp:3.12.10',
'3cb8e21cd3ab10d390448f5a475c960732efab583a09c39f06f866a7ed819ebc'],

View file

@ -96,8 +96,8 @@ dependencyVerification {
['com.google.android.gms:play-services-wallet:18.1.3',
'e19d1f4650f51ce2202c092cbe174058860b6558cf26c8be37a732eff3ae1864'],
['com.google.protobuf:protobuf-javalite:3.10.0',
'215a94dbe100130295906b531bb72a26965c7ac8fcd9a75bf8054a8ac2abf4b4'],
['com.google.protobuf:protobuf-javalite:3.11.4',
'8cacea2f7a042dabae295c509dcdbfe32a49aa3708eec6ddb8efd8593aa0b4a3'],
['com.squareup.okhttp3:okhttp:3.12.10',
'3cb8e21cd3ab10d390448f5a475c960732efab583a09c39f06f866a7ed819ebc'],

View file

@ -135,8 +135,8 @@ dependencyVerification {
['com.google.android.material:material:1.3.0',
'cbf1e7d69fc236cdadcbd1ec5f6c0a1a41aca6ad1ef7f8481058956270ab1f0a'],
['com.google.protobuf:protobuf-javalite:3.10.0',
'215a94dbe100130295906b531bb72a26965c7ac8fcd9a75bf8054a8ac2abf4b4'],
['com.google.protobuf:protobuf-javalite:3.11.4',
'8cacea2f7a042dabae295c509dcdbfe32a49aa3708eec6ddb8efd8593aa0b4a3'],
['org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32',
'e1ff6f55ee9e7591dcc633f7757bac25a7edb1cc7f738b37ec652f10f66a4145'],

View file

@ -78,8 +78,8 @@ dependencyVerification {
['androidx.viewpager:viewpager:1.0.0',
'147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682'],
['com.google.protobuf:protobuf-javalite:3.10.0',
'215a94dbe100130295906b531bb72a26965c7ac8fcd9a75bf8054a8ac2abf4b4'],
['com.google.protobuf:protobuf-javalite:3.11.4',
'8cacea2f7a042dabae295c509dcdbfe32a49aa3708eec6ddb8efd8593aa0b4a3'],
['org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32',
'e1ff6f55ee9e7591dcc633f7757bac25a7edb1cc7f738b37ec652f10f66a4145'],

View file

@ -52,56 +52,16 @@ public final class ProtoUtil {
/**
* This takes two arguments: A proto model, and the bytes of another proto model of the same type.
* This will take the proto model and append onto it any unknown fields from the serialized proto
* model. Why is this useful? Well, if you do {@code myProto.parseFrom(data).toBuilder().build()},
* you will lose any unknown fields that were in {@code data}. This lets you create a new model
* and plop the unknown fields back on from some other instance.
*
* A notable limitation of the current implementation is, however, that it does not support adding
* back unknown fields to *inner* messages. Unknown fields on inner messages will simply not be
* acknowledged.
* model.
*/
@SuppressWarnings({"rawtypes", "unchecked"})
public static <Proto extends GeneratedMessageLite> Proto combineWithUnknownFields(Proto proto, byte[] serializedWithUnknownFields)
throws InvalidProtocolBufferException
{
if (serializedWithUnknownFields == null) {
return proto;
}
Proto protoWithUnknownFields = (Proto) proto.getParserForType().parseFrom(serializedWithUnknownFields);
byte[] unknownFields = getUnknownFields(protoWithUnknownFields);
if (unknownFields == null) {
return proto;
}
byte[] combined = ByteUtil.combine(proto.toByteArray(), unknownFields);
return (Proto) proto.getParserForType().parseFrom(combined);
}
@SuppressWarnings("rawtypes")
private static byte[] getUnknownFields(GeneratedMessageLite proto) {
try {
Field field = GeneratedMessageLite.class.getDeclaredField("unknownFields");
field.setAccessible(true);
UnknownFieldSetLite unknownFields = (UnknownFieldSetLite) field.get(proto);
if (unknownFields == null || unknownFields.getSerializedSize() == 0) {
return null;
}
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
CodedOutputStream outputStream = CodedOutputStream.newInstance(byteStream);
unknownFields.writeTo(outputStream);
outputStream.flush();
return byteStream.toByteArray();
} catch (NoSuchFieldException | IllegalAccessException | IOException e) {
Log.w(TAG, "Failed to retrieve unknown fields.", e);
return null;
}
return (Proto) proto.newBuilderForType()
.mergeFrom(serializedWithUnknownFields)
.mergeFrom(proto)
.build();
}
/**

View file

@ -236,6 +236,6 @@ public class ProtoUtilTest {
TestInnerMessageWithNewString reparsedTest = TestInnerMessageWithNewString.parseFrom(combined.toByteArray());
Assert.assertEquals("a2", reparsedTest.getInner().getA());
Assert.assertEquals("", reparsedTest.getInner().getB());
Assert.assertEquals("b1", reparsedTest.getInner().getB());
}
}

View file

@ -12,8 +12,8 @@ dependencyVerification {
['com.fasterxml.jackson.core:jackson-databind:2.9.9.2',
'fb262d42ea2de98044b62d393950a5aa050435fec38bbcadf2325cf7dc41b848'],
['com.google.protobuf:protobuf-javalite:3.10.0',
'215a94dbe100130295906b531bb72a26965c7ac8fcd9a75bf8054a8ac2abf4b4'],
['com.google.protobuf:protobuf-javalite:3.11.4',
'8cacea2f7a042dabae295c509dcdbfe32a49aa3708eec6ddb8efd8593aa0b4a3'],
['com.googlecode.libphonenumber:libphonenumber:8.12.17',
'729483057ef874b01537da8395d67e23b419d504f8ff29ddf5f69da21bf816ac'],

View file

@ -120,8 +120,8 @@ dependencyVerification {
['com.google.android.material:material:1.3.0',
'cbf1e7d69fc236cdadcbd1ec5f6c0a1a41aca6ad1ef7f8481058956270ab1f0a'],
['com.google.protobuf:protobuf-javalite:3.10.0',
'215a94dbe100130295906b531bb72a26965c7ac8fcd9a75bf8054a8ac2abf4b4'],
['com.google.protobuf:protobuf-javalite:3.11.4',
'8cacea2f7a042dabae295c509dcdbfe32a49aa3708eec6ddb8efd8593aa0b4a3'],
['org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32',
'e1ff6f55ee9e7591dcc633f7757bac25a7edb1cc7f738b37ec652f10f66a4145'],

View file

@ -27,8 +27,8 @@ dependencyVerification {
['androidx.versionedparcelable:versionedparcelable:1.1.1',
'57e8d93260d18d5b9007c9eed3c64ad159de90c8609ebfc74a347cbd514535a4'],
['com.google.protobuf:protobuf-javalite:3.10.0',
'215a94dbe100130295906b531bb72a26965c7ac8fcd9a75bf8054a8ac2abf4b4'],
['com.google.protobuf:protobuf-javalite:3.11.4',
'8cacea2f7a042dabae295c509dcdbfe32a49aa3708eec6ddb8efd8593aa0b4a3'],
['org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32',
'e1ff6f55ee9e7591dcc633f7757bac25a7edb1cc7f738b37ec652f10f66a4145'],