Skip to content

Commit bab0850

Browse files
committed
Polishing.
Fix nullability annotations for isEqual(…) parameters. Fix generics. Reformat code. Add tests. See #3414 Original pull request: #3615.
1 parent 3e1f95b commit bab0850

File tree

2 files changed

+59
-13
lines changed

2 files changed

+59
-13
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java

+19-13
Original file line numberDiff line numberDiff line change
@@ -898,7 +898,7 @@ private boolean simpleCriteriaEquals(Criteria left, Criteria right) {
898898
* @param right
899899
* @return
900900
*/
901-
private boolean isEqual(Object left, Object right) {
901+
private boolean isEqual(@Nullable Object left, @Nullable Object right) {
902902

903903
if (left == null) {
904904
return right == null;
@@ -918,42 +918,48 @@ private boolean isEqual(Object left, Object right) {
918918
}
919919

920920
if (left instanceof Document) {
921+
921922
if (!(right instanceof Document)) {
922923
return false;
923924
}
925+
924926
Document leftDocument = (Document) left;
925927
Document rightDocument = (Document) right;
926-
Iterator leftIterator = leftDocument.entrySet().iterator();
927-
Iterator rightIterator = rightDocument.entrySet().iterator();
928+
Iterator<Entry<String, Object>> leftIterator = leftDocument.entrySet().iterator();
929+
Iterator<Entry<String, Object>> rightIterator = rightDocument.entrySet().iterator();
928930

929931
while (leftIterator.hasNext() && rightIterator.hasNext()) {
930-
Map.Entry leftEntry = (Map.Entry)leftIterator.next();
931-
Map.Entry rightEntry = (Map.Entry)rightIterator.next();
932-
if (!isEqual(leftEntry.getKey(), rightEntry.getKey())) {
933-
return false;
934-
}
935-
if (!isEqual(leftEntry.getValue(), rightEntry.getValue())) {
932+
933+
Map.Entry<String, Object> leftEntry = leftIterator.next();
934+
Map.Entry<String, Object> rightEntry = rightIterator.next();
935+
936+
if (!isEqual(leftEntry.getKey(), rightEntry.getKey())
937+
|| !isEqual(leftEntry.getValue(), rightEntry.getValue())) {
936938
return false;
937939
}
938940
}
941+
939942
return !leftIterator.hasNext() && !rightIterator.hasNext();
940943
}
941944

942945
if (Collection.class.isAssignableFrom(left.getClass())) {
946+
943947
if (!Collection.class.isAssignableFrom(right.getClass())) {
944948
return false;
945949
}
946950

947-
Collection leftCollection = (Collection) left;
948-
Collection rightCollection = (Collection) right;
949-
Iterator leftIterator = leftCollection.iterator();
950-
Iterator rightIterator = rightCollection.iterator();
951+
Collection<?> leftCollection = (Collection<?>) left;
952+
Collection<?> rightCollection = (Collection<?>) right;
953+
Iterator<?> leftIterator = leftCollection.iterator();
954+
Iterator<?> rightIterator = rightCollection.iterator();
951955

952956
while (leftIterator.hasNext() && rightIterator.hasNext()) {
957+
953958
if (!isEqual(leftIterator.next(), rightIterator.next())) {
954959
return false;
955960
}
956961
}
962+
957963
return !leftIterator.hasNext() && !rightIterator.hasNext();
958964
}
959965

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaUnitTests.java

+40
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
* @author Christoph Strobl
3636
* @author Andreas Zink
3737
* @author Clément Petit
38+
* @author Mark Paluch
3839
*/
3940
public class CriteriaUnitTests {
4041

@@ -318,6 +319,45 @@ public void shouldEqualForSamePattern() {
318319
}
319320

320321
@Test // DATAMONGO-2002
322+
public void shouldEqualForDocument() {
323+
324+
assertThat(new Criteria("field").is(new Document("one", 1).append("two", "two").append("null", null)))
325+
.isEqualTo(new Criteria("field").is(new Document("one", 1).append("two", "two").append("null", null)));
326+
327+
assertThat(new Criteria("field").is(new Document("one", 1).append("two", "two").append("null", null)))
328+
.isNotEqualTo(new Criteria("field").is(new Document("one", 1).append("two", "two")));
329+
330+
assertThat(new Criteria("field").is(new Document("one", 1).append("two", "two")))
331+
.isNotEqualTo(new Criteria("field").is(new Document("one", 1).append("two", "two").append("null", null)));
332+
333+
assertThat(new Criteria("field").is(new Document("one", 1).append("null", null).append("two", "two")))
334+
.isNotEqualTo(new Criteria("field").is(new Document("one", 1).append("two", "two").append("null", null)));
335+
336+
assertThat(new Criteria("field").is(new Document())).isNotEqualTo(new Criteria("field").is("foo"));
337+
assertThat(new Criteria("field").is("foo")).isNotEqualTo(new Criteria("field").is(new Document()));
338+
}
339+
340+
@Test // DATAMONGO-2002
341+
public void shouldEqualForCollection() {
342+
343+
assertThat(new Criteria("field").is(Arrays.asList("foo", "bar")))
344+
.isEqualTo(new Criteria("field").is(Arrays.asList("foo", "bar")));
345+
346+
assertThat(new Criteria("field").is(Arrays.asList("foo", 1)))
347+
.isNotEqualTo(new Criteria("field").is(Arrays.asList("foo", "bar")));
348+
349+
assertThat(new Criteria("field").is(Collections.singletonList("foo")))
350+
.isNotEqualTo(new Criteria("field").is(Arrays.asList("foo", "bar")));
351+
352+
assertThat(new Criteria("field").is(Arrays.asList("foo", "bar")))
353+
.isNotEqualTo(new Criteria("field").is(Collections.singletonList("foo")));
354+
355+
assertThat(new Criteria("field").is(Arrays.asList("foo", "bar"))).isNotEqualTo(new Criteria("field").is("foo"));
356+
357+
assertThat(new Criteria("field").is("foo")).isNotEqualTo(new Criteria("field").is(Arrays.asList("foo", "bar")));
358+
}
359+
360+
@Test // GH-3414
321361
public void shouldEqualForSamePatternAndFlags() {
322362

323363
Criteria left = new Criteria("field").regex("foo", "iu");

0 commit comments

Comments
 (0)