//todo validate type is compatible with readObject
int expectedTag = WireFormat.makeTag(fd.getNumber(), fd.getLiteType().getWireType());
Object o = messageContext.unknownFieldSet.consumeTag(expectedTag);
if (o != null) {
ByteString byteString = (ByteString) o;
CodedInputStream codedInputStream = byteString.newCodedInput();
return readObject(fd, clazz, codedInputStream, byteString.size());
}
while (true) {
int tag = messageContext.in.readTag();