| 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 |