OLD | NEW |
1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format |
2 // Copyright 2008 Google Inc. All rights reserved. | 2 // Copyright 2008 Google Inc. All rights reserved. |
3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ |
4 // | 4 // |
5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
7 // met: | 7 // met: |
8 // | 8 // |
9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
(...skipping 21 matching lines...) Expand all Loading... |
32 | 32 |
33 import com.google.protobuf.AbstractMessageLite.Builder.LimitedInputStream; | 33 import com.google.protobuf.AbstractMessageLite.Builder.LimitedInputStream; |
34 import com.google.protobuf.GeneratedMessageLite.EqualsVisitor.NotEqualsException
; | 34 import com.google.protobuf.GeneratedMessageLite.EqualsVisitor.NotEqualsException
; |
35 import com.google.protobuf.Internal.BooleanList; | 35 import com.google.protobuf.Internal.BooleanList; |
36 import com.google.protobuf.Internal.DoubleList; | 36 import com.google.protobuf.Internal.DoubleList; |
37 import com.google.protobuf.Internal.FloatList; | 37 import com.google.protobuf.Internal.FloatList; |
38 import com.google.protobuf.Internal.IntList; | 38 import com.google.protobuf.Internal.IntList; |
39 import com.google.protobuf.Internal.LongList; | 39 import com.google.protobuf.Internal.LongList; |
40 import com.google.protobuf.Internal.ProtobufList; | 40 import com.google.protobuf.Internal.ProtobufList; |
41 import com.google.protobuf.WireFormat.FieldType; | 41 import com.google.protobuf.WireFormat.FieldType; |
42 | |
43 import java.io.IOException; | 42 import java.io.IOException; |
44 import java.io.InputStream; | 43 import java.io.InputStream; |
45 import java.io.ObjectStreamException; | 44 import java.io.ObjectStreamException; |
46 import java.io.Serializable; | 45 import java.io.Serializable; |
47 import java.lang.reflect.InvocationTargetException; | 46 import java.lang.reflect.InvocationTargetException; |
48 import java.lang.reflect.Method; | 47 import java.lang.reflect.Method; |
49 import java.util.ArrayList; | 48 import java.util.ArrayList; |
50 import java.util.Collections; | 49 import java.util.Collections; |
51 import java.util.Iterator; | 50 import java.util.Iterator; |
52 import java.util.List; | 51 import java.util.List; |
53 import java.util.Map; | 52 import java.util.Map; |
54 | 53 |
55 /** | 54 /** |
56 * Lite version of {@link GeneratedMessage}. | 55 * Lite version of {@link GeneratedMessage}. |
57 * | 56 * |
58 * @author kenton@google.com Kenton Varda | 57 * @author kenton@google.com Kenton Varda |
59 */ | 58 */ |
60 public abstract class GeneratedMessageLite< | 59 public abstract class GeneratedMessageLite< |
61 MessageType extends GeneratedMessageLite<MessageType, BuilderType>, | 60 MessageType extends GeneratedMessageLite<MessageType, BuilderType>, |
62 BuilderType extends GeneratedMessageLite.Builder<MessageType, BuilderType>> | 61 BuilderType extends GeneratedMessageLite.Builder<MessageType, BuilderType>> |
63 extends AbstractMessageLite<MessageType, BuilderType> { | 62 extends AbstractMessageLite<MessageType, BuilderType> { |
64 | 63 |
65 /** For use by generated code only. Lazily initialized to reduce allocations.
*/ | 64 /** For use by generated code only. Lazily initialized to reduce allocations.
*/ |
66 protected UnknownFieldSetLite unknownFields = UnknownFieldSetLite.getDefaultIn
stance(); | 65 protected UnknownFieldSetLite unknownFields = UnknownFieldSetLite.getDefaultIn
stance(); |
67 | 66 |
68 /** For use by generated code only. */ | 67 /** For use by generated code only. */ |
69 protected int memoizedSerializedSize = -1; | 68 protected int memoizedSerializedSize = -1; |
70 | 69 |
71 @Override | 70 @Override |
72 @SuppressWarnings("unchecked") // Guaranteed by runtime. | 71 @SuppressWarnings("unchecked") // Guaranteed by runtime. |
73 public final Parser<MessageType> getParserForType() { | 72 public final Parser<MessageType> getParserForType() { |
74 return (Parser<MessageType>) dynamicMethod(MethodToInvoke.GET_PARSER); | 73 return (Parser<MessageType>) dynamicMethod(MethodToInvoke.GET_PARSER); |
75 } | 74 } |
76 | 75 |
77 @Override | 76 @Override |
78 @SuppressWarnings("unchecked") // Guaranteed by runtime. | 77 @SuppressWarnings("unchecked") // Guaranteed by runtime. |
79 public final MessageType getDefaultInstanceForType() { | 78 public final MessageType getDefaultInstanceForType() { |
80 return (MessageType) dynamicMethod(MethodToInvoke.GET_DEFAULT_INSTANCE); | 79 return (MessageType) dynamicMethod(MethodToInvoke.GET_DEFAULT_INSTANCE); |
(...skipping 25 matching lines...) Expand all Loading... |
106 @SuppressWarnings("unchecked") // Guaranteed by runtime | 105 @SuppressWarnings("unchecked") // Guaranteed by runtime |
107 @Override | 106 @Override |
108 public int hashCode() { | 107 public int hashCode() { |
109 if (memoizedHashCode == 0) { | 108 if (memoizedHashCode == 0) { |
110 HashCodeVisitor visitor = new HashCodeVisitor(); | 109 HashCodeVisitor visitor = new HashCodeVisitor(); |
111 visit(visitor, (MessageType) this); | 110 visit(visitor, (MessageType) this); |
112 memoizedHashCode = visitor.hashCode; | 111 memoizedHashCode = visitor.hashCode; |
113 } | 112 } |
114 return memoizedHashCode; | 113 return memoizedHashCode; |
115 } | 114 } |
116 | 115 |
117 @SuppressWarnings("unchecked") // Guaranteed by runtime | 116 @SuppressWarnings("unchecked") // Guaranteed by runtime |
118 int hashCode(HashCodeVisitor visitor) { | 117 int hashCode(HashCodeVisitor visitor) { |
119 if (memoizedHashCode == 0) { | 118 if (memoizedHashCode == 0) { |
120 int inProgressHashCode = visitor.hashCode; | 119 int inProgressHashCode = visitor.hashCode; |
121 visitor.hashCode = 0; | 120 visitor.hashCode = 0; |
122 visit(visitor, (MessageType) this); | 121 visit(visitor, (MessageType) this); |
123 memoizedHashCode = visitor.hashCode; | 122 memoizedHashCode = visitor.hashCode; |
124 visitor.hashCode = inProgressHashCode; | 123 visitor.hashCode = inProgressHashCode; |
125 } | 124 } |
126 return memoizedHashCode; | 125 return memoizedHashCode; |
127 } | 126 } |
128 | 127 |
129 @SuppressWarnings("unchecked") // Guaranteed by isInstance + runtime | 128 @SuppressWarnings("unchecked") // Guaranteed by isInstance + runtime |
130 @Override | 129 @Override |
131 public boolean equals(Object other) { | 130 public boolean equals(Object other) { |
132 if (this == other) { | 131 if (this == other) { |
133 return true; | 132 return true; |
134 } | 133 } |
135 | 134 |
136 if (!getDefaultInstanceForType().getClass().isInstance(other)) { | 135 if (!getDefaultInstanceForType().getClass().isInstance(other)) { |
137 return false; | 136 return false; |
138 } | 137 } |
139 | 138 |
140 try { | 139 try { |
141 visit(EqualsVisitor.INSTANCE, (MessageType) other); | 140 visit(EqualsVisitor.INSTANCE, (MessageType) other); |
142 } catch (NotEqualsException e) { | 141 } catch (NotEqualsException e) { |
143 return false; | 142 return false; |
144 } | 143 } |
145 return true; | 144 return true; |
146 } | 145 } |
147 | 146 |
148 /** | 147 /** |
149 * Same as {@link #equals(Object)} but throws {@code NotEqualsException}. | 148 * Same as {@link #equals(Object)} but throws {@code NotEqualsException}. |
150 */ | 149 */ |
151 @SuppressWarnings("unchecked") // Guaranteed by isInstance + runtime | 150 @SuppressWarnings("unchecked") // Guaranteed by isInstance + runtime |
152 boolean equals(EqualsVisitor visitor, MessageLite other) { | 151 boolean equals(EqualsVisitor visitor, MessageLite other) { |
153 if (this == other) { | 152 if (this == other) { |
154 return true; | 153 return true; |
155 } | 154 } |
156 | 155 |
157 if (!getDefaultInstanceForType().getClass().isInstance(other)) { | 156 if (!getDefaultInstanceForType().getClass().isInstance(other)) { |
158 return false; | 157 return false; |
159 } | 158 } |
160 | 159 |
161 visit(visitor, (MessageType) other); | 160 visit(visitor, (MessageType) other); |
162 return true; | 161 return true; |
163 } | 162 } |
164 | 163 |
165 // The general strategy for unknown fields is to use an UnknownFieldSetLite th
at is treated as | 164 // The general strategy for unknown fields is to use an UnknownFieldSetLite th
at is treated as |
166 // mutable during the parsing constructor and immutable after. This allows us
to avoid | 165 // mutable during the parsing constructor and immutable after. This allows us
to avoid |
167 // any unnecessary intermediary allocations while reducing the generated code
size. | 166 // any unnecessary intermediary allocations while reducing the generated code
size. |
168 | 167 |
169 /** | 168 /** |
170 * Lazily initializes unknown fields. | 169 * Lazily initializes unknown fields. |
171 */ | 170 */ |
172 private final void ensureUnknownFieldsInitialized() { | 171 private final void ensureUnknownFieldsInitialized() { |
173 if (unknownFields == UnknownFieldSetLite.getDefaultInstance()) { | 172 if (unknownFields == UnknownFieldSetLite.getDefaultInstance()) { |
174 unknownFields = UnknownFieldSetLite.newInstance(); | 173 unknownFields = UnknownFieldSetLite.newInstance(); |
175 } | 174 } |
176 } | 175 } |
177 | 176 |
178 /** | 177 /** |
179 * Called by subclasses to parse an unknown field. For use by generated code o
nly. | 178 * Called by subclasses to parse an unknown field. For use by generated code o
nly. |
180 * | 179 * |
181 * @return {@code true} unless the tag is an end-group tag. | 180 * @return {@code true} unless the tag is an end-group tag. |
182 */ | 181 */ |
183 protected boolean parseUnknownField(int tag, CodedInputStream input) throws IO
Exception { | 182 protected boolean parseUnknownField(int tag, CodedInputStream input) throws IO
Exception { |
184 // This will avoid the allocation of unknown fields when a group tag is enco
untered. | 183 // This will avoid the allocation of unknown fields when a group tag is enco
untered. |
185 if (WireFormat.getTagWireType(tag) == WireFormat.WIRETYPE_END_GROUP) { | 184 if (WireFormat.getTagWireType(tag) == WireFormat.WIRETYPE_END_GROUP) { |
186 return false; | 185 return false; |
187 } | 186 } |
188 | 187 |
189 ensureUnknownFieldsInitialized(); | 188 ensureUnknownFieldsInitialized(); |
190 return unknownFields.mergeFieldFrom(tag, input); | 189 return unknownFields.mergeFieldFrom(tag, input); |
191 } | 190 } |
192 | 191 |
193 /** | 192 /** |
194 * Called by subclasses to parse an unknown field. For use by generated code o
nly. | 193 * Called by subclasses to parse an unknown field. For use by generated code o
nly. |
195 */ | 194 */ |
196 protected void mergeVarintField(int tag, int value) { | 195 protected void mergeVarintField(int tag, int value) { |
197 ensureUnknownFieldsInitialized(); | 196 ensureUnknownFieldsInitialized(); |
198 unknownFields.mergeVarintField(tag, value); | 197 unknownFields.mergeVarintField(tag, value); |
199 } | 198 } |
200 | 199 |
201 /** | 200 /** |
202 * Called by subclasses to parse an unknown field. For use by generated code o
nly. | 201 * Called by subclasses to parse an unknown field. For use by generated code o
nly. |
203 */ | 202 */ |
204 protected void mergeLengthDelimitedField(int fieldNumber, ByteString value) { | 203 protected void mergeLengthDelimitedField(int fieldNumber, ByteString value) { |
205 ensureUnknownFieldsInitialized(); | 204 ensureUnknownFieldsInitialized(); |
206 unknownFields.mergeLengthDelimitedField(fieldNumber, value); | 205 unknownFields.mergeLengthDelimitedField(fieldNumber, value); |
207 } | 206 } |
208 | 207 |
209 /** | 208 /** |
210 * Called by subclasses to complete parsing. For use by generated code only. | 209 * Called by subclasses to complete parsing. For use by generated code only. |
211 */ | 210 */ |
212 protected void makeImmutable() { | 211 protected void makeImmutable() { |
213 dynamicMethod(MethodToInvoke.MAKE_IMMUTABLE); | 212 dynamicMethod(MethodToInvoke.MAKE_IMMUTABLE); |
214 | 213 |
215 unknownFields.makeImmutable(); | 214 unknownFields.makeImmutable(); |
216 } | 215 } |
217 | 216 |
218 @Override | 217 @Override |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 * Same as {@link #dynamicMethod(MethodToInvoke, Object, Object)} with {@code
null} padding. | 284 * Same as {@link #dynamicMethod(MethodToInvoke, Object, Object)} with {@code
null} padding. |
286 */ | 285 */ |
287 protected Object dynamicMethod(MethodToInvoke method) { | 286 protected Object dynamicMethod(MethodToInvoke method) { |
288 return dynamicMethod(method, null, null); | 287 return dynamicMethod(method, null, null); |
289 } | 288 } |
290 | 289 |
291 void visit(Visitor visitor, MessageType other) { | 290 void visit(Visitor visitor, MessageType other) { |
292 dynamicMethod(MethodToInvoke.VISIT, visitor, other); | 291 dynamicMethod(MethodToInvoke.VISIT, visitor, other); |
293 unknownFields = visitor.visitUnknownFields(unknownFields, other.unknownField
s); | 292 unknownFields = visitor.visitUnknownFields(unknownFields, other.unknownField
s); |
294 } | 293 } |
295 | 294 |
296 /** | 295 /** |
297 * Merge some unknown fields into the {@link UnknownFieldSetLite} for this | 296 * Merge some unknown fields into the {@link UnknownFieldSetLite} for this |
298 * message. | 297 * message. |
299 * | 298 * |
300 * <p>For use by generated code only. | 299 * <p>For use by generated code only. |
301 */ | 300 */ |
302 protected final void mergeUnknownFields(UnknownFieldSetLite unknownFields) { | 301 protected final void mergeUnknownFields(UnknownFieldSetLite unknownFields) { |
303 this.unknownFields = UnknownFieldSetLite.mutableCopyOf(this.unknownFields, u
nknownFields); | 302 this.unknownFields = UnknownFieldSetLite.mutableCopyOf(this.unknownFields, u
nknownFields); |
304 } | 303 } |
305 | 304 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 (BuilderType) getDefaultInstanceForType().newBuilderForType(); | 351 (BuilderType) getDefaultInstanceForType().newBuilderForType(); |
353 builder.mergeFrom(buildPartial()); | 352 builder.mergeFrom(buildPartial()); |
354 return builder; | 353 return builder; |
355 } | 354 } |
356 | 355 |
357 @Override | 356 @Override |
358 public MessageType buildPartial() { | 357 public MessageType buildPartial() { |
359 if (isBuilt) { | 358 if (isBuilt) { |
360 return instance; | 359 return instance; |
361 } | 360 } |
362 | 361 |
363 instance.makeImmutable(); | 362 instance.makeImmutable(); |
364 | 363 |
365 isBuilt = true; | 364 isBuilt = true; |
366 return instance; | 365 return instance; |
367 } | 366 } |
368 | 367 |
369 @Override | 368 @Override |
370 public final MessageType build() { | 369 public final MessageType build() { |
371 MessageType result = buildPartial(); | 370 MessageType result = buildPartial(); |
372 if (!result.isInitialized()) { | 371 if (!result.isInitialized()) { |
373 throw newUninitializedMessageException(result); | 372 throw newUninitializedMessageException(result); |
374 } | 373 } |
375 return result; | 374 return result; |
376 } | 375 } |
377 | 376 |
378 @Override | 377 @Override |
379 protected BuilderType internalMergeFrom(MessageType message) { | 378 protected BuilderType internalMergeFrom(MessageType message) { |
380 return mergeFrom(message); | 379 return mergeFrom(message); |
381 } | 380 } |
382 | 381 |
383 /** All subclasses implement this. */ | 382 /** All subclasses implement this. */ |
384 public BuilderType mergeFrom(MessageType message) { | 383 public BuilderType mergeFrom(MessageType message) { |
385 copyOnWrite(); | 384 copyOnWrite(); |
386 instance.visit(MergeFromVisitor.INSTANCE, message); | 385 instance.visit(MergeFromVisitor.INSTANCE, message); |
387 return (BuilderType) this; | 386 return (BuilderType) this; |
388 } | 387 } |
389 | 388 |
390 @Override | 389 @Override |
391 public MessageType getDefaultInstanceForType() { | 390 public MessageType getDefaultInstanceForType() { |
392 return defaultInstance; | 391 return defaultInstance; |
393 } | 392 } |
394 | 393 |
395 @Override | 394 @Override |
396 public BuilderType mergeFrom( | 395 public BuilderType mergeFrom( |
397 com.google.protobuf.CodedInputStream input, | 396 com.google.protobuf.CodedInputStream input, |
398 com.google.protobuf.ExtensionRegistryLite extensionRegistry) | 397 com.google.protobuf.ExtensionRegistryLite extensionRegistry) |
399 throws IOException { | 398 throws IOException { |
400 copyOnWrite(); | 399 copyOnWrite(); |
401 try { | 400 try { |
402 instance.dynamicMethod(MethodToInvoke.MERGE_FROM_STREAM, input, extensio
nRegistry); | 401 instance.dynamicMethod(MethodToInvoke.MERGE_FROM_STREAM, input, extensio
nRegistry); |
403 } catch (RuntimeException e) { | 402 } catch (RuntimeException e) { |
404 if (e.getCause() instanceof IOException) { | 403 if (e.getCause() instanceof IOException) { |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 extensions = extensions.clone(); | 458 extensions = extensions.clone(); |
460 } | 459 } |
461 extensions.mergeFrom(((ExtendableMessage) other).extensions); | 460 extensions.mergeFrom(((ExtendableMessage) other).extensions); |
462 } | 461 } |
463 | 462 |
464 @Override | 463 @Override |
465 final void visit(Visitor visitor, MessageType other) { | 464 final void visit(Visitor visitor, MessageType other) { |
466 super.visit(visitor, other); | 465 super.visit(visitor, other); |
467 extensions = visitor.visitExtensions(extensions, other.extensions); | 466 extensions = visitor.visitExtensions(extensions, other.extensions); |
468 } | 467 } |
469 | 468 |
470 /** | 469 /** |
471 * Parse an unknown field or an extension. For use by generated code only. | 470 * Parse an unknown field or an extension. For use by generated code only. |
472 * | 471 * |
473 * <p>For use by generated code only. | 472 * <p>For use by generated code only. |
474 * | 473 * |
475 * @return {@code true} unless the tag is an end-group tag. | 474 * @return {@code true} unless the tag is an end-group tag. |
476 */ | 475 */ |
477 protected <MessageType extends MessageLite> boolean parseUnknownField( | 476 protected <MessageType extends MessageLite> boolean parseUnknownField( |
478 MessageType defaultInstance, | 477 MessageType defaultInstance, |
479 CodedInputStream input, | 478 CodedInputStream input, |
480 ExtensionRegistryLite extensionRegistry, | 479 ExtensionRegistryLite extensionRegistry, |
481 int tag) throws IOException { | 480 int tag) throws IOException { |
482 int wireType = WireFormat.getTagWireType(tag); | |
483 int fieldNumber = WireFormat.getTagFieldNumber(tag); | 481 int fieldNumber = WireFormat.getTagFieldNumber(tag); |
484 | 482 |
485 // TODO(dweis): How much bytecode would be saved by not requiring the gene
rated code to | 483 // TODO(dweis): How much bytecode would be saved by not requiring the gene
rated code to |
486 // provide the default instance? | 484 // provide the default instance? |
487 GeneratedExtension<MessageType, ?> extension = extensionRegistry.findLiteE
xtensionByNumber( | 485 GeneratedExtension<MessageType, ?> extension = extensionRegistry.findLiteE
xtensionByNumber( |
488 defaultInstance, fieldNumber); | 486 defaultInstance, fieldNumber); |
489 | 487 |
| 488 return parseExtension(input, extensionRegistry, extension, tag, fieldNumbe
r); |
| 489 } |
| 490 |
| 491 private boolean parseExtension( |
| 492 CodedInputStream input, |
| 493 ExtensionRegistryLite extensionRegistry, |
| 494 GeneratedExtension<?, ?> extension, |
| 495 int tag, |
| 496 int fieldNumber) |
| 497 throws IOException { |
| 498 int wireType = WireFormat.getTagWireType(tag); |
490 boolean unknown = false; | 499 boolean unknown = false; |
491 boolean packed = false; | 500 boolean packed = false; |
492 if (extension == null) { | 501 if (extension == null) { |
493 unknown = true; // Unknown field. | 502 unknown = true; // Unknown field. |
494 } else if (wireType == FieldSet.getWireFormatForFieldType( | 503 } else if (wireType == FieldSet.getWireFormatForFieldType( |
495 extension.descriptor.getLiteType(), | 504 extension.descriptor.getLiteType(), |
496 false /* isPacked */)) { | 505 false /* isPacked */)) { |
497 packed = false; // Normal, unpacked value. | 506 packed = false; // Normal, unpacked value. |
498 } else if (extension.descriptor.isRepeated && | 507 } else if (extension.descriptor.isRepeated && |
499 extension.descriptor.type.isPackable() && | 508 extension.descriptor.type.isPackable() && |
500 wireType == FieldSet.getWireFormatForFieldType( | 509 wireType == FieldSet.getWireFormatForFieldType( |
501 extension.descriptor.getLiteType(), | 510 extension.descriptor.getLiteType(), |
502 true /* isPacked */)) { | 511 true /* isPacked */)) { |
503 packed = true; // Packed value. | 512 packed = true; // Packed value. |
504 } else { | 513 } else { |
505 unknown = true; // Wrong wire type. | 514 unknown = true; // Wrong wire type. |
506 } | 515 } |
507 | 516 |
508 if (unknown) { // Unknown field or wrong wire type. Skip. | 517 if (unknown) { // Unknown field or wrong wire type. Skip. |
509 return parseUnknownField(tag, input); | 518 return parseUnknownField(tag, input); |
510 } | 519 } |
511 | 520 |
512 if (packed) { | 521 if (packed) { |
513 int length = input.readRawVarint32(); | 522 int length = input.readRawVarint32(); |
514 int limit = input.pushLimit(length); | 523 int limit = input.pushLimit(length); |
515 if (extension.descriptor.getLiteType() == WireFormat.FieldType.ENUM) { | 524 if (extension.descriptor.getLiteType() == WireFormat.FieldType.ENUM) { |
516 while (input.getBytesUntilLimit() > 0) { | 525 while (input.getBytesUntilLimit() > 0) { |
517 int rawValue = input.readEnum(); | 526 int rawValue = input.readEnum(); |
518 Object value = | 527 Object value = |
519 extension.descriptor.getEnumType().findValueByNumber(rawValue); | 528 extension.descriptor.getEnumType().findValueByNumber(rawValue); |
520 if (value == null) { | 529 if (value == null) { |
521 // If the number isn't recognized as a valid value for this | 530 // If the number isn't recognized as a valid value for this |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 } | 589 } |
581 | 590 |
582 if (extension.descriptor.isRepeated()) { | 591 if (extension.descriptor.isRepeated()) { |
583 extensions.addRepeatedField(extension.descriptor, | 592 extensions.addRepeatedField(extension.descriptor, |
584 extension.singularToFieldSetType(value)); | 593 extension.singularToFieldSetType(value)); |
585 } else { | 594 } else { |
586 extensions.setField(extension.descriptor, | 595 extensions.setField(extension.descriptor, |
587 extension.singularToFieldSetType(value)); | 596 extension.singularToFieldSetType(value)); |
588 } | 597 } |
589 } | 598 } |
590 | |
591 return true; | 599 return true; |
592 } | 600 } |
593 | 601 |
| 602 /** |
| 603 * Parse an unknown field or an extension. For use by generated code only. |
| 604 * |
| 605 * <p>For use by generated code only. |
| 606 * |
| 607 * @return {@code true} unless the tag is an end-group tag. |
| 608 */ |
| 609 protected <MessageType extends MessageLite> boolean parseUnknownFieldAsMessa
geSet( |
| 610 MessageType defaultInstance, |
| 611 CodedInputStream input, |
| 612 ExtensionRegistryLite extensionRegistry, |
| 613 int tag) |
| 614 throws IOException { |
| 615 |
| 616 if (tag == WireFormat.MESSAGE_SET_ITEM_TAG) { |
| 617 mergeMessageSetExtensionFromCodedStream(defaultInstance, input, extensio
nRegistry); |
| 618 return true; |
| 619 } |
| 620 |
| 621 // TODO(dweis): Do we really want to support non message set wire format i
n message sets? |
| 622 // Full runtime does... So we do for now. |
| 623 int wireType = WireFormat.getTagWireType(tag); |
| 624 if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) { |
| 625 return parseUnknownField(defaultInstance, input, extensionRegistry, tag)
; |
| 626 } else { |
| 627 // TODO(dweis): Should we throw on invalid input? Full runtime does not.
.. |
| 628 return input.skipField(tag); |
| 629 } |
| 630 } |
| 631 |
| 632 /** |
| 633 * Merges the message set from the input stream; requires message set wire f
ormat. |
| 634 * |
| 635 * @param defaultInstance the default instance of the containing message we
are parsing in |
| 636 * @param input the stream to parse from |
| 637 * @param extensionRegistry the registry to use when parsing |
| 638 */ |
| 639 private <MessageType extends MessageLite> void mergeMessageSetExtensionFromC
odedStream( |
| 640 MessageType defaultInstance, |
| 641 CodedInputStream input, |
| 642 ExtensionRegistryLite extensionRegistry) |
| 643 throws IOException { |
| 644 // The wire format for MessageSet is: |
| 645 // message MessageSet { |
| 646 // repeated group Item = 1 { |
| 647 // required int32 typeId = 2; |
| 648 // required bytes message = 3; |
| 649 // } |
| 650 // } |
| 651 // "typeId" is the extension's field number. The extension can only be |
| 652 // a message type, where "message" contains the encoded bytes of that |
| 653 // message. |
| 654 // |
| 655 // In practice, we will probably never see a MessageSet item in which |
| 656 // the message appears before the type ID, or where either field does not |
| 657 // appear exactly once. However, in theory such cases are valid, so we |
| 658 // should be prepared to accept them. |
| 659 |
| 660 int typeId = 0; |
| 661 ByteString rawBytes = null; // If we encounter "message" before "typeId" |
| 662 GeneratedExtension<?, ?> extension = null; |
| 663 |
| 664 // Read bytes from input, if we get it's type first then parse it eagerly, |
| 665 // otherwise we store the raw bytes in a local variable. |
| 666 while (true) { |
| 667 final int tag = input.readTag(); |
| 668 if (tag == 0) { |
| 669 break; |
| 670 } |
| 671 |
| 672 if (tag == WireFormat.MESSAGE_SET_TYPE_ID_TAG) { |
| 673 typeId = input.readUInt32(); |
| 674 if (typeId != 0) { |
| 675 extension = extensionRegistry.findLiteExtensionByNumber(defaultInsta
nce, typeId); |
| 676 } |
| 677 |
| 678 } else if (tag == WireFormat.MESSAGE_SET_MESSAGE_TAG) { |
| 679 if (typeId != 0) { |
| 680 if (extension != null) { |
| 681 // We already know the type, so we can parse directly from the |
| 682 // input with no copying. Hooray! |
| 683 eagerlyMergeMessageSetExtension(input, extension, extensionRegistr
y, typeId); |
| 684 rawBytes = null; |
| 685 continue; |
| 686 } |
| 687 } |
| 688 // We haven't seen a type ID yet or we want parse message lazily. |
| 689 rawBytes = input.readBytes(); |
| 690 |
| 691 } else { // Unknown tag. Skip it. |
| 692 if (!input.skipField(tag)) { |
| 693 break; // End of group |
| 694 } |
| 695 } |
| 696 } |
| 697 input.checkLastTagWas(WireFormat.MESSAGE_SET_ITEM_END_TAG); |
| 698 |
| 699 // Process the raw bytes. |
| 700 if (rawBytes != null && typeId != 0) { // Zero is not a valid type ID. |
| 701 if (extension != null) { // We known the type |
| 702 mergeMessageSetExtensionFromBytes(rawBytes, extensionRegistry, extensi
on); |
| 703 } else { // We don't know how to parse this. Ignore it. |
| 704 if (rawBytes != null) { |
| 705 mergeLengthDelimitedField(typeId, rawBytes); |
| 706 } |
| 707 } |
| 708 } |
| 709 } |
| 710 |
| 711 private void eagerlyMergeMessageSetExtension( |
| 712 CodedInputStream input, |
| 713 GeneratedExtension<?, ?> extension, |
| 714 ExtensionRegistryLite extensionRegistry, |
| 715 int typeId) |
| 716 throws IOException { |
| 717 int fieldNumber = typeId; |
| 718 int tag = WireFormat.makeTag(typeId, WireFormat.WIRETYPE_LENGTH_DELIMITED)
; |
| 719 parseExtension(input, extensionRegistry, extension, tag, fieldNumber); |
| 720 } |
| 721 |
| 722 private void mergeMessageSetExtensionFromBytes( |
| 723 ByteString rawBytes, |
| 724 ExtensionRegistryLite extensionRegistry, |
| 725 GeneratedExtension<?, ?> extension) |
| 726 throws IOException { |
| 727 MessageLite.Builder subBuilder = null; |
| 728 MessageLite existingValue = (MessageLite) extensions.getField(extension.de
scriptor); |
| 729 if (existingValue != null) { |
| 730 subBuilder = existingValue.toBuilder(); |
| 731 } |
| 732 if (subBuilder == null) { |
| 733 subBuilder = extension.getMessageDefaultInstance().newBuilderForType(); |
| 734 } |
| 735 rawBytes.newCodedInput().readMessage(subBuilder, extensionRegistry); |
| 736 MessageLite value = subBuilder.build(); |
| 737 |
| 738 extensions.setField(extension.descriptor, extension.singularToFieldSetType
(value)); |
| 739 } |
| 740 |
594 private void verifyExtensionContainingType( | 741 private void verifyExtensionContainingType( |
595 final GeneratedExtension<MessageType, ?> extension) { | 742 final GeneratedExtension<MessageType, ?> extension) { |
596 if (extension.getContainingTypeDefaultInstance() != | 743 if (extension.getContainingTypeDefaultInstance() != |
597 getDefaultInstanceForType()) { | 744 getDefaultInstanceForType()) { |
598 // This can only happen if someone uses unchecked operations. | 745 // This can only happen if someone uses unchecked operations. |
599 throw new IllegalArgumentException( | 746 throw new IllegalArgumentException( |
600 "This extension is for a different message type. Please make " + | 747 "This extension is for a different message type. Please make " + |
601 "sure that you are not suppressing any generics type warnings."); | 748 "sure that you are not suppressing any generics type warnings."); |
602 } | 749 } |
603 } | 750 } |
604 | 751 |
605 /** Check if a singular extension is present. */ | 752 /** Check if a singular extension is present. */ |
606 @Override | 753 @Override |
607 public final <Type> boolean hasExtension(final ExtensionLite<MessageType, Ty
pe> extension) { | 754 public final <Type> boolean hasExtension(final ExtensionLite<MessageType, Ty
pe> extension) { |
608 GeneratedExtension<MessageType, Type> extensionLite = | 755 GeneratedExtension<MessageType, Type> extensionLite = |
609 checkIsLite(extension); | 756 checkIsLite(extension); |
610 | 757 |
611 verifyExtensionContainingType(extensionLite); | 758 verifyExtensionContainingType(extensionLite); |
612 return extensions.hasField(extensionLite.descriptor); | 759 return extensions.hasField(extensionLite.descriptor); |
613 } | 760 } |
614 | 761 |
615 /** Get the number of elements in a repeated extension. */ | 762 /** Get the number of elements in a repeated extension. */ |
616 @Override | 763 @Override |
617 public final <Type> int getExtensionCount( | 764 public final <Type> int getExtensionCount( |
618 final ExtensionLite<MessageType, List<Type>> extension) { | 765 final ExtensionLite<MessageType, List<Type>> extension) { |
619 GeneratedExtension<MessageType, List<Type>> extensionLite = | 766 GeneratedExtension<MessageType, List<Type>> extensionLite = |
620 checkIsLite(extension); | 767 checkIsLite(extension); |
621 | 768 |
622 verifyExtensionContainingType(extensionLite); | 769 verifyExtensionContainingType(extensionLite); |
623 return extensions.getRepeatedFieldCount(extensionLite.descriptor); | 770 return extensions.getRepeatedFieldCount(extensionLite.descriptor); |
624 } | 771 } |
625 | 772 |
626 /** Get the value of an extension. */ | 773 /** Get the value of an extension. */ |
627 @Override | 774 @Override |
628 @SuppressWarnings("unchecked") | 775 @SuppressWarnings("unchecked") |
629 public final <Type> Type getExtension(final ExtensionLite<MessageType, Type>
extension) { | 776 public final <Type> Type getExtension(final ExtensionLite<MessageType, Type>
extension) { |
630 GeneratedExtension<MessageType, Type> extensionLite = | 777 GeneratedExtension<MessageType, Type> extensionLite = |
631 checkIsLite(extension); | 778 checkIsLite(extension); |
632 | 779 |
633 verifyExtensionContainingType(extensionLite); | 780 verifyExtensionContainingType(extensionLite); |
634 final Object value = extensions.getField(extensionLite.descriptor); | 781 final Object value = extensions.getField(extensionLite.descriptor); |
635 if (value == null) { | 782 if (value == null) { |
636 return extensionLite.defaultValue; | 783 return extensionLite.defaultValue; |
637 } else { | 784 } else { |
638 return (Type) extensionLite.fromFieldSetType(value); | 785 return (Type) extensionLite.fromFieldSetType(value); |
639 } | 786 } |
640 } | 787 } |
641 | 788 |
642 /** Get one element of a repeated extension. */ | 789 /** Get one element of a repeated extension. */ |
(...skipping 10 matching lines...) Expand all Loading... |
653 } | 800 } |
654 | 801 |
655 /** Called by subclasses to check if all extensions are initialized. */ | 802 /** Called by subclasses to check if all extensions are initialized. */ |
656 protected boolean extensionsAreInitialized() { | 803 protected boolean extensionsAreInitialized() { |
657 return extensions.isInitialized(); | 804 return extensions.isInitialized(); |
658 } | 805 } |
659 | 806 |
660 @Override | 807 @Override |
661 protected final void makeImmutable() { | 808 protected final void makeImmutable() { |
662 super.makeImmutable(); | 809 super.makeImmutable(); |
663 | 810 |
664 extensions.makeImmutable(); | 811 extensions.makeImmutable(); |
665 } | 812 } |
666 | 813 |
667 /** | 814 /** |
668 * Used by subclasses to serialize extensions. Extension ranges may be | 815 * Used by subclasses to serialize extensions. Extension ranges may be |
669 * interleaved with field numbers, but we must write them in canonical | 816 * interleaved with field numbers, but we must write them in canonical |
670 * (sorted by field number) order. ExtensionWriter helps us write | 817 * (sorted by field number) order. ExtensionWriter helps us write |
671 * individual ranges of extensions at once. | 818 * individual ranges of extensions at once. |
672 */ | 819 */ |
673 protected class ExtensionWriter { | 820 protected class ExtensionWriter { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
727 * Lite equivalent of {@link GeneratedMessage.ExtendableBuilder}. | 874 * Lite equivalent of {@link GeneratedMessage.ExtendableBuilder}. |
728 */ | 875 */ |
729 @SuppressWarnings("unchecked") | 876 @SuppressWarnings("unchecked") |
730 public abstract static class ExtendableBuilder< | 877 public abstract static class ExtendableBuilder< |
731 MessageType extends ExtendableMessage<MessageType, BuilderType>, | 878 MessageType extends ExtendableMessage<MessageType, BuilderType>, |
732 BuilderType extends ExtendableBuilder<MessageType, BuilderType>> | 879 BuilderType extends ExtendableBuilder<MessageType, BuilderType>> |
733 extends Builder<MessageType, BuilderType> | 880 extends Builder<MessageType, BuilderType> |
734 implements ExtendableMessageOrBuilder<MessageType, BuilderType> { | 881 implements ExtendableMessageOrBuilder<MessageType, BuilderType> { |
735 protected ExtendableBuilder(MessageType defaultInstance) { | 882 protected ExtendableBuilder(MessageType defaultInstance) { |
736 super(defaultInstance); | 883 super(defaultInstance); |
737 | 884 |
738 // TODO(dweis): This is kind of an unnecessary clone since we construct a | 885 // TODO(dweis): This is kind of an unnecessary clone since we construct a |
739 // new instance in the parent constructor which makes the extensions | 886 // new instance in the parent constructor which makes the extensions |
740 // immutable. This extra allocation shouldn't matter in practice | 887 // immutable. This extra allocation shouldn't matter in practice |
741 // though. | 888 // though. |
742 instance.extensions = instance.extensions.clone(); | 889 instance.extensions = instance.extensions.clone(); |
743 } | 890 } |
744 | 891 |
745 // For immutable message conversion. | 892 // For immutable message conversion. |
746 void internalSetExtensionSet(FieldSet<ExtensionDescriptor> extensions) { | 893 void internalSetExtensionSet(FieldSet<ExtensionDescriptor> extensions) { |
747 copyOnWrite(); | 894 copyOnWrite(); |
748 instance.extensions = extensions; | 895 instance.extensions = extensions; |
749 } | 896 } |
750 | 897 |
751 @Override | 898 @Override |
752 protected void copyOnWrite() { | 899 protected void copyOnWrite() { |
753 if (!isBuilt) { | 900 if (!isBuilt) { |
754 return; | 901 return; |
755 } | 902 } |
756 | 903 |
757 super.copyOnWrite(); | 904 super.copyOnWrite(); |
758 instance.extensions = instance.extensions.clone(); | 905 instance.extensions = instance.extensions.clone(); |
759 } | 906 } |
760 | 907 |
761 @Override | 908 @Override |
762 public final MessageType buildPartial() { | 909 public final MessageType buildPartial() { |
763 if (isBuilt) { | 910 if (isBuilt) { |
764 return instance; | 911 return instance; |
765 } | 912 } |
766 | 913 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
800 } | 947 } |
801 | 948 |
802 /** Get one element of a repeated extension. */ | 949 /** Get one element of a repeated extension. */ |
803 @Override | 950 @Override |
804 @SuppressWarnings("unchecked") | 951 @SuppressWarnings("unchecked") |
805 public final <Type> Type getExtension( | 952 public final <Type> Type getExtension( |
806 final ExtensionLite<MessageType, List<Type>> extension, final int index)
{ | 953 final ExtensionLite<MessageType, List<Type>> extension, final int index)
{ |
807 return instance.getExtension(extension, index); | 954 return instance.getExtension(extension, index); |
808 } | 955 } |
809 | 956 |
810 // This is implemented here only to work around an apparent bug in the | |
811 // Java compiler and/or build system. See bug #1898463. The mere presence | |
812 // of this dummy clone() implementation makes it go away. | |
813 @Override | |
814 public BuilderType clone() { | |
815 return super.clone(); | |
816 } | |
817 | |
818 /** Set the value of an extension. */ | 957 /** Set the value of an extension. */ |
819 public final <Type> BuilderType setExtension( | 958 public final <Type> BuilderType setExtension( |
820 final ExtensionLite<MessageType, Type> extension, | 959 final ExtensionLite<MessageType, Type> extension, |
821 final Type value) { | 960 final Type value) { |
822 GeneratedExtension<MessageType, Type> extensionLite = | 961 GeneratedExtension<MessageType, Type> extensionLite = |
823 checkIsLite(extension); | 962 checkIsLite(extension); |
824 | 963 |
825 verifyExtensionContainingType(extensionLite); | 964 verifyExtensionContainingType(extensionLite); |
826 copyOnWrite(); | 965 copyOnWrite(); |
827 instance.extensions.setField(extensionLite.descriptor, extensionLite.toFie
ldSetType(value)); | 966 instance.extensions.setField(extensionLite.descriptor, extensionLite.toFie
ldSetType(value)); |
828 return (BuilderType) this; | 967 return (BuilderType) this; |
829 } | 968 } |
830 | 969 |
831 /** Set the value of one element of a repeated extension. */ | 970 /** Set the value of one element of a repeated extension. */ |
832 public final <Type> BuilderType setExtension( | 971 public final <Type> BuilderType setExtension( |
833 final ExtensionLite<MessageType, List<Type>> extension, | 972 final ExtensionLite<MessageType, List<Type>> extension, |
834 final int index, final Type value) { | 973 final int index, final Type value) { |
835 GeneratedExtension<MessageType, List<Type>> extensionLite = | 974 GeneratedExtension<MessageType, List<Type>> extensionLite = |
836 checkIsLite(extension); | 975 checkIsLite(extension); |
837 | 976 |
838 verifyExtensionContainingType(extensionLite); | 977 verifyExtensionContainingType(extensionLite); |
839 copyOnWrite(); | 978 copyOnWrite(); |
840 instance.extensions.setRepeatedField( | 979 instance.extensions.setRepeatedField( |
841 extensionLite.descriptor, index, extensionLite.singularToFieldSetType(
value)); | 980 extensionLite.descriptor, index, extensionLite.singularToFieldSetType(
value)); |
842 return (BuilderType) this; | 981 return (BuilderType) this; |
843 } | 982 } |
844 | 983 |
845 /** Append a value to a repeated extension. */ | 984 /** Append a value to a repeated extension. */ |
846 public final <Type> BuilderType addExtension( | 985 public final <Type> BuilderType addExtension( |
847 final ExtensionLite<MessageType, List<Type>> extension, | 986 final ExtensionLite<MessageType, List<Type>> extension, |
848 final Type value) { | 987 final Type value) { |
849 GeneratedExtension<MessageType, List<Type>> extensionLite = | 988 GeneratedExtension<MessageType, List<Type>> extensionLite = |
850 checkIsLite(extension); | 989 checkIsLite(extension); |
851 | 990 |
852 verifyExtensionContainingType(extensionLite); | 991 verifyExtensionContainingType(extensionLite); |
853 copyOnWrite(); | 992 copyOnWrite(); |
854 instance.extensions.addRepeatedField( | 993 instance.extensions.addRepeatedField( |
855 extensionLite.descriptor, extensionLite.singularToFieldSetType(value))
; | 994 extensionLite.descriptor, extensionLite.singularToFieldSetType(value))
; |
856 return (BuilderType) this; | 995 return (BuilderType) this; |
857 } | 996 } |
858 | 997 |
859 /** Clear an extension. */ | 998 /** Clear an extension. */ |
860 public final <Type> BuilderType clearExtension( | 999 public final <Type> BuilderType clearExtension( |
861 final ExtensionLite<MessageType, ?> extension) { | 1000 final ExtensionLite<MessageType, ?> extension) { |
862 GeneratedExtension<MessageType, ?> extensionLite = checkIsLite(extension); | 1001 GeneratedExtension<MessageType, ?> extensionLite = checkIsLite(extension); |
863 | 1002 |
864 verifyExtensionContainingType(extensionLite); | 1003 verifyExtensionContainingType(extensionLite); |
865 copyOnWrite(); | 1004 copyOnWrite(); |
866 instance.extensions.clearField(extensionLite.descriptor); | 1005 instance.extensions.clearField(extensionLite.descriptor); |
867 return (BuilderType) this; | 1006 return (BuilderType) this; |
868 } | 1007 } |
869 } | 1008 } |
870 | 1009 |
871 // ----------------------------------------------------------------- | 1010 // ----------------------------------------------------------------- |
872 | 1011 |
873 /** For use by generated code only. */ | 1012 /** For use by generated code only. */ |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1150 | 1289 |
1151 /** | 1290 /** |
1152 * A serialized (serializable) form of the generated message. Stores the | 1291 * A serialized (serializable) form of the generated message. Stores the |
1153 * message as a class name and a byte array. | 1292 * message as a class name and a byte array. |
1154 */ | 1293 */ |
1155 protected static final class SerializedForm implements Serializable { | 1294 protected static final class SerializedForm implements Serializable { |
1156 | 1295 |
1157 public static SerializedForm of(MessageLite message) { | 1296 public static SerializedForm of(MessageLite message) { |
1158 return new SerializedForm(message); | 1297 return new SerializedForm(message); |
1159 } | 1298 } |
1160 | 1299 |
1161 private static final long serialVersionUID = 0L; | 1300 private static final long serialVersionUID = 0L; |
1162 | 1301 |
1163 private final String messageClassName; | 1302 private final String messageClassName; |
1164 private final byte[] asBytes; | 1303 private final byte[] asBytes; |
1165 | 1304 |
1166 /** | 1305 /** |
1167 * Creates the serialized form by calling {@link com.google.protobuf.Message
Lite#toByteArray}. | 1306 * Creates the serialized form by calling {@link com.google.protobuf.Message
Lite#toByteArray}. |
1168 * @param regularForm the message to serialize | 1307 * @param regularForm the message to serialize |
1169 */ | 1308 */ |
1170 SerializedForm(MessageLite regularForm) { | 1309 SerializedForm(MessageLite regularForm) { |
(...skipping 13 matching lines...) Expand all Loading... |
1184 java.lang.reflect.Field defaultInstanceField = | 1323 java.lang.reflect.Field defaultInstanceField = |
1185 messageClass.getDeclaredField("DEFAULT_INSTANCE"); | 1324 messageClass.getDeclaredField("DEFAULT_INSTANCE"); |
1186 defaultInstanceField.setAccessible(true); | 1325 defaultInstanceField.setAccessible(true); |
1187 MessageLite defaultInstance = (MessageLite) defaultInstanceField.get(nul
l); | 1326 MessageLite defaultInstance = (MessageLite) defaultInstanceField.get(nul
l); |
1188 return defaultInstance.newBuilderForType() | 1327 return defaultInstance.newBuilderForType() |
1189 .mergeFrom(asBytes) | 1328 .mergeFrom(asBytes) |
1190 .buildPartial(); | 1329 .buildPartial(); |
1191 } catch (ClassNotFoundException e) { | 1330 } catch (ClassNotFoundException e) { |
1192 throw new RuntimeException("Unable to find proto buffer class: " + messa
geClassName, e); | 1331 throw new RuntimeException("Unable to find proto buffer class: " + messa
geClassName, e); |
1193 } catch (NoSuchFieldException e) { | 1332 } catch (NoSuchFieldException e) { |
1194 throw new RuntimeException("Unable to find DEFAULT_INSTANCE in " + messa
geClassName, e); | 1333 return readResolveFallback(); |
1195 } catch (SecurityException e) { | 1334 } catch (SecurityException e) { |
1196 throw new RuntimeException("Unable to call DEFAULT_INSTANCE in " + messa
geClassName, e); | 1335 throw new RuntimeException("Unable to call DEFAULT_INSTANCE in " + messa
geClassName, e); |
1197 } catch (IllegalAccessException e) { | 1336 } catch (IllegalAccessException e) { |
1198 throw new RuntimeException("Unable to call parsePartialFrom", e); | 1337 throw new RuntimeException("Unable to call parsePartialFrom", e); |
1199 } catch (InvalidProtocolBufferException e) { | 1338 } catch (InvalidProtocolBufferException e) { |
1200 throw new RuntimeException("Unable to understand proto buffer", e); | 1339 throw new RuntimeException("Unable to understand proto buffer", e); |
1201 } | 1340 } |
1202 } | 1341 } |
| 1342 |
| 1343 /** |
| 1344 * @deprecated from v3.0.0-beta-3+, for compatibility with v2.5.0 and v2.6.1
generated code. |
| 1345 */ |
| 1346 @Deprecated |
| 1347 private Object readResolveFallback() throws ObjectStreamException { |
| 1348 try { |
| 1349 Class<?> messageClass = Class.forName(messageClassName); |
| 1350 java.lang.reflect.Field defaultInstanceField = |
| 1351 messageClass.getDeclaredField("defaultInstance"); |
| 1352 defaultInstanceField.setAccessible(true); |
| 1353 MessageLite defaultInstance = (MessageLite) defaultInstanceField.get(nul
l); |
| 1354 return defaultInstance.newBuilderForType() |
| 1355 .mergeFrom(asBytes) |
| 1356 .buildPartial(); |
| 1357 } catch (ClassNotFoundException e) { |
| 1358 throw new RuntimeException("Unable to find proto buffer class: " + messa
geClassName, e); |
| 1359 } catch (NoSuchFieldException e) { |
| 1360 throw new RuntimeException("Unable to find defaultInstance in " + messag
eClassName, e); |
| 1361 } catch (SecurityException e) { |
| 1362 throw new RuntimeException("Unable to call defaultInstance in " + messag
eClassName, e); |
| 1363 } catch (IllegalAccessException e) { |
| 1364 throw new RuntimeException("Unable to call parsePartialFrom", e); |
| 1365 } catch (InvalidProtocolBufferException e) { |
| 1366 throw new RuntimeException("Unable to understand proto buffer", e); |
| 1367 } |
| 1368 } |
1203 } | 1369 } |
1204 | 1370 |
1205 /** | 1371 /** |
1206 * Checks that the {@link Extension} is Lite and returns it as a | 1372 * Checks that the {@link Extension} is Lite and returns it as a |
1207 * {@link GeneratedExtension}. | 1373 * {@link GeneratedExtension}. |
1208 */ | 1374 */ |
1209 private static < | 1375 private static < |
1210 MessageType extends ExtendableMessage<MessageType, BuilderType>, | 1376 MessageType extends ExtendableMessage<MessageType, BuilderType>, |
1211 BuilderType extends ExtendableBuilder<MessageType, BuilderType>, | 1377 BuilderType extends ExtendableBuilder<MessageType, BuilderType>, |
1212 T> | 1378 T> |
1213 GeneratedExtension<MessageType, T> checkIsLite( | 1379 GeneratedExtension<MessageType, T> checkIsLite( |
1214 ExtensionLite<MessageType, T> extension) { | 1380 ExtensionLite<MessageType, T> extension) { |
1215 if (!extension.isLite()) { | 1381 if (!extension.isLite()) { |
1216 throw new IllegalArgumentException("Expected a lite extension."); | 1382 throw new IllegalArgumentException("Expected a lite extension."); |
1217 } | 1383 } |
1218 | 1384 |
1219 return (GeneratedExtension<MessageType, T>) extension; | 1385 return (GeneratedExtension<MessageType, T>) extension; |
1220 } | 1386 } |
1221 | 1387 |
1222 /** | 1388 /** |
1223 * A static helper method for checking if a message is initialized, optionally
memoizing. | 1389 * A static helper method for checking if a message is initialized, optionally
memoizing. |
1224 * <p> | 1390 * <p> |
1225 * For use by generated code only. | 1391 * For use by generated code only. |
1226 */ | 1392 */ |
1227 protected static final <T extends GeneratedMessageLite<T, ?>> boolean isInitia
lized( | 1393 protected static final <T extends GeneratedMessageLite<T, ?>> boolean isInitia
lized( |
1228 T message, boolean shouldMemoize) { | 1394 T message, boolean shouldMemoize) { |
1229 return message.dynamicMethod(MethodToInvoke.IS_INITIALIZED, shouldMemoize) !
= null; | 1395 return message.dynamicMethod(MethodToInvoke.IS_INITIALIZED, shouldMemoize) !
= null; |
1230 } | 1396 } |
1231 | 1397 |
1232 protected static final <T extends GeneratedMessageLite<T, ?>> void makeImmutab
le(T message) { | 1398 protected static final <T extends GeneratedMessageLite<T, ?>> void makeImmutab
le(T message) { |
1233 message.dynamicMethod(MethodToInvoke.MAKE_IMMUTABLE); | 1399 message.dynamicMethod(MethodToInvoke.MAKE_IMMUTABLE); |
1234 } | 1400 } |
1235 | 1401 |
1236 protected static IntList emptyIntList() { | 1402 protected static IntList emptyIntList() { |
1237 return IntArrayList.emptyList(); | 1403 return IntArrayList.emptyList(); |
1238 } | 1404 } |
1239 | 1405 |
1240 protected static IntList mutableCopy(IntList list) { | 1406 protected static IntList mutableCopy(IntList list) { |
1241 int size = list.size(); | 1407 int size = list.size(); |
1242 return list.mutableCopyWithCapacity( | 1408 return list.mutableCopyWithCapacity( |
1243 size == 0 ? AbstractProtobufList.DEFAULT_CAPACITY : size * 2); | 1409 size == 0 ? AbstractProtobufList.DEFAULT_CAPACITY : size * 2); |
1244 } | 1410 } |
1245 | 1411 |
1246 protected static LongList emptyLongList() { | 1412 protected static LongList emptyLongList() { |
1247 return LongArrayList.emptyList(); | 1413 return LongArrayList.emptyList(); |
1248 } | 1414 } |
1249 | 1415 |
1250 protected static LongList mutableCopy(LongList list) { | 1416 protected static LongList mutableCopy(LongList list) { |
1251 int size = list.size(); | 1417 int size = list.size(); |
1252 return list.mutableCopyWithCapacity( | 1418 return list.mutableCopyWithCapacity( |
1253 size == 0 ? AbstractProtobufList.DEFAULT_CAPACITY : size * 2); | 1419 size == 0 ? AbstractProtobufList.DEFAULT_CAPACITY : size * 2); |
1254 } | 1420 } |
1255 | 1421 |
1256 protected static FloatList emptyFloatList() { | 1422 protected static FloatList emptyFloatList() { |
1257 return FloatArrayList.emptyList(); | 1423 return FloatArrayList.emptyList(); |
1258 } | 1424 } |
1259 | 1425 |
1260 protected static FloatList mutableCopy(FloatList list) { | 1426 protected static FloatList mutableCopy(FloatList list) { |
1261 int size = list.size(); | 1427 int size = list.size(); |
1262 return list.mutableCopyWithCapacity( | 1428 return list.mutableCopyWithCapacity( |
1263 size == 0 ? AbstractProtobufList.DEFAULT_CAPACITY : size * 2); | 1429 size == 0 ? AbstractProtobufList.DEFAULT_CAPACITY : size * 2); |
1264 } | 1430 } |
1265 | 1431 |
1266 protected static DoubleList emptyDoubleList() { | 1432 protected static DoubleList emptyDoubleList() { |
1267 return DoubleArrayList.emptyList(); | 1433 return DoubleArrayList.emptyList(); |
1268 } | 1434 } |
1269 | 1435 |
1270 protected static DoubleList mutableCopy(DoubleList list) { | 1436 protected static DoubleList mutableCopy(DoubleList list) { |
1271 int size = list.size(); | 1437 int size = list.size(); |
1272 return list.mutableCopyWithCapacity( | 1438 return list.mutableCopyWithCapacity( |
1273 size == 0 ? AbstractProtobufList.DEFAULT_CAPACITY : size * 2); | 1439 size == 0 ? AbstractProtobufList.DEFAULT_CAPACITY : size * 2); |
1274 } | 1440 } |
1275 | 1441 |
1276 protected static BooleanList emptyBooleanList() { | 1442 protected static BooleanList emptyBooleanList() { |
1277 return BooleanArrayList.emptyList(); | 1443 return BooleanArrayList.emptyList(); |
1278 } | 1444 } |
1279 | 1445 |
1280 protected static BooleanList mutableCopy(BooleanList list) { | 1446 protected static BooleanList mutableCopy(BooleanList list) { |
1281 int size = list.size(); | 1447 int size = list.size(); |
1282 return list.mutableCopyWithCapacity( | 1448 return list.mutableCopyWithCapacity( |
1283 size == 0 ? AbstractProtobufList.DEFAULT_CAPACITY : size * 2); | 1449 size == 0 ? AbstractProtobufList.DEFAULT_CAPACITY : size * 2); |
1284 } | 1450 } |
1285 | 1451 |
1286 protected static <E> ProtobufList<E> emptyProtobufList() { | 1452 protected static <E> ProtobufList<E> emptyProtobufList() { |
1287 return ProtobufArrayList.emptyList(); | 1453 return ProtobufArrayList.emptyList(); |
1288 } | 1454 } |
1289 | 1455 |
1290 protected static <E> ProtobufList<E> mutableCopy(ProtobufList<E> list) { | 1456 protected static <E> ProtobufList<E> mutableCopy(ProtobufList<E> list) { |
1291 int size = list.size(); | 1457 int size = list.size(); |
1292 return list.mutableCopyWithCapacity( | 1458 return list.mutableCopyWithCapacity( |
1293 size == 0 ? AbstractProtobufList.DEFAULT_CAPACITY : size * 2); | 1459 size == 0 ? AbstractProtobufList.DEFAULT_CAPACITY : size * 2); |
1294 } | 1460 } |
1295 | 1461 |
1296 /** | 1462 /** |
1297 * A {@link Parser} implementation that delegates to the default instance. | 1463 * A {@link Parser} implementation that delegates to the default instance. |
1298 * <p> | 1464 * <p> |
1299 * For use by generated code only. | 1465 * For use by generated code only. |
1300 */ | 1466 */ |
1301 protected static class DefaultInstanceBasedParser<T extends GeneratedMessageLi
te<T, ?>> | 1467 protected static class DefaultInstanceBasedParser<T extends GeneratedMessageLi
te<T, ?>> |
1302 extends AbstractParser<T> { | 1468 extends AbstractParser<T> { |
1303 | 1469 |
1304 private T defaultInstance; | 1470 private T defaultInstance; |
1305 | 1471 |
1306 public DefaultInstanceBasedParser(T defaultInstance) { | 1472 public DefaultInstanceBasedParser(T defaultInstance) { |
1307 this.defaultInstance = defaultInstance; | 1473 this.defaultInstance = defaultInstance; |
1308 } | 1474 } |
1309 | 1475 |
1310 @Override | 1476 @Override |
1311 public T parsePartialFrom(CodedInputStream input, ExtensionRegistryLite exte
nsionRegistry) | 1477 public T parsePartialFrom(CodedInputStream input, ExtensionRegistryLite exte
nsionRegistry) |
1312 throws InvalidProtocolBufferException { | 1478 throws InvalidProtocolBufferException { |
1313 return GeneratedMessageLite.parsePartialFrom(defaultInstance, input, exten
sionRegistry); | 1479 return GeneratedMessageLite.parsePartialFrom(defaultInstance, input, exten
sionRegistry); |
1314 } | 1480 } |
1315 } | 1481 } |
1316 | 1482 |
1317 /** | 1483 /** |
1318 * A static helper method for parsing a partial from input using the extension
registry and the | 1484 * A static helper method for parsing a partial from input using the extension
registry and the |
1319 * instance. | 1485 * instance. |
1320 */ | 1486 */ |
1321 // TODO(dweis): Should this verify that the last tag was 0? | 1487 // TODO(dweis): Should this verify that the last tag was 0? |
1322 static <T extends GeneratedMessageLite<T, ?>> T parsePartialFrom( | 1488 static <T extends GeneratedMessageLite<T, ?>> T parsePartialFrom( |
1323 T instance, CodedInputStream input, ExtensionRegistryLite extensionRegistr
y) | 1489 T instance, CodedInputStream input, ExtensionRegistryLite extensionRegistr
y) |
1324 throws InvalidProtocolBufferException { | 1490 throws InvalidProtocolBufferException { |
1325 @SuppressWarnings("unchecked") // Guaranteed by protoc | 1491 @SuppressWarnings("unchecked") // Guaranteed by protoc |
1326 T result = (T) instance.dynamicMethod(MethodToInvoke.NEW_MUTABLE_INSTANCE); | 1492 T result = (T) instance.dynamicMethod(MethodToInvoke.NEW_MUTABLE_INSTANCE); |
1327 try { | 1493 try { |
1328 result.dynamicMethod(MethodToInvoke.MERGE_FROM_STREAM, input, extensionReg
istry); | 1494 result.dynamicMethod(MethodToInvoke.MERGE_FROM_STREAM, input, extensionReg
istry); |
1329 result.makeImmutable(); | 1495 result.makeImmutable(); |
1330 } catch (RuntimeException e) { | 1496 } catch (RuntimeException e) { |
1331 if (e.getCause() instanceof InvalidProtocolBufferException) { | 1497 if (e.getCause() instanceof InvalidProtocolBufferException) { |
1332 throw (InvalidProtocolBufferException) e.getCause(); | 1498 throw (InvalidProtocolBufferException) e.getCause(); |
1333 } | 1499 } |
1334 throw e; | 1500 throw e; |
1335 } | 1501 } |
1336 return result; | 1502 return result; |
1337 } | 1503 } |
1338 | 1504 |
1339 protected static <T extends GeneratedMessageLite<T, ?>> T parsePartialFrom( | 1505 protected static <T extends GeneratedMessageLite<T, ?>> T parsePartialFrom( |
1340 T defaultInstance, | 1506 T defaultInstance, |
1341 CodedInputStream input) | 1507 CodedInputStream input) |
1342 throws InvalidProtocolBufferException { | 1508 throws InvalidProtocolBufferException { |
1343 return parsePartialFrom(defaultInstance, input, ExtensionRegistryLite.getEmp
tyRegistry()); | 1509 return parsePartialFrom(defaultInstance, input, ExtensionRegistryLite.getEmp
tyRegistry()); |
1344 } | 1510 } |
1345 | 1511 |
1346 /** | 1512 /** |
1347 * Helper method to check if message is initialized. | 1513 * Helper method to check if message is initialized. |
1348 * | 1514 * |
1349 * @throws InvalidProtocolBufferException if it is not initialized. | 1515 * @throws InvalidProtocolBufferException if it is not initialized. |
1350 * @return The message to check. | 1516 * @return The message to check. |
1351 */ | 1517 */ |
1352 private static <T extends GeneratedMessageLite<T, ?>> T checkMessageInitialize
d(T message) | 1518 private static <T extends GeneratedMessageLite<T, ?>> T checkMessageInitialize
d(T message) |
1353 throws InvalidProtocolBufferException { | 1519 throws InvalidProtocolBufferException { |
1354 if (message != null && !message.isInitialized()) { | 1520 if (message != null && !message.isInitialized()) { |
1355 throw message.newUninitializedMessageException() | 1521 throw message.newUninitializedMessageException() |
(...skipping 10 matching lines...) Expand all Loading... |
1366 return checkMessageInitialized( | 1532 return checkMessageInitialized( |
1367 parseFrom(defaultInstance, data, ExtensionRegistryLite.getEmptyRegistry(
))); | 1533 parseFrom(defaultInstance, data, ExtensionRegistryLite.getEmptyRegistry(
))); |
1368 } | 1534 } |
1369 | 1535 |
1370 // Validates last tag. | 1536 // Validates last tag. |
1371 protected static <T extends GeneratedMessageLite<T, ?>> T parseFrom( | 1537 protected static <T extends GeneratedMessageLite<T, ?>> T parseFrom( |
1372 T defaultInstance, ByteString data, ExtensionRegistryLite extensionRegistr
y) | 1538 T defaultInstance, ByteString data, ExtensionRegistryLite extensionRegistr
y) |
1373 throws InvalidProtocolBufferException { | 1539 throws InvalidProtocolBufferException { |
1374 return checkMessageInitialized(parsePartialFrom(defaultInstance, data, exten
sionRegistry)); | 1540 return checkMessageInitialized(parsePartialFrom(defaultInstance, data, exten
sionRegistry)); |
1375 } | 1541 } |
1376 | 1542 |
1377 // This is a special case since we want to verify that the last tag is 0. We a
ssume we exhaust the | 1543 // This is a special case since we want to verify that the last tag is 0. We a
ssume we exhaust the |
1378 // ByteString. | 1544 // ByteString. |
1379 private static <T extends GeneratedMessageLite<T, ?>> T parsePartialFrom( | 1545 private static <T extends GeneratedMessageLite<T, ?>> T parsePartialFrom( |
1380 T defaultInstance, ByteString data, ExtensionRegistryLite extensionRegistr
y) | 1546 T defaultInstance, ByteString data, ExtensionRegistryLite extensionRegistr
y) |
1381 throws InvalidProtocolBufferException { | 1547 throws InvalidProtocolBufferException { |
1382 T message; | 1548 T message; |
1383 try { | 1549 try { |
1384 CodedInputStream input = data.newCodedInput(); | 1550 CodedInputStream input = data.newCodedInput(); |
1385 message = parsePartialFrom(defaultInstance, input, extensionRegistry); | 1551 message = parsePartialFrom(defaultInstance, input, extensionRegistry); |
1386 try { | 1552 try { |
1387 input.checkLastTagWas(0); | 1553 input.checkLastTagWas(0); |
1388 } catch (InvalidProtocolBufferException e) { | 1554 } catch (InvalidProtocolBufferException e) { |
1389 throw e.setUnfinishedMessage(message); | 1555 throw e.setUnfinishedMessage(message); |
1390 } | 1556 } |
1391 return message; | 1557 return message; |
1392 } catch (InvalidProtocolBufferException e) { | 1558 } catch (InvalidProtocolBufferException e) { |
1393 throw e; | 1559 throw e; |
1394 } | 1560 } |
1395 } | 1561 } |
1396 | 1562 |
1397 // This is a special case since we want to verify that the last tag is 0. We a
ssume we exhaust the | 1563 // This is a special case since we want to verify that the last tag is 0. We a
ssume we exhaust the |
1398 // ByteString. | 1564 // ByteString. |
1399 private static <T extends GeneratedMessageLite<T, ?>> T parsePartialFrom( | 1565 private static <T extends GeneratedMessageLite<T, ?>> T parsePartialFrom( |
1400 T defaultInstance, byte[] data, ExtensionRegistryLite extensionRegistry) | 1566 T defaultInstance, byte[] data, ExtensionRegistryLite extensionRegistry) |
1401 throws InvalidProtocolBufferException { | 1567 throws InvalidProtocolBufferException { |
1402 T message; | 1568 T message; |
1403 try { | 1569 try { |
1404 CodedInputStream input = CodedInputStream.newInstance(data); | 1570 CodedInputStream input = CodedInputStream.newInstance(data); |
1405 message = parsePartialFrom(defaultInstance, input, extensionRegistry); | 1571 message = parsePartialFrom(defaultInstance, input, extensionRegistry); |
1406 try { | 1572 try { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1470 ExtensionRegistryLite.getEmptyRegistry())); | 1636 ExtensionRegistryLite.getEmptyRegistry())); |
1471 } | 1637 } |
1472 | 1638 |
1473 // Validates last tag. | 1639 // Validates last tag. |
1474 protected static <T extends GeneratedMessageLite<T, ?>> T parseDelimitedFrom( | 1640 protected static <T extends GeneratedMessageLite<T, ?>> T parseDelimitedFrom( |
1475 T defaultInstance, InputStream input, ExtensionRegistryLite extensionRegis
try) | 1641 T defaultInstance, InputStream input, ExtensionRegistryLite extensionRegis
try) |
1476 throws InvalidProtocolBufferException { | 1642 throws InvalidProtocolBufferException { |
1477 return checkMessageInitialized( | 1643 return checkMessageInitialized( |
1478 parsePartialDelimitedFrom(defaultInstance, input, extensionRegistry)); | 1644 parsePartialDelimitedFrom(defaultInstance, input, extensionRegistry)); |
1479 } | 1645 } |
1480 | 1646 |
1481 private static <T extends GeneratedMessageLite<T, ?>> T parsePartialDelimitedF
rom( | 1647 private static <T extends GeneratedMessageLite<T, ?>> T parsePartialDelimitedF
rom( |
1482 T defaultInstance, | 1648 T defaultInstance, |
1483 InputStream input, | 1649 InputStream input, |
1484 ExtensionRegistryLite extensionRegistry) | 1650 ExtensionRegistryLite extensionRegistry) |
1485 throws InvalidProtocolBufferException { | 1651 throws InvalidProtocolBufferException { |
1486 int size; | 1652 int size; |
1487 try { | 1653 try { |
1488 int firstByte = input.read(); | 1654 int firstByte = input.read(); |
1489 if (firstByte == -1) { | 1655 if (firstByte == -1) { |
1490 return null; | 1656 return null; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1523 Object visitOneofBoolean(boolean minePresent, Object mine, Object other); | 1689 Object visitOneofBoolean(boolean minePresent, Object mine, Object other); |
1524 Object visitOneofInt(boolean minePresent, Object mine, Object other); | 1690 Object visitOneofInt(boolean minePresent, Object mine, Object other); |
1525 Object visitOneofDouble(boolean minePresent, Object mine, Object other); | 1691 Object visitOneofDouble(boolean minePresent, Object mine, Object other); |
1526 Object visitOneofFloat(boolean minePresent, Object mine, Object other); | 1692 Object visitOneofFloat(boolean minePresent, Object mine, Object other); |
1527 Object visitOneofLong(boolean minePresent, Object mine, Object other); | 1693 Object visitOneofLong(boolean minePresent, Object mine, Object other); |
1528 Object visitOneofString(boolean minePresent, Object mine, Object other); | 1694 Object visitOneofString(boolean minePresent, Object mine, Object other); |
1529 Object visitOneofByteString(boolean minePresent, Object mine, Object other); | 1695 Object visitOneofByteString(boolean minePresent, Object mine, Object other); |
1530 Object visitOneofLazyMessage(boolean minePresent, Object mine, Object other)
; | 1696 Object visitOneofLazyMessage(boolean minePresent, Object mine, Object other)
; |
1531 Object visitOneofMessage(boolean minePresent, Object mine, Object other); | 1697 Object visitOneofMessage(boolean minePresent, Object mine, Object other); |
1532 void visitOneofNotSet(boolean minePresent); | 1698 void visitOneofNotSet(boolean minePresent); |
1533 | 1699 |
1534 /** | 1700 /** |
1535 * Message fields use null sentinals. | 1701 * Message fields use null sentinals. |
1536 */ | 1702 */ |
1537 <T extends MessageLite> T visitMessage(T mine, T other); | 1703 <T extends MessageLite> T visitMessage(T mine, T other); |
1538 LazyFieldLite visitLazyMessage( | 1704 LazyFieldLite visitLazyMessage(LazyFieldLite mine, LazyFieldLite other); |
1539 boolean minePresent, LazyFieldLite mine, boolean otherPresent, LazyField
Lite other); | |
1540 | 1705 |
1541 <T> ProtobufList<T> visitList(ProtobufList<T> mine, ProtobufList<T> other); | 1706 <T> ProtobufList<T> visitList(ProtobufList<T> mine, ProtobufList<T> other); |
1542 BooleanList visitBooleanList(BooleanList mine, BooleanList other); | 1707 BooleanList visitBooleanList(BooleanList mine, BooleanList other); |
1543 IntList visitIntList(IntList mine, IntList other); | 1708 IntList visitIntList(IntList mine, IntList other); |
1544 DoubleList visitDoubleList(DoubleList mine, DoubleList other); | 1709 DoubleList visitDoubleList(DoubleList mine, DoubleList other); |
1545 FloatList visitFloatList(FloatList mine, FloatList other); | 1710 FloatList visitFloatList(FloatList mine, FloatList other); |
1546 LongList visitLongList(LongList mine, LongList other); | 1711 LongList visitLongList(LongList mine, LongList other); |
1547 FieldSet<ExtensionDescriptor> visitExtensions( | 1712 FieldSet<ExtensionDescriptor> visitExtensions( |
1548 FieldSet<ExtensionDescriptor> mine, FieldSet<ExtensionDescriptor> other)
; | 1713 FieldSet<ExtensionDescriptor> mine, FieldSet<ExtensionDescriptor> other)
; |
1549 UnknownFieldSetLite visitUnknownFields(UnknownFieldSetLite mine, UnknownFiel
dSetLite other); | 1714 UnknownFieldSetLite visitUnknownFields(UnknownFieldSetLite mine, UnknownFiel
dSetLite other); |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1679 throw NOT_EQUALS; | 1844 throw NOT_EQUALS; |
1680 } | 1845 } |
1681 | 1846 |
1682 @Override | 1847 @Override |
1683 public Object visitOneofLazyMessage(boolean minePresent, Object mine, Object
other) { | 1848 public Object visitOneofLazyMessage(boolean minePresent, Object mine, Object
other) { |
1684 if (minePresent && mine.equals(other)) { | 1849 if (minePresent && mine.equals(other)) { |
1685 return mine; | 1850 return mine; |
1686 } | 1851 } |
1687 throw NOT_EQUALS; | 1852 throw NOT_EQUALS; |
1688 } | 1853 } |
1689 | 1854 |
1690 @Override | 1855 @Override |
1691 public Object visitOneofMessage(boolean minePresent, Object mine, Object oth
er) { | 1856 public Object visitOneofMessage(boolean minePresent, Object mine, Object oth
er) { |
1692 if (minePresent && ((GeneratedMessageLite<?, ?>) mine).equals(this, (Messa
geLite) other)) { | 1857 if (minePresent && ((GeneratedMessageLite<?, ?>) mine).equals(this, (Messa
geLite) other)) { |
1693 return mine; | 1858 return mine; |
1694 } | 1859 } |
1695 throw NOT_EQUALS; | 1860 throw NOT_EQUALS; |
1696 } | 1861 } |
1697 | 1862 |
1698 @Override | 1863 @Override |
1699 public void visitOneofNotSet(boolean minePresent) { | 1864 public void visitOneofNotSet(boolean minePresent) { |
1700 if (minePresent) { | 1865 if (minePresent) { |
1701 throw NOT_EQUALS; | 1866 throw NOT_EQUALS; |
1702 } | 1867 } |
1703 } | 1868 } |
1704 | 1869 |
1705 @Override | 1870 @Override |
1706 public <T extends MessageLite> T visitMessage(T mine, T other) { | 1871 public <T extends MessageLite> T visitMessage(T mine, T other) { |
1707 if (mine == null && other == null) { | 1872 if (mine == null && other == null) { |
1708 return null; | 1873 return null; |
1709 } | 1874 } |
1710 | 1875 |
1711 if (mine == null || other == null) { | 1876 if (mine == null || other == null) { |
1712 throw NOT_EQUALS; | 1877 throw NOT_EQUALS; |
1713 } | 1878 } |
1714 | 1879 |
1715 ((GeneratedMessageLite<?, ?>) mine).equals(this, other); | 1880 ((GeneratedMessageLite<?, ?>) mine).equals(this, other); |
1716 | 1881 |
1717 return mine; | 1882 return mine; |
1718 } | 1883 } |
1719 | 1884 |
1720 @Override | 1885 @Override |
1721 public LazyFieldLite visitLazyMessage( | 1886 public LazyFieldLite visitLazyMessage( |
1722 boolean minePresent, LazyFieldLite mine, boolean otherPresent, LazyField
Lite other) { | 1887 LazyFieldLite mine, LazyFieldLite other) { |
1723 if (!minePresent && !otherPresent) { | 1888 if (mine == null && other == null) { |
1724 return mine; | 1889 return null; |
1725 } else if (minePresent && otherPresent && mine.equals(other)) { | 1890 } |
| 1891 if (mine == null || other == null) { |
| 1892 throw NOT_EQUALS; |
| 1893 } |
| 1894 if (mine.equals(other)) { |
1726 return mine; | 1895 return mine; |
1727 } | 1896 } |
1728 throw NOT_EQUALS; | 1897 throw NOT_EQUALS; |
1729 } | 1898 } |
1730 | 1899 |
1731 @Override | 1900 @Override |
1732 public <T> ProtobufList<T> visitList(ProtobufList<T> mine, ProtobufList<T> o
ther) { | 1901 public <T> ProtobufList<T> visitList(ProtobufList<T> mine, ProtobufList<T> o
ther) { |
1733 if (!mine.equals(other)) { | 1902 if (!mine.equals(other)) { |
1734 throw NOT_EQUALS; | 1903 throw NOT_EQUALS; |
1735 } | 1904 } |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1806 } | 1975 } |
1807 | 1976 |
1808 /** | 1977 /** |
1809 * Implements hashCode by accumulating state. | 1978 * Implements hashCode by accumulating state. |
1810 */ | 1979 */ |
1811 private static class HashCodeVisitor implements Visitor { | 1980 private static class HashCodeVisitor implements Visitor { |
1812 | 1981 |
1813 // The caller must ensure that the visitor is invoked parameterized with thi
s and this such that | 1982 // The caller must ensure that the visitor is invoked parameterized with thi
s and this such that |
1814 // other is this. This is required due to how oneof cases are handled. See t
he class comment | 1983 // other is this. This is required due to how oneof cases are handled. See t
he class comment |
1815 // on Visitor for more information. | 1984 // on Visitor for more information. |
1816 | 1985 |
1817 private int hashCode = 0; | 1986 private int hashCode = 0; |
1818 | 1987 |
1819 @Override | 1988 @Override |
1820 public boolean visitBoolean( | 1989 public boolean visitBoolean( |
1821 boolean minePresent, boolean mine, boolean otherPresent, boolean other)
{ | 1990 boolean minePresent, boolean mine, boolean otherPresent, boolean other)
{ |
1822 hashCode = (53 * hashCode) + Internal.hashBoolean(mine); | 1991 hashCode = (53 * hashCode) + Internal.hashBoolean(mine); |
1823 return mine; | 1992 return mine; |
1824 } | 1993 } |
1825 | 1994 |
1826 @Override | 1995 @Override |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1902 public Object visitOneofByteString(boolean minePresent, Object mine, Object
other) { | 2071 public Object visitOneofByteString(boolean minePresent, Object mine, Object
other) { |
1903 hashCode = (53 * hashCode) + mine.hashCode(); | 2072 hashCode = (53 * hashCode) + mine.hashCode(); |
1904 return mine; | 2073 return mine; |
1905 } | 2074 } |
1906 | 2075 |
1907 @Override | 2076 @Override |
1908 public Object visitOneofLazyMessage(boolean minePresent, Object mine, Object
other) { | 2077 public Object visitOneofLazyMessage(boolean minePresent, Object mine, Object
other) { |
1909 hashCode = (53 * hashCode) + mine.hashCode(); | 2078 hashCode = (53 * hashCode) + mine.hashCode(); |
1910 return mine; | 2079 return mine; |
1911 } | 2080 } |
1912 | 2081 |
1913 @Override | 2082 @Override |
1914 public Object visitOneofMessage(boolean minePresent, Object mine, Object oth
er) { | 2083 public Object visitOneofMessage(boolean minePresent, Object mine, Object oth
er) { |
1915 return visitMessage((MessageLite) mine, (MessageLite) other); | 2084 return visitMessage((MessageLite) mine, (MessageLite) other); |
1916 } | 2085 } |
1917 | 2086 |
1918 @Override | 2087 @Override |
1919 public void visitOneofNotSet(boolean minePresent) { | 2088 public void visitOneofNotSet(boolean minePresent) { |
1920 if (minePresent) { | 2089 if (minePresent) { |
1921 throw new IllegalStateException(); // Can't happen if other == this. | 2090 throw new IllegalStateException(); // Can't happen if other == this. |
1922 } | 2091 } |
1923 } | 2092 } |
1924 | 2093 |
1925 @Override | 2094 @Override |
1926 public <T extends MessageLite> T visitMessage(T mine, T other) { | 2095 public <T extends MessageLite> T visitMessage(T mine, T other) { |
1927 final int protoHash; | 2096 final int protoHash; |
1928 if (mine != null) { | 2097 if (mine != null) { |
1929 if (mine instanceof GeneratedMessageLite) { | 2098 if (mine instanceof GeneratedMessageLite) { |
1930 protoHash = ((GeneratedMessageLite) mine).hashCode(this); | 2099 protoHash = ((GeneratedMessageLite) mine).hashCode(this); |
1931 } else { | 2100 } else { |
1932 protoHash = mine.hashCode(); | 2101 protoHash = mine.hashCode(); |
1933 } | 2102 } |
1934 } else { | 2103 } else { |
1935 protoHash = 37; | 2104 protoHash = 37; |
1936 } | 2105 } |
1937 hashCode = (53 * hashCode) + protoHash; | 2106 hashCode = (53 * hashCode) + protoHash; |
1938 return mine; | 2107 return mine; |
1939 } | 2108 } |
1940 | 2109 |
1941 @Override | 2110 @Override |
1942 public LazyFieldLite visitLazyMessage( | 2111 public LazyFieldLite visitLazyMessage(LazyFieldLite mine, LazyFieldLite othe
r) { |
1943 boolean minePresent, LazyFieldLite mine, boolean otherPresent, LazyField
Lite other) { | 2112 final int protoHash; |
1944 hashCode = (53 * hashCode) + mine.hashCode(); | 2113 if (mine != null) { |
| 2114 protoHash = mine.hashCode(); |
| 2115 } else { |
| 2116 protoHash = 37; |
| 2117 } |
| 2118 hashCode = (53 * hashCode) + protoHash; |
1945 return mine; | 2119 return mine; |
1946 } | 2120 } |
1947 | 2121 |
1948 @Override | 2122 @Override |
1949 public <T> ProtobufList<T> visitList(ProtobufList<T> mine, ProtobufList<T> o
ther) { | 2123 public <T> ProtobufList<T> visitList(ProtobufList<T> mine, ProtobufList<T> o
ther) { |
1950 hashCode = (53 * hashCode) + mine.hashCode(); | 2124 hashCode = (53 * hashCode) + mine.hashCode(); |
1951 return mine; | 2125 return mine; |
1952 } | 2126 } |
1953 | 2127 |
1954 @Override | 2128 @Override |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1989 return mine; | 2163 return mine; |
1990 } | 2164 } |
1991 | 2165 |
1992 @Override | 2166 @Override |
1993 public UnknownFieldSetLite visitUnknownFields( | 2167 public UnknownFieldSetLite visitUnknownFields( |
1994 UnknownFieldSetLite mine, | 2168 UnknownFieldSetLite mine, |
1995 UnknownFieldSetLite other) { | 2169 UnknownFieldSetLite other) { |
1996 hashCode = (53 * hashCode) + mine.hashCode(); | 2170 hashCode = (53 * hashCode) + mine.hashCode(); |
1997 return mine; | 2171 return mine; |
1998 } | 2172 } |
1999 | 2173 |
2000 @Override | 2174 @Override |
2001 public <K, V> MapFieldLite<K, V> visitMap(MapFieldLite<K, V> mine, MapFieldL
ite<K, V> other) { | 2175 public <K, V> MapFieldLite<K, V> visitMap(MapFieldLite<K, V> mine, MapFieldL
ite<K, V> other) { |
2002 hashCode = (53 * hashCode) + mine.hashCode(); | 2176 hashCode = (53 * hashCode) + mine.hashCode(); |
2003 return mine; | 2177 return mine; |
2004 } | 2178 } |
2005 } | 2179 } |
2006 | 2180 |
2007 /** | 2181 /** |
2008 * Implements field merging semantics over the visitor interface. | 2182 * Implements field merging semantics over the visitor interface. |
2009 */ | 2183 */ |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2057 return other; | 2231 return other; |
2058 } | 2232 } |
2059 | 2233 |
2060 @Override | 2234 @Override |
2061 public Object visitOneofInt(boolean minePresent, Object mine, Object other)
{ | 2235 public Object visitOneofInt(boolean minePresent, Object mine, Object other)
{ |
2062 return other; | 2236 return other; |
2063 } | 2237 } |
2064 | 2238 |
2065 @Override | 2239 @Override |
2066 public Object visitOneofDouble(boolean minePresent, Object mine, Object othe
r) { | 2240 public Object visitOneofDouble(boolean minePresent, Object mine, Object othe
r) { |
2067 return other; | 2241 return other; |
2068 } | 2242 } |
2069 | 2243 |
2070 @Override | 2244 @Override |
2071 public Object visitOneofFloat(boolean minePresent, Object mine, Object other
) { | 2245 public Object visitOneofFloat(boolean minePresent, Object mine, Object other
) { |
2072 return other; | 2246 return other; |
2073 } | 2247 } |
2074 | 2248 |
2075 @Override | 2249 @Override |
2076 public Object visitOneofLong(boolean minePresent, Object mine, Object other)
{ | 2250 public Object visitOneofLong(boolean minePresent, Object mine, Object other)
{ |
2077 return other; | 2251 return other; |
2078 } | 2252 } |
2079 | 2253 |
2080 @Override | 2254 @Override |
2081 public Object visitOneofString(boolean minePresent, Object mine, Object othe
r) { | 2255 public Object visitOneofString(boolean minePresent, Object mine, Object othe
r) { |
2082 return other; | 2256 return other; |
2083 } | 2257 } |
2084 | 2258 |
2085 @Override | 2259 @Override |
2086 public Object visitOneofByteString(boolean minePresent, Object mine, Object
other) { | 2260 public Object visitOneofByteString(boolean minePresent, Object mine, Object
other) { |
2087 return other; | 2261 return other; |
2088 } | 2262 } |
2089 | 2263 |
2090 @Override | 2264 @Override |
2091 public Object visitOneofLazyMessage(boolean minePresent, Object mine, Object
other) { | 2265 public Object visitOneofLazyMessage(boolean minePresent, Object mine, Object
other) { |
2092 if (minePresent) { | 2266 LazyFieldLite lazy = minePresent ? (LazyFieldLite) mine : new LazyFieldLit
e(); |
2093 LazyFieldLite lazy = (LazyFieldLite) mine; | 2267 lazy.merge((LazyFieldLite) other); |
2094 lazy.merge((LazyFieldLite) other); | 2268 return lazy; |
2095 return lazy; | |
2096 } | |
2097 return other; | |
2098 } | 2269 } |
2099 | 2270 |
2100 @Override | 2271 @Override |
2101 public Object visitOneofMessage(boolean minePresent, Object mine, Object oth
er) { | 2272 public Object visitOneofMessage(boolean minePresent, Object mine, Object oth
er) { |
2102 if (minePresent) { | 2273 if (minePresent) { |
2103 return visitMessage((MessageLite) mine, (MessageLite) other); | 2274 return visitMessage((MessageLite) mine, (MessageLite) other); |
2104 } | 2275 } |
2105 return other; | 2276 return other; |
2106 } | 2277 } |
2107 | 2278 |
2108 @Override | 2279 @Override |
2109 public void visitOneofNotSet(boolean minePresent) { | 2280 public void visitOneofNotSet(boolean minePresent) { |
2110 return; | 2281 return; |
2111 } | 2282 } |
2112 | 2283 |
2113 @SuppressWarnings("unchecked") // Guaranteed by runtime. | 2284 @SuppressWarnings("unchecked") // Guaranteed by runtime. |
2114 @Override | 2285 @Override |
2115 public <T extends MessageLite> T visitMessage(T mine, T other) { | 2286 public <T extends MessageLite> T visitMessage(T mine, T other) { |
2116 if (mine != null && other != null) { | 2287 if (mine != null && other != null) { |
2117 return (T) mine.toBuilder().mergeFrom(other).build(); | 2288 return (T) mine.toBuilder().mergeFrom(other).build(); |
2118 } | 2289 } |
2119 | 2290 |
2120 return mine != null ? mine : other; | 2291 return mine != null ? mine : other; |
2121 } | 2292 } |
2122 | 2293 |
2123 @Override | 2294 @Override |
2124 public LazyFieldLite visitLazyMessage( | 2295 public LazyFieldLite visitLazyMessage(LazyFieldLite mine, LazyFieldLite othe
r) { |
2125 boolean minePresent, LazyFieldLite mine, boolean otherPresent, LazyField
Lite other) { | 2296 if (other != null) { |
2126 // LazyFieldLite's are never null so we can just copy across. Necessary to
avoid leakage | 2297 if (mine == null) { |
2127 // from builder into immutable message. | 2298 mine = new LazyFieldLite(); |
2128 // TODO(dweis): Change to null sentinels? | 2299 } |
2129 mine.merge(other); | 2300 mine.merge(other); |
| 2301 } |
2130 return mine; | 2302 return mine; |
2131 } | 2303 } |
2132 | 2304 |
2133 @Override | 2305 @Override |
2134 public <T> ProtobufList<T> visitList(ProtobufList<T> mine, ProtobufList<T> o
ther) { | 2306 public <T> ProtobufList<T> visitList(ProtobufList<T> mine, ProtobufList<T> o
ther) { |
2135 int size = mine.size(); | 2307 int size = mine.size(); |
2136 int otherSize = other.size(); | 2308 int otherSize = other.size(); |
2137 if (size > 0 && otherSize > 0) { | 2309 if (size > 0 && otherSize > 0) { |
2138 if (!mine.isModifiable()) { | 2310 if (!mine.isModifiable()) { |
2139 mine = mine.mutableCopyWithCapacity(size + otherSize); | 2311 mine = mine.mutableCopyWithCapacity(size + otherSize); |
2140 } | 2312 } |
2141 mine.addAll(other); | 2313 mine.addAll(other); |
2142 } | 2314 } |
2143 | 2315 |
2144 return size > 0 ? mine : other; | 2316 return size > 0 ? mine : other; |
2145 } | 2317 } |
2146 | 2318 |
2147 @Override | 2319 @Override |
2148 public BooleanList visitBooleanList(BooleanList mine, BooleanList other) { | 2320 public BooleanList visitBooleanList(BooleanList mine, BooleanList other) { |
2149 int size = mine.size(); | 2321 int size = mine.size(); |
2150 int otherSize = other.size(); | 2322 int otherSize = other.size(); |
2151 if (size > 0 && otherSize > 0) { | 2323 if (size > 0 && otherSize > 0) { |
2152 if (!mine.isModifiable()) { | 2324 if (!mine.isModifiable()) { |
2153 mine = mine.mutableCopyWithCapacity(size + otherSize); | 2325 mine = mine.mutableCopyWithCapacity(size + otherSize); |
2154 } | 2326 } |
2155 mine.addAll(other); | 2327 mine.addAll(other); |
2156 } | 2328 } |
2157 | 2329 |
2158 return size > 0 ? mine : other; | 2330 return size > 0 ? mine : other; |
2159 } | 2331 } |
2160 | 2332 |
2161 @Override | 2333 @Override |
2162 public IntList visitIntList(IntList mine, IntList other) { | 2334 public IntList visitIntList(IntList mine, IntList other) { |
2163 int size = mine.size(); | 2335 int size = mine.size(); |
2164 int otherSize = other.size(); | 2336 int otherSize = other.size(); |
2165 if (size > 0 && otherSize > 0) { | 2337 if (size > 0 && otherSize > 0) { |
2166 if (!mine.isModifiable()) { | 2338 if (!mine.isModifiable()) { |
2167 mine = mine.mutableCopyWithCapacity(size + otherSize); | 2339 mine = mine.mutableCopyWithCapacity(size + otherSize); |
2168 } | 2340 } |
2169 mine.addAll(other); | 2341 mine.addAll(other); |
2170 } | 2342 } |
2171 | 2343 |
2172 return size > 0 ? mine : other; | 2344 return size > 0 ? mine : other; |
2173 } | 2345 } |
2174 | 2346 |
2175 @Override | 2347 @Override |
2176 public DoubleList visitDoubleList(DoubleList mine, DoubleList other) { | 2348 public DoubleList visitDoubleList(DoubleList mine, DoubleList other) { |
2177 int size = mine.size(); | 2349 int size = mine.size(); |
2178 int otherSize = other.size(); | 2350 int otherSize = other.size(); |
2179 if (size > 0 && otherSize > 0) { | 2351 if (size > 0 && otherSize > 0) { |
2180 if (!mine.isModifiable()) { | 2352 if (!mine.isModifiable()) { |
2181 mine = mine.mutableCopyWithCapacity(size + otherSize); | 2353 mine = mine.mutableCopyWithCapacity(size + otherSize); |
2182 } | 2354 } |
2183 mine.addAll(other); | 2355 mine.addAll(other); |
2184 } | 2356 } |
2185 | 2357 |
2186 return size > 0 ? mine : other; | 2358 return size > 0 ? mine : other; |
2187 } | 2359 } |
2188 | 2360 |
2189 @Override | 2361 @Override |
2190 public FloatList visitFloatList(FloatList mine, FloatList other) { | 2362 public FloatList visitFloatList(FloatList mine, FloatList other) { |
2191 int size = mine.size(); | 2363 int size = mine.size(); |
2192 int otherSize = other.size(); | 2364 int otherSize = other.size(); |
2193 if (size > 0 && otherSize > 0) { | 2365 if (size > 0 && otherSize > 0) { |
2194 if (!mine.isModifiable()) { | 2366 if (!mine.isModifiable()) { |
2195 mine = mine.mutableCopyWithCapacity(size + otherSize); | 2367 mine = mine.mutableCopyWithCapacity(size + otherSize); |
2196 } | 2368 } |
2197 mine.addAll(other); | 2369 mine.addAll(other); |
2198 } | 2370 } |
2199 | 2371 |
2200 return size > 0 ? mine : other; | 2372 return size > 0 ? mine : other; |
2201 } | 2373 } |
2202 | 2374 |
2203 @Override | 2375 @Override |
2204 public LongList visitLongList(LongList mine, LongList other) { | 2376 public LongList visitLongList(LongList mine, LongList other) { |
2205 int size = mine.size(); | 2377 int size = mine.size(); |
2206 int otherSize = other.size(); | 2378 int otherSize = other.size(); |
2207 if (size > 0 && otherSize > 0) { | 2379 if (size > 0 && otherSize > 0) { |
2208 if (!mine.isModifiable()) { | 2380 if (!mine.isModifiable()) { |
2209 mine = mine.mutableCopyWithCapacity(size + otherSize); | 2381 mine = mine.mutableCopyWithCapacity(size + otherSize); |
2210 } | 2382 } |
2211 mine.addAll(other); | 2383 mine.addAll(other); |
2212 } | 2384 } |
2213 | 2385 |
2214 return size > 0 ? mine : other; | 2386 return size > 0 ? mine : other; |
2215 } | 2387 } |
2216 | 2388 |
2217 @Override | 2389 @Override |
2218 public FieldSet<ExtensionDescriptor> visitExtensions( | 2390 public FieldSet<ExtensionDescriptor> visitExtensions( |
2219 FieldSet<ExtensionDescriptor> mine, | 2391 FieldSet<ExtensionDescriptor> mine, |
2220 FieldSet<ExtensionDescriptor> other) { | 2392 FieldSet<ExtensionDescriptor> other) { |
2221 if (mine.isImmutable()) { | 2393 if (mine.isImmutable()) { |
2222 mine = mine.clone(); | 2394 mine = mine.clone(); |
2223 } | 2395 } |
2224 mine.mergeFrom(other); | 2396 mine.mergeFrom(other); |
2225 return mine; | 2397 return mine; |
2226 } | 2398 } |
2227 | 2399 |
2228 @Override | 2400 @Override |
2229 public UnknownFieldSetLite visitUnknownFields( | 2401 public UnknownFieldSetLite visitUnknownFields( |
2230 UnknownFieldSetLite mine, | 2402 UnknownFieldSetLite mine, |
2231 UnknownFieldSetLite other) { | 2403 UnknownFieldSetLite other) { |
2232 return other == UnknownFieldSetLite.getDefaultInstance() | 2404 return other == UnknownFieldSetLite.getDefaultInstance() |
2233 ? mine : UnknownFieldSetLite.mutableCopyOf(mine, other); | 2405 ? mine : UnknownFieldSetLite.mutableCopyOf(mine, other); |
2234 } | 2406 } |
2235 | 2407 |
2236 @Override | 2408 @Override |
2237 public <K, V> MapFieldLite<K, V> visitMap(MapFieldLite<K, V> mine, MapFieldL
ite<K, V> other) { | 2409 public <K, V> MapFieldLite<K, V> visitMap(MapFieldLite<K, V> mine, MapFieldL
ite<K, V> other) { |
2238 mine.mergeFrom(other); | 2410 if (!other.isEmpty()) { |
| 2411 if (!mine.isMutable()) { |
| 2412 mine = mine.mutableCopy(); |
| 2413 } |
| 2414 mine.mergeFrom(other); |
| 2415 } |
2239 return mine; | 2416 return mine; |
2240 } | 2417 } |
2241 } | 2418 } |
2242 } | 2419 } |
OLD | NEW |