Skip to content

Commit 73cc3f5

Browse files
committed
Fixes #38.
1 parent 3738a29 commit 73cc3f5

File tree

4 files changed

+8
-65
lines changed

4 files changed

+8
-65
lines changed

basic/src/main/java/org/jvnet/jaxb2_commons/plugin/mergeable/MergeablePlugin.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,8 @@ protected void processClassOutline(ClassOutline classOutline) {
217217
final JVar shouldBeSet = block.decl(
218218
codeModel.ref(Boolean.class),
219219
fieldOutline.getPropertyInfo().getName(false)
220-
+ "ShouldBeSet",
221-
mergeStrategy.invoke("shouldBeSet")
220+
+ "ShouldBeMergedAndSet",
221+
mergeStrategy.invoke("shouldBeMergedAndSet")
222222
.arg(leftLocator).arg(rightLocator)
223223
.arg(leftFieldHasSetValue)
224224
.arg(rightFieldHasSetValue));

runtime/src/main/java/org/jvnet/jaxb2_commons/lang/DefaultMergeStrategy.java

Lines changed: 4 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
public class DefaultMergeStrategy implements MergeStrategy2, MergeStrategy {
66

7-
public static final MergeStrategy2 INSTANCE = new DefaultMergeStrategy();
7+
public static final DefaultMergeStrategy INSTANCE = new DefaultMergeStrategy();
88

99
@Override
10-
public Boolean shouldBeSet(ObjectLocator leftLocator,
10+
public Boolean shouldBeMergedAndSet(ObjectLocator leftLocator,
1111
ObjectLocator rightLocator, boolean leftSet, boolean rightSet) {
1212
return leftSet || rightSet;
1313
}
@@ -473,73 +473,16 @@ public short[] merge(ObjectLocator leftLocator, ObjectLocator rightLocator,
473473
}
474474
}
475475

476+
@Override
476477
public Object merge(ObjectLocator leftLocator, ObjectLocator rightLocator,
477478
Object left, Object right, boolean leftSet, boolean rightSet) {
478-
479479
if (leftSet && !rightSet) {
480480
return left;
481481
} else if (!leftSet && rightSet) {
482482
return right;
483483
} 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);
530485
}
531486
}
532487

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

runtime/src/main/java/org/jvnet/jaxb2_commons/lang/JAXBMergeStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ protected Object mergeInternal(ObjectLocator leftLocator,
2727
return !leftCollection.isEmpty() ? leftCollection : rightCollection;
2828
}
2929

30-
public static final MergeStrategy2 INSTANCE = new JAXBMergeStrategy();
30+
public static final JAXBMergeStrategy INSTANCE = new JAXBMergeStrategy();
3131

3232
}

runtime/src/main/java/org/jvnet/jaxb2_commons/lang/MergeStrategy2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
public interface MergeStrategy2 {
66

7-
public Boolean shouldBeSet(ObjectLocator leftLocator,
7+
public Boolean shouldBeMergedAndSet(ObjectLocator leftLocator,
88
ObjectLocator rightLocator, boolean leftSet, boolean rightSet);
99

1010
public boolean merge(ObjectLocator leftLocator, ObjectLocator rightLocator,

0 commit comments

Comments
 (0)