Skip to content

Commit 635f305

Browse files
committed
DATAREDIS-719 - Polishing.
1 parent 850f060 commit 635f305

File tree

6 files changed

+100
-87
lines changed

6 files changed

+100
-87
lines changed

src/main/java/org/springframework/data/redis/connection/FutureResult.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
* @author Jennifer Hickey
2727
* @author Christoph Strobl
2828
* @author Mark Paluch
29-
* @param <T> The data type of the object that holds the future result (usually of type Future)
29+
* @param <T> The data type of the object that holds the future result (usually type of the
30+
* {@link java.util.concurrent.Future} or response wrapper).
3031
*/
3132
public abstract class FutureResult<T> {
3233

@@ -36,7 +37,7 @@ public abstract class FutureResult<T> {
3637
private boolean status = false;
3738

3839
@SuppressWarnings("rawtypes") //
39-
protected @Nullable Converter converter;
40+
protected Converter converter;
4041

4142
/**
4243
* Create new {@link FutureResult} for given object actually holding the result itself.
@@ -70,7 +71,6 @@ public FutureResult(T resultHolder, @Nullable Converter converter) {
7071
* @param defaultConversionResult must not be {@literal null}.
7172
* @since 2.1
7273
*/
73-
@SuppressWarnings("rawtypes")
7474
public FutureResult(T resultHolder, @Nullable Converter converter, Supplier<?> defaultConversionResult) {
7575

7676
this.resultHolder = resultHolder;
@@ -99,7 +99,7 @@ public T getResultHolder() {
9999
public Object convert(@Nullable Object result) {
100100

101101
if (result == null) {
102-
return computeDefaultResult(result);
102+
return computeDefaultResult(null);
103103
}
104104

105105
return computeDefaultResult(converter.convert(result));

src/main/java/org/springframework/data/redis/connection/jedis/JedisResult.java

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,23 @@
3030
* @author Jennifer Hickey
3131
* @author Christoph Strobl
3232
* @author Mark Paluch
33+
* @param <T> The data type of the object that holds the future result (usually of type Future).
34+
* @param <R> The data type of the result type.
3335
* @since 2.1
3436
*/
35-
class JedisResult<T, S> extends FutureResult<Response<?>> {
37+
class JedisResult<T, R> extends FutureResult<Response<?>> {
3638

3739
private final boolean convertPipelineAndTxResults;
3840

39-
<T> JedisResult(Response<T> resultHolder) {
41+
JedisResult(Response<T> resultHolder) {
4042
this(resultHolder, false, null);
4143
}
4244

43-
<T> JedisResult(Response<T> resultHolder, boolean convertPipelineAndTxResults, @Nullable Converter<T, ?> converter) {
44-
this(resultHolder, null, convertPipelineAndTxResults, converter);
45+
JedisResult(Response<T> resultHolder, boolean convertPipelineAndTxResults, @Nullable Converter<T, ?> converter) {
46+
this(resultHolder, () -> null, convertPipelineAndTxResults, converter);
4547
}
4648

47-
<T> JedisResult(Response<T> resultHolder, Supplier<S> defaultReturnValue, boolean convertPipelineAndTxResults,
49+
JedisResult(Response<T> resultHolder, Supplier<R> defaultReturnValue, boolean convertPipelineAndTxResults,
4850
@Nullable Converter<T, ?> converter) {
4951

5052
super(resultHolder, converter, defaultReturnValue);
@@ -58,27 +60,28 @@ <T> JedisResult(Response<T> resultHolder, Supplier<S> defaultReturnValue, boolea
5860
*/
5961
@Nullable
6062
@Override
63+
@SuppressWarnings("unchecked")
6164
public T get() {
6265
return (T) getResultHolder().get();
6366
}
6467

6568
/*
6669
* (non-Javadoc)
6770
* @see org.springframework.data.redis.connection.FutureResult#seeksConversion()
68-
* @return
6971
*/
7072
public boolean seeksConversion() {
71-
return convertPipelineAndTxResults && converter != null;
73+
return convertPipelineAndTxResults;
7274
}
7375

7476
/**
7577
* Jedis specific {@link FutureResult} implementation of a throw away status result.
7678
*/
77-
static class JedisStatusResult extends JedisResult {
79+
static class JedisStatusResult extends JedisResult<Object, Object> {
7880

81+
@SuppressWarnings("unchecked")
7982
<T> JedisStatusResult(Response<T> resultHolder, Converter<T, ?> converter) {
8083

81-
super(resultHolder, false, converter);
84+
super((Response) resultHolder, false, (Converter) converter);
8285
setStatus(true);
8386
}
8487
}
@@ -87,10 +90,10 @@ <T> JedisStatusResult(Response<T> resultHolder, Converter<T, ?> converter) {
8790
* Builder for constructing {@link JedisResult}.
8891
*
8992
* @param <T>
90-
* @param <S>
93+
* @param <R>
9194
* @since 2.1
9295
*/
93-
static class JedisResultBuilder<T, S> {
96+
static class JedisResultBuilder<T, R> {
9497

9598
private final Response<T> response;
9699
private Converter<T, ?> converter;
@@ -107,29 +110,30 @@ static class JedisResultBuilder<T, S> {
107110
return new JedisResultBuilder<>(response);
108111
}
109112

110-
<S> JedisResultBuilder<T, S> mappedWith(Converter<T, S> converter) {
113+
<R> JedisResultBuilder<T, R> mappedWith(Converter<T, R> converter) {
111114

112115
this.converter = converter;
113-
return (JedisResultBuilder<T, S>) this;
116+
return (JedisResultBuilder<T, R>) this;
114117
}
115118

116-
<S> JedisResultBuilder<T, S> defaultNullTo(S value) {
119+
<R> JedisResultBuilder<T, R> defaultNullTo(R value) {
117120
return (defaultNullTo(() -> value));
118121
}
119122

120-
<S> JedisResultBuilder<T, S> defaultNullTo(Supplier<S> value) {
123+
<R> JedisResultBuilder<T, R> defaultNullTo(Supplier<R> value) {
121124

122125
this.nullValueDefault = value;
123-
return (JedisResultBuilder<T, S>) this;
126+
return (JedisResultBuilder<T, R>) this;
124127
}
125128

126-
JedisResultBuilder<T, S> convertPipelineAndTxResults(boolean flag) {
129+
JedisResultBuilder<T, R> convertPipelineAndTxResults(boolean flag) {
127130

128131
convertPipelineAndTxResults = flag;
129132
return this;
130133
}
131134

132-
JedisResult<T, S> build() {
135+
@SuppressWarnings("unchecked")
136+
JedisResult<T, R> build() {
133137
return new JedisResult(response, nullValueDefault, convertPipelineAndTxResults, converter);
134138
}
135139

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -119,35 +119,41 @@ LettuceResult newLettuceResult(Future<?> resultHolder) {
119119
return newLettuceResult(resultHolder, (val) -> val);
120120
}
121121

122-
<T> LettuceResult newLettuceResult(Future<T> resultHolder, Converter<T, ?> converter) {
122+
@SuppressWarnings("unchecked")
123+
<T, R> LettuceResult<T, R> newLettuceResult(Future<T> resultHolder, Converter<T, ?> converter) {
123124

124-
return LettuceResultBuilder.forResponse(resultHolder).mappedWith(converter)
125+
return LettuceResultBuilder.forResponse(resultHolder).mappedWith((Converter) converter)
125126
.convertPipelineAndTxResults(convertPipelineAndTxResults).build();
126127
}
127128

128-
<T> LettuceResult newLettuceResult(Future<T> resultHolder, Converter<T, ?> converter, Supplier<?> defaultValue) {
129+
@SuppressWarnings("unchecked")
130+
<T, R> LettuceResult<T, R> newLettuceResult(Future<T> resultHolder, Converter<T, R> converter,
131+
Supplier<?> defaultValue) {
129132

130-
return LettuceResultBuilder.forResponse(resultHolder).mappedWith(converter)
133+
return LettuceResultBuilder.forResponse(resultHolder).mappedWith((Converter) converter)
131134
.convertPipelineAndTxResults(convertPipelineAndTxResults).defaultNullTo(defaultValue).build();
132135
}
133136

134137
LettuceStatusResult newLettuceStatusResult(Future<?> resultHolder) {
135138
return new LettuceStatusResult(resultHolder);
136139
}
137140

138-
LettuceTxResult newLettuceTxResult(Object resultHolder) {
141+
<T> LettuceTxResult<T, Object> newLettuceTxResult(T resultHolder) {
139142
return newLettuceTxResult(resultHolder, (val) -> val);
140143
}
141144

142-
<T> LettuceTxResult<T> newLettuceTxResult(Object resultHolder, Converter converter) {
145+
@SuppressWarnings("unchecked")
146+
<T> LettuceTxResult<T, Object> newLettuceTxResult(T resultHolder, Converter<T, ?> converter) {
143147

144-
return LettuceResultBuilder.forResponse(resultHolder).mappedWith(converter)
148+
return LettuceResultBuilder.forResponse(resultHolder).mappedWith((Converter) converter)
145149
.convertPipelineAndTxResults(convertPipelineAndTxResults).buildTxResult();
146150
}
147151

148-
<T> LettuceTxResult<T> newLettuceTxResult(Object resultHolder, Converter converter, Supplier<?> defaultValue) {
152+
@SuppressWarnings("unchecked")
153+
<T> LettuceTxResult<T, Object> newLettuceTxResult(T resultHolder, Converter<T, ?> converter,
154+
Supplier<?> defaultValue) {
149155

150-
return LettuceResultBuilder.forResponse(resultHolder).mappedWith(converter)
156+
return LettuceResultBuilder.forResponse(resultHolder).mappedWith((Converter) converter)
151157
.convertPipelineAndTxResults(convertPipelineAndTxResults).defaultNullTo(defaultValue).buildTxResult();
152158
}
153159

@@ -558,7 +564,7 @@ public byte[] echo(byte[] message) {
558564
return null;
559565
}
560566
if (isQueueing()) {
561-
transaction(new LettuceTxResult(getConnection().echo(message)));
567+
transaction(new LettuceTxResult<>(getConnection().echo(message)));
562568
return null;
563569
}
564570
return getConnection().echo(message);
@@ -575,7 +581,7 @@ public String ping() {
575581
return null;
576582
}
577583
if (isQueueing()) {
578-
transaction(new LettuceTxResult(getConnection().ping()));
584+
transaction(new LettuceTxResult<>(getConnection().ping()));
579585
return null;
580586
}
581587
return getConnection().ping();
@@ -589,10 +595,10 @@ public void discard() {
589595
isMulti = false;
590596
try {
591597
if (isPipelined()) {
592-
pipeline(new LettuceStatusResult(((RedisAsyncCommands) getAsyncDedicatedConnection()).discard()));
598+
pipeline(new LettuceStatusResult(getAsyncDedicatedRedisCommands().discard()));
593599
return;
594600
}
595-
((RedisCommands) getDedicatedConnection()).discard();
601+
getDedicatedRedisCommands().discard();
596602
} catch (Exception ex) {
597603
throw convertLettuceAccessException(ex);
598604
} finally {
@@ -608,7 +614,7 @@ public List<Object> exec() {
608614

609615
try {
610616
if (isPipelined()) {
611-
RedisFuture<TransactionResult> exec = ((RedisAsyncCommands) getAsyncDedicatedConnection()).exec();
617+
RedisFuture<TransactionResult> exec = getAsyncDedicatedRedisCommands().exec();
612618

613619
LettuceTransactionResultConverter resultConverter = new LettuceTransactionResultConverter(
614620
new LinkedList<>(txResults), LettuceConverters.exceptionConverter());
@@ -618,7 +624,7 @@ public List<Object> exec() {
618624
return null;
619625
}
620626

621-
TransactionResult transactionResult = ((RedisCommands) getDedicatedConnection()).exec();
627+
TransactionResult transactionResult = (getDedicatedRedisCommands()).exec();
622628
List<Object> results = LettuceConverters.transactionResultUnwrapper().convert(transactionResult);
623629
return convertPipelineAndTxResults
624630
? new LettuceTransactionResultConverter(txResults, LettuceConverters.exceptionConverter()).convert(results)
@@ -641,7 +647,7 @@ public void multi() {
641647
((RedisAsyncCommands) getAsyncDedicatedConnection()).multi();
642648
return;
643649
}
644-
((RedisCommands) getDedicatedConnection()).multi();
650+
(getDedicatedRedisCommands()).multi();
645651
} catch (Exception ex) {
646652
throw convertLettuceAccessException(ex);
647653
}
@@ -678,10 +684,10 @@ public void unwatch() {
678684
return;
679685
}
680686
if (isQueueing()) {
681-
transaction(new LettuceTxStatusResult(((RedisAsyncCommands) getDedicatedConnection()).unwatch()));
687+
transaction(new LettuceTxStatusResult(getDedicatedRedisCommands().unwatch()));
682688
return;
683689
}
684-
((RedisCommands) getDedicatedConnection()).unwatch();
690+
getDedicatedRedisCommands().unwatch();
685691
} catch (Exception ex) {
686692
throw convertLettuceAccessException(ex);
687693
}
@@ -694,14 +700,14 @@ public void watch(byte[]... keys) {
694700
}
695701
try {
696702
if (isPipelined()) {
697-
pipeline(new LettuceStatusResult(((RedisAsyncCommands) getAsyncDedicatedConnection()).watch((Object[]) keys)));
703+
pipeline(new LettuceStatusResult(getAsyncDedicatedRedisCommands().watch(keys)));
698704
return;
699705
}
700706
if (isQueueing()) {
701-
transaction(new LettuceTxStatusResult(((RedisAsyncCommands) getDedicatedConnection()).watch((Object[]) keys)));
707+
transaction(new LettuceTxStatusResult(getDedicatedRedisCommands().watch(keys)));
702708
return;
703709
}
704-
((RedisCommands) getDedicatedConnection()).watch((Object[]) keys);
710+
getDedicatedRedisCommands().watch(keys);
705711
} catch (Exception ex) {
706712
throw convertLettuceAccessException(ex);
707713
}
@@ -854,6 +860,11 @@ protected RedisClusterCommands<byte[], byte[]> getConnection() {
854860
return getDedicatedConnection();
855861
}
856862

863+
@SuppressWarnings("unchecked")
864+
private RedisAsyncCommands<byte[], byte[]> getAsyncDedicatedRedisCommands() {
865+
return (RedisAsyncCommands) getAsyncDedicatedConnection();
866+
}
867+
857868
protected RedisClusterAsyncCommands<byte[], byte[]> getAsyncDedicatedConnection() {
858869

859870
if (asyncDedicatedConn == null) {
@@ -876,6 +887,11 @@ protected RedisClusterAsyncCommands<byte[], byte[]> getAsyncDedicatedConnection(
876887
String.format("%s is not a supported connection type.", asyncDedicatedConn.getClass().getName()));
877888
}
878889

890+
@SuppressWarnings("unchecked")
891+
private RedisCommands<byte[], byte[]> getDedicatedRedisCommands() {
892+
return (RedisCommands) getDedicatedConnection();
893+
}
894+
879895
RedisClusterCommands<byte[], byte[]> getDedicatedConnection() {
880896

881897
if (asyncDedicatedConn == null) {
@@ -898,6 +914,7 @@ RedisClusterCommands<byte[], byte[]> getDedicatedConnection() {
898914
String.format("%s is not a supported connection type.", asyncDedicatedConn.getClass().getName()));
899915
}
900916

917+
@SuppressWarnings("unchecked")
901918
protected StatefulConnection<byte[], byte[]> doGetAsyncDedicatedConnection() {
902919
return connectionProvider.getConnection(StatefulConnection.class);
903920
}

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceKeyCommands.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public Boolean exists(byte[] key) {
6666
return null;
6767
}
6868
if (isQueueing()) {
69-
transaction(connection.newLettuceTxResult(getAsyncConnection().exists(new byte[][] { key }),
69+
transaction(connection.newLettuceTxResult(getConnection().exists(new byte[][] { key }),
7070
LettuceConverters.longToBooleanConverter()));
7171
return null;
7272
}
@@ -93,7 +93,7 @@ public Long exists(byte[]... keys) {
9393
return null;
9494
}
9595
if (isQueueing()) {
96-
transaction(connection.newLettuceTxResult(getAsyncConnection().exists(keys)));
96+
transaction(connection.newLettuceTxResult(getConnection().exists(keys)));
9797
return null;
9898
}
9999
return getConnection().exists(keys);

0 commit comments

Comments
 (0)