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 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 // in the case that the extension registries are not the same then we might
in the future if we | 277 // in the case that the extension registries are not the same then we might
in the future if we |
278 // need to serialze and parse a message again. | 278 // need to serialze and parse a message again. |
279 if (this.value == null && other.value != null) { | 279 if (this.value == null && other.value != null) { |
280 setValue(mergeValueAndBytes(other.value, this.delayedBytes, this.extension
Registry)); | 280 setValue(mergeValueAndBytes(other.value, this.delayedBytes, this.extension
Registry)); |
281 return; | 281 return; |
282 } else if (this.value != null && other.value == null) { | 282 } else if (this.value != null && other.value == null) { |
283 setValue(mergeValueAndBytes(this.value, other.delayedBytes, other.extensio
nRegistry)); | 283 setValue(mergeValueAndBytes(this.value, other.delayedBytes, other.extensio
nRegistry)); |
284 return; | 284 return; |
285 } | 285 } |
286 | 286 |
287 // At this point we have two fully parsed messages. We can't merge directly
from one to the | 287 // At this point we have two fully parsed messages. |
288 // other because only generated builder code contains methods to mergeFrom a
nother parsed | 288 setValue(this.value.toBuilder().mergeFrom(other.value).build()); |
289 // message. We have to serialize one instance and then merge the bytes into
the other. This may | |
290 // drop extensions from one of the messages if one of the values had an exte
nsion set on it | |
291 // directly. | |
292 // | |
293 // To mitigate this we prefer serializing a message that has an extension re
gistry, and | |
294 // therefore a chance that all extensions set on it are in that registry. | |
295 // | |
296 // NOTE: The check for other.extensionRegistry not being null must come firs
t because at this | |
297 // point in time if other.extensionRegistry is not null then this.extensionR
egistry will not be | |
298 // null either. | |
299 if (other.extensionRegistry != null) { | |
300 setValue(mergeValueAndBytes(this.value, other.toByteString(), other.extens
ionRegistry)); | |
301 return; | |
302 } else if (this.extensionRegistry != null) { | |
303 setValue(mergeValueAndBytes(other.value, this.toByteString(), this.extensi
onRegistry)); | |
304 return; | |
305 } else { | |
306 // All extensions from the other message will be dropped because we have n
o registry. | |
307 setValue(mergeValueAndBytes(this.value, other.toByteString(), EMPTY_REGIST
RY)); | |
308 return; | |
309 } | |
310 } | 289 } |
311 | 290 |
312 /** | 291 /** |
313 * Merges another instance's contents from a stream. | 292 * Merges another instance's contents from a stream. |
314 * | 293 * |
315 * <p>LazyField is not thread-safe for write access. Synchronizations are need
ed | 294 * <p>LazyField is not thread-safe for write access. Synchronizations are need
ed |
316 * under read/write situations. | 295 * under read/write situations. |
317 */ | 296 */ |
318 public void mergeFrom(CodedInputStream input, ExtensionRegistryLite extensionR
egistry) | 297 public void mergeFrom(CodedInputStream input, ExtensionRegistryLite extensionR
egistry) |
319 throws IOException { | 298 throws IOException { |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 | 428 |
450 private static void checkArguments(ExtensionRegistryLite extensionRegistry, By
teString bytes) { | 429 private static void checkArguments(ExtensionRegistryLite extensionRegistry, By
teString bytes) { |
451 if (extensionRegistry == null) { | 430 if (extensionRegistry == null) { |
452 throw new NullPointerException("found null ExtensionRegistry"); | 431 throw new NullPointerException("found null ExtensionRegistry"); |
453 } | 432 } |
454 if (bytes == null) { | 433 if (bytes == null) { |
455 throw new NullPointerException("found null ByteString"); | 434 throw new NullPointerException("found null ByteString"); |
456 } | 435 } |
457 } | 436 } |
458 } | 437 } |
OLD | NEW |