31 package com.google.protobuf;
33 import java.io.IOException;
36 abstract class UnknownFieldSchema<
T, B> {
39 abstract boolean shouldDiscardUnknownFields(Reader reader);
57 abstract B newBuilder();
60 abstract T toImmutable(B
fields);
69 abstract T getFromMessage(Object
message);
72 abstract B getBuilderFromMessage(Object
message);
75 abstract void setBuilderToMessage(Object
message, B builder);
78 abstract void makeImmutable(Object
message);
81 final boolean mergeOneFieldFrom(B unknownFields, Reader reader)
throws IOException {
82 int tag = reader.getTag();
83 int fieldNumber = WireFormat.getTagFieldNumber(tag);
84 switch (WireFormat.getTagWireType(tag)) {
85 case WireFormat.WIRETYPE_VARINT:
86 addVarint(unknownFields, fieldNumber, reader.readInt64());
88 case WireFormat.WIRETYPE_FIXED32:
89 addFixed32(unknownFields, fieldNumber, reader.readFixed32());
91 case WireFormat.WIRETYPE_FIXED64:
92 addFixed64(unknownFields, fieldNumber, reader.readFixed64());
94 case WireFormat.WIRETYPE_LENGTH_DELIMITED:
95 addLengthDelimited(unknownFields, fieldNumber, reader.readBytes());
97 case WireFormat.WIRETYPE_START_GROUP:
98 final B subFields = newBuilder();
99 int endGroupTag = WireFormat.makeTag(fieldNumber, WireFormat.WIRETYPE_END_GROUP);
100 mergeFrom(subFields, reader);
101 if (endGroupTag != reader.getTag()) {
102 throw InvalidProtocolBufferException.invalidEndTag();
104 addGroup(unknownFields, fieldNumber, toImmutable(subFields));
106 case WireFormat.WIRETYPE_END_GROUP:
109 throw InvalidProtocolBufferException.invalidWireType();
113 final void mergeFrom(B unknownFields, Reader reader)
throws IOException {
115 if (reader.getFieldNumber() == Reader.READ_DONE
116 || !mergeOneFieldFrom(unknownFields, reader)) {
122 abstract void writeTo(
T unknownFields, Writer writer)
throws IOException;
124 abstract void writeAsMessageSetTo(
T unknownFields, Writer writer)
throws IOException;
130 abstract int getSerializedSizeAsMessageSet(
T message);
132 abstract int getSerializedSize(
T unknowns);