31 package com.google.protobuf;
34 import java.io.IOException;
35 import java.nio.ByteBuffer;
36 import java.util.ArrayList;
37 import java.util.List;
40 @SuppressWarnings(
"unchecked")
41 final class ExtensionSchemaLite extends ExtensionSchema<ExtensionDescriptor> {
44 boolean hasExtensions(MessageLite prototype) {
45 return prototype instanceof GeneratedMessageLite.ExtendableMessage;
49 FieldSet<ExtensionDescriptor> getExtensions(Object
message) {
50 return ((GeneratedMessageLite.ExtendableMessage<?, ?>)
message).extensions;
54 void setExtensions(Object
message, FieldSet<ExtensionDescriptor> extensions) {
55 ((GeneratedMessageLite.ExtendableMessage<?, ?>)
message).extensions = extensions;
59 FieldSet<ExtensionDescriptor> getMutableExtensions(Object
message) {
60 return ((GeneratedMessageLite.ExtendableMessage<?, ?>)
message).ensureExtensionsAreMutable();
64 void makeImmutable(Object
message) {
65 getExtensions(
message).makeImmutable();
69 <UT, UB> UB parseExtension(
71 Object extensionObject,
72 ExtensionRegistryLite extensionRegistry,
73 FieldSet<ExtensionDescriptor> extensions,
75 UnknownFieldSchema<UT, UB> unknownFieldSchema)
77 GeneratedMessageLite.GeneratedExtension<?, ?>
extension =
78 (GeneratedMessageLite.GeneratedExtension<?, ?>) extensionObject;
86 List<Double> list =
new ArrayList<Double>();
87 reader.readDoubleList(list);
93 List<Float> list =
new ArrayList<Float>();
94 reader.readFloatList(list);
100 List<Long> list =
new ArrayList<Long>();
101 reader.readInt64List(list);
107 List<Long> list =
new ArrayList<Long>();
108 reader.readUInt64List(list);
114 List<Integer> list =
new ArrayList<Integer>();
115 reader.readInt32List(list);
121 List<Long> list =
new ArrayList<Long>();
122 reader.readFixed64List(list);
128 List<Integer> list =
new ArrayList<Integer>();
129 reader.readFixed32List(list);
135 List<Boolean> list =
new ArrayList<Boolean>();
136 reader.readBoolList(list);
142 List<Integer> list =
new ArrayList<Integer>();
143 reader.readUInt32List(list);
149 List<Integer> list =
new ArrayList<Integer>();
150 reader.readSFixed32List(list);
156 List<Long> list =
new ArrayList<Long>();
157 reader.readSFixed64List(list);
163 List<Integer> list =
new ArrayList<Integer>();
164 reader.readSInt32List(list);
170 List<Long> list =
new ArrayList<Long>();
171 reader.readSInt64List(list);
177 List<Integer> list =
new ArrayList<Integer>();
178 reader.readEnumList(list);
180 SchemaUtil.filterUnknownEnumList(
190 throw new IllegalStateException(
191 "Type cannot be packed: " +
extension.descriptor.getLiteType());
197 if (
extension.getLiteType() == WireFormat.FieldType.ENUM) {
198 int number = reader.readInt32();
199 Object enumValue =
extension.descriptor.getEnumType().findValueByNumber(
number);
200 if (enumValue ==
null) {
201 return SchemaUtil.storeUnknownEnum(
202 fieldNumber,
number, unknownFields, unknownFieldSchema);
210 value = reader.readDouble();
213 value = reader.readFloat();
216 value = reader.readInt64();
219 value = reader.readUInt64();
222 value = reader.readInt32();
225 value = reader.readFixed64();
228 value = reader.readFixed32();
231 value = reader.readBool();
234 value = reader.readBytes();
237 value = reader.readUInt32();
240 value = reader.readSFixed32();
243 value = reader.readSFixed64();
246 value = reader.readSInt32();
249 value = reader.readSInt64();
253 value = reader.readString();
258 extension.getMessageDefaultInstance().getClass(), extensionRegistry);
264 extension.getMessageDefaultInstance().getClass(), extensionRegistry);
268 throw new IllegalStateException(
"Shouldn't reach here.");
277 Object oldValue = extensions.getField(
extension.descriptor);
278 if (oldValue !=
null) {
279 value = Internal.mergeMessage(oldValue,
value);
288 return unknownFields;
293 GeneratedMessageLite.ExtensionDescriptor
descriptor =
294 (GeneratedMessageLite.ExtensionDescriptor)
extension.getKey();
299 void serializeExtension(Writer writer,
Map.Entry<?, ?>
extension)
throws IOException {
300 GeneratedMessageLite.ExtensionDescriptor
descriptor =
301 (GeneratedMessageLite.ExtensionDescriptor)
extension.getKey();
305 SchemaUtil.writeDoubleList(
312 SchemaUtil.writeFloatList(
319 SchemaUtil.writeInt64List(
326 SchemaUtil.writeUInt64List(
333 SchemaUtil.writeInt32List(
340 SchemaUtil.writeFixed64List(
347 SchemaUtil.writeFixed32List(
354 SchemaUtil.writeBoolList(
361 SchemaUtil.writeBytesList(
365 SchemaUtil.writeUInt32List(
372 SchemaUtil.writeSFixed32List(
379 SchemaUtil.writeSFixed64List(
386 SchemaUtil.writeSInt32List(
393 SchemaUtil.writeSInt64List(
400 SchemaUtil.writeInt32List(
407 SchemaUtil.writeStringList(
413 if (
data !=
null && !
data.isEmpty()) {
414 SchemaUtil.writeGroupList(
418 Protobuf.getInstance().schemaFor(
data.get(0).getClass()));
425 if (
data !=
null && !
data.isEmpty()) {
426 SchemaUtil.writeMessageList(
430 Protobuf.getInstance().schemaFor(
data.get(0).getClass()));
489 Protobuf.getInstance().schemaFor(
extension.getValue().getClass()));
495 Protobuf.getInstance().schemaFor(
extension.getValue().getClass()));
502 Object findExtensionByNumber(
503 ExtensionRegistryLite extensionRegistry, MessageLite defaultInstance,
int number) {
504 return extensionRegistry.findLiteExtensionByNumber(defaultInstance,
number);
508 void parseLengthPrefixedMessageSetItem(
510 Object extensionObject,
511 ExtensionRegistryLite extensionRegistry,
512 FieldSet<ExtensionDescriptor> extensions)
514 GeneratedMessageLite.GeneratedExtension<?, ?>
extension =
515 (GeneratedMessageLite.GeneratedExtension<?, ?>) extensionObject;
517 reader.readMessage(
extension.getMessageDefaultInstance().getClass(), extensionRegistry);
522 void parseMessageSetItem(
524 Object extensionObject,
525 ExtensionRegistryLite extensionRegistry,
526 FieldSet<ExtensionDescriptor> extensions)
528 GeneratedMessageLite.GeneratedExtension<?, ?>
extension =
529 (GeneratedMessageLite.GeneratedExtension<?, ?>) extensionObject;
530 Object
value =
extension.getMessageDefaultInstance().newBuilderForType().buildPartial();
532 Reader reader = BinaryReader.newInstance(ByteBuffer.wrap(
data.toByteArray()),
true);
534 Protobuf.getInstance().mergeFrom(
value, reader, extensionRegistry);
537 if (reader.getFieldNumber() != Reader.READ_DONE) {
538 throw InvalidProtocolBufferException.invalidEndTag();