|
4 | 4 |
|
5 | 5 | public class DefaultMergeStrategy implements MergeStrategy2, MergeStrategy { |
6 | 6 |
|
7 | | - public static final MergeStrategy2 INSTANCE = new DefaultMergeStrategy(); |
| 7 | + public static final DefaultMergeStrategy INSTANCE = new DefaultMergeStrategy(); |
8 | 8 |
|
9 | 9 | @Override |
10 | | - public Boolean shouldBeSet(ObjectLocator leftLocator, |
| 10 | + public Boolean shouldBeMergedAndSet(ObjectLocator leftLocator, |
11 | 11 | ObjectLocator rightLocator, boolean leftSet, boolean rightSet) { |
12 | 12 | return leftSet || rightSet; |
13 | 13 | } |
@@ -473,73 +473,16 @@ public short[] merge(ObjectLocator leftLocator, ObjectLocator rightLocator, |
473 | 473 | } |
474 | 474 | } |
475 | 475 |
|
| 476 | + @Override |
476 | 477 | public Object merge(ObjectLocator leftLocator, ObjectLocator rightLocator, |
477 | 478 | Object left, Object right, boolean leftSet, boolean rightSet) { |
478 | | - |
479 | 479 | if (leftSet && !rightSet) { |
480 | 480 | return left; |
481 | 481 | } else if (!leftSet && rightSet) { |
482 | 482 | return right; |
483 | 483 | } else { |
484 | | - if (left == null) { |
485 | | - return right; |
486 | | - } |
487 | | - if (right == null) { |
488 | | - return left; |
489 | | - } |
490 | | - Class<?> lhsClass = left.getClass(); |
491 | | - if (!lhsClass.isArray()) { |
492 | | - return mergeInternal(leftLocator, rightLocator, left, right, |
493 | | - leftSet, rightSet); |
494 | | - } else if (left.getClass() != right.getClass()) { |
495 | | - // Here when we compare different dimensions, for example: a |
496 | | - // boolean[][] to a boolean[] |
497 | | - return false; |
498 | | - } |
499 | | - // 'Switch' on type of array, to dispatch to the correct handler |
500 | | - // This handles multi dimensional arrays of the same depth |
501 | | - else if (left instanceof long[]) { |
502 | | - return merge(leftLocator, rightLocator, (long[]) left, (long[]) right, |
503 | | - leftSet, rightSet); |
504 | | - } else if (left instanceof int[]) { |
505 | | - return merge(leftLocator, rightLocator, (int[]) left, (int[]) right, |
506 | | - leftSet, rightSet); |
507 | | - } else if (left instanceof short[]) { |
508 | | - return merge(leftLocator, rightLocator, (short[]) left, |
509 | | - (short[]) right, leftSet, rightSet); |
510 | | - } else if (left instanceof char[]) { |
511 | | - return merge(leftLocator, rightLocator, (char[]) left, (char[]) right, |
512 | | - leftSet, rightSet); |
513 | | - } else if (left instanceof byte[]) { |
514 | | - return merge(leftLocator, rightLocator, (byte[]) left, (byte[]) right, |
515 | | - leftSet, rightSet); |
516 | | - } else if (left instanceof double[]) { |
517 | | - return merge(leftLocator, rightLocator, (double[]) left, |
518 | | - (double[]) right, leftSet, rightSet); |
519 | | - } else if (left instanceof float[]) { |
520 | | - return merge(leftLocator, rightLocator, (float[]) left, |
521 | | - (float[]) right, leftSet, rightSet); |
522 | | - } else if (left instanceof boolean[]) { |
523 | | - return merge(leftLocator, rightLocator, (boolean[]) left, |
524 | | - (boolean[]) right, leftSet, rightSet); |
525 | | - } else { |
526 | | - // Not an array of primitives |
527 | | - return merge(leftLocator, rightLocator, (Object[]) left, |
528 | | - (Object[]) right, leftSet, rightSet); |
529 | | - } |
| 484 | + return merge(leftLocator, rightLocator, left, right); |
530 | 485 | } |
531 | 486 | } |
532 | 487 |
|
533 | | - protected Object mergeInternal(ObjectLocator leftLocator, |
534 | | - ObjectLocator rightLocator, Object leftValue, Object rightValue, |
535 | | - boolean leftValueSet, boolean rightValueSet) { |
536 | | - if (leftValueSet && !rightValueSet) { |
537 | | - return leftValue; |
538 | | - } else if (!leftValueSet && rightValueSet) { |
539 | | - return rightValue; |
540 | | - } else { |
541 | | - return mergeInternal(leftLocator, rightLocator, leftValue, |
542 | | - rightValue); |
543 | | - } |
544 | | - } |
545 | 488 | } |
0 commit comments