Skip to content

Commit 600f9dd

Browse files
committed
Polishing.
Improve pattern variable naming, use ClassUtils.getDescriptiveType(…) to avoid null-pointer exceptions. Simplify RedisOperationChain condition checks. See #2788
1 parent ee35a4c commit 600f9dd

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java

+20-16
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.springframework.data.redis.repository.query;
1717

18+
import java.util.Collection;
1819
import java.util.Iterator;
1920

2021
import org.springframework.dao.InvalidDataAccessApiUsageException;
@@ -30,6 +31,7 @@
3031
import org.springframework.data.repository.query.parser.Part;
3132
import org.springframework.data.repository.query.parser.PartTree;
3233
import org.springframework.lang.Nullable;
34+
import org.springframework.util.ClassUtils;
3335
import org.springframework.util.CollectionUtils;
3436

3537
/**
@@ -80,17 +82,15 @@ protected RedisOperationChain or(RedisOperationChain base, RedisOperationChain c
8082
}
8183

8284
@Override
83-
protected KeyValueQuery<RedisOperationChain> complete(@Nullable final RedisOperationChain criteria, Sort sort) {
85+
protected KeyValueQuery<RedisOperationChain> complete(@Nullable RedisOperationChain criteria, Sort sort) {
8486

8587
KeyValueQuery<RedisOperationChain> query = new KeyValueQuery<>(criteria);
8688

87-
if (criteria != null && !CollectionUtils.isEmpty(criteria.getSismember())
88-
&& !CollectionUtils.isEmpty(criteria.getOrSismember()))
89-
if (criteria.getSismember().size() == 1 && criteria.getOrSismember().size() == 1) {
90-
91-
criteria.getOrSismember().add(criteria.getSismember().iterator().next());
92-
criteria.getSismember().clear();
93-
}
89+
if (criteria != null && containsExactlyOne(criteria.getSismember())
90+
&& containsExactlyOne(criteria.getOrSismember())) {
91+
criteria.getOrSismember().addAll(criteria.getSismember());
92+
criteria.getSismember().clear();
93+
}
9494

9595
if (sort.isSorted()) {
9696
query.setSort(sort);
@@ -111,29 +111,33 @@ private NearPath getNearPath(Part part, Iterator<Object> iterator) {
111111
if (value instanceof Point point) {
112112

113113
if (!iterator.hasNext()) {
114-
String message = "Expected to find distance value for geo query; Are you missing a parameter";
114+
String message = "Expected to find distance value for geo query; Are you missing a parameter?";
115115
throw new InvalidDataAccessApiUsageException(message);
116116
}
117117

118118
Distance distance;
119119
Object distObject = iterator.next();
120120

121-
if (distObject instanceof Distance distanceValue) {
122-
distance = distanceValue;
123-
} else if (distObject instanceof Number numberValue) {
124-
distance = new Distance(numberValue.doubleValue(), Metrics.KILOMETERS);
121+
if (distObject instanceof Distance dist) {
122+
distance = dist;
123+
} else if (distObject instanceof Number num) {
124+
distance = new Distance(num.doubleValue(), Metrics.KILOMETERS);
125125
} else {
126126

127127
String message = String.format("Expected to find Distance or Numeric value for geo query but was %s",
128-
distObject.getClass());
128+
ClassUtils.getDescriptiveType(distObject));
129129
throw new InvalidDataAccessApiUsageException(message);
130130
}
131131

132132
return new NearPath(path, point, distance);
133133
}
134134

135-
String message = String.format("Expected to find a Circle or Point/Distance for geo query but was %s.",
136-
value.getClass());
135+
String message = String.format("Expected to find a Circle or Point/Distance for geo query but was %s",
136+
ClassUtils.getDescriptiveType(value.getClass()));
137137
throw new InvalidDataAccessApiUsageException(message);
138138
}
139+
140+
private static boolean containsExactlyOne(Collection<?> collection) {
141+
return !CollectionUtils.isEmpty(collection) && collection.size() == 1;
142+
}
139143
}

0 commit comments

Comments
 (0)