if (fd == null) { byte[] value = in.readByteArray(); tagHandler.onTag(fieldNumber, null, value); } else if (fd.getType() == Type.STRING) { String value = in.readString(); tagHandler.onTag(fieldNumber, fd, value); } else if (fd.getType() == Type.BYTES) { byte[] value = in.readByteArray(); tagHandler.onTag(fieldNumber, fd, value); } else if (fd.getType() == Type.MESSAGE) { int length = in.readRawVarint32(); int oldLimit = in.pushLimit(length); tagHandler.onStartNested(fieldNumber, fd); parseMessage(tagHandler, fd.getMessageType(), in); tagHandler.onEndNested(fieldNumber, fd); in.checkLastTagWas(0); in.popLimit(oldLimit); tagHandler.onStartNested(fieldNumber, null); parseMessage(tagHandler, null, in); in.checkLastTagWas(WireFormat.makeTag(fieldNumber, WireFormat.WIRETYPE_END_GROUP)); tagHandler.onEndNested(fieldNumber, null); } else { tagHandler.onStartNested(fieldNumber, fd); parseMessage(tagHandler, fd.getMessageType(), in); in.checkLastTagWas(WireFormat.makeTag(fieldNumber, WireFormat.WIRETYPE_END_GROUP)); tagHandler.onEndNested(fieldNumber, fd); if (fd == null) {
@Override public void onEnd() { if (wrappedEnum != null) { EnumDescriptor enumDescriptor = (EnumDescriptor) getDescriptor(); String enumConstantName = enumDescriptor.findValueByNumber(wrappedEnum).getName(); FieldDescriptor fd = wrapperDescriptor.findFieldByNumber(WRAPPED_ENUM); messageHandler.onStart(enumDescriptor); messageHandler.onTag(WRAPPED_ENUM, fd, enumConstantName); messageHandler.onEnd(); } else if (wrappedMessage != null) { try { Descriptor messageDescriptor = (Descriptor) getDescriptor(); ProtobufParser.INSTANCE.parse(messageHandler, messageDescriptor, wrappedMessage); } catch (IOException e) { throw new RuntimeException(e); } } } };