From 2e5aed4104483d63d49f5eac9c823be06ee59282 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 13 Jul 2023 10:04:21 +0200 Subject: [PATCH] Polishing. Add documentation for generics. Fix remove() and element() methods to adhere to their contract. See #2602 Original pull request: #2608 --- .../support/collections/RedisCollection.java | 1 + .../support/collections/RedisIterator.java | 4 +++ .../redis/support/collections/RedisList.java | 3 +- .../redis/support/collections/RedisSet.java | 1 + .../redis/support/collections/RedisZSet.java | 1 + .../collections/ReversedRedisListView.java | 33 ++++++++++--------- 6 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/support/collections/RedisCollection.java b/src/main/java/org/springframework/data/redis/support/collections/RedisCollection.java index 2e06729d2..427d6aa66 100644 --- a/src/main/java/org/springframework/data/redis/support/collections/RedisCollection.java +++ b/src/main/java/org/springframework/data/redis/support/collections/RedisCollection.java @@ -20,6 +20,7 @@ import java.util.Collection; /** * Redis extension for the {@link Collection} contract. * + * @param the type of elements in this collection. * @author Costin Leau */ public interface RedisCollection extends RedisStore { diff --git a/src/main/java/org/springframework/data/redis/support/collections/RedisIterator.java b/src/main/java/org/springframework/data/redis/support/collections/RedisIterator.java index 73444d7e1..fa73762ce 100644 --- a/src/main/java/org/springframework/data/redis/support/collections/RedisIterator.java +++ b/src/main/java/org/springframework/data/redis/support/collections/RedisIterator.java @@ -22,6 +22,7 @@ import org.springframework.lang.Nullable; /** * Iterator extension for Redis collection removal. * + * @param the type of elements in this collection. * @author Costin Leau */ abstract class RedisIterator implements Iterator { @@ -43,6 +44,7 @@ abstract class RedisIterator implements Iterator { * @return * @see java.util.Iterator#hasNext() */ + @Override public boolean hasNext() { return delegate.hasNext(); } @@ -51,6 +53,7 @@ abstract class RedisIterator implements Iterator { * @return * @see java.util.Iterator#next() */ + @Override public E next() { item = delegate.next(); return item; @@ -59,6 +62,7 @@ abstract class RedisIterator implements Iterator { /** * @see java.util.Iterator#remove() */ + @Override public void remove() { delegate.remove(); removeFromRedisStorage(item); diff --git a/src/main/java/org/springframework/data/redis/support/collections/RedisList.java b/src/main/java/org/springframework/data/redis/support/collections/RedisList.java index da0094834..7a70db36f 100644 --- a/src/main/java/org/springframework/data/redis/support/collections/RedisList.java +++ b/src/main/java/org/springframework/data/redis/support/collections/RedisList.java @@ -15,7 +15,7 @@ */ package org.springframework.data.redis.support.collections; -import static org.springframework.data.redis.connection.RedisListCommands.Direction; +import static org.springframework.data.redis.connection.RedisListCommands.*; import java.time.Duration; import java.util.Deque; @@ -34,6 +34,7 @@ import org.springframework.util.Assert; * Redis extension for the {@link List} contract. Supports {@link List}, {@link Queue} and {@link Deque} contracts as * well as their equivalent blocking siblings {@link BlockingDeque} and {@link BlockingDeque}. * + * @param the type of elements in this collection. * @author Costin Leau * @author Mark Paluch * @author John Blum diff --git a/src/main/java/org/springframework/data/redis/support/collections/RedisSet.java b/src/main/java/org/springframework/data/redis/support/collections/RedisSet.java index 44d3fb913..e68c0c7fe 100644 --- a/src/main/java/org/springframework/data/redis/support/collections/RedisSet.java +++ b/src/main/java/org/springframework/data/redis/support/collections/RedisSet.java @@ -24,6 +24,7 @@ import org.springframework.data.redis.core.RedisOperations; /** * Redis extension for the {@link Set} contract. Supports {@link Set} specific operations backed by Redis operations. * + * @param the type of elements in this collection. * @author Costin Leau * @author Christoph Strobl * @author Mark Paluch diff --git a/src/main/java/org/springframework/data/redis/support/collections/RedisZSet.java b/src/main/java/org/springframework/data/redis/support/collections/RedisZSet.java index 6bc830a87..a9c24e8eb 100644 --- a/src/main/java/org/springframework/data/redis/support/collections/RedisZSet.java +++ b/src/main/java/org/springframework/data/redis/support/collections/RedisZSet.java @@ -36,6 +36,7 @@ import org.springframework.data.redis.core.ZSetOperations.TypedTuple; *

* Since using a {@link Comparator} does not apply, a ZSet implements the {@link SortedSet} methods where applicable. * + * @param the type of elements in this collection. * @author Costin Leau * @author Mark Paluch * @author Christoph Strobl diff --git a/src/main/java/org/springframework/data/redis/support/collections/ReversedRedisListView.java b/src/main/java/org/springframework/data/redis/support/collections/ReversedRedisListView.java index 7c78304c0..e71716cbc 100644 --- a/src/main/java/org/springframework/data/redis/support/collections/ReversedRedisListView.java +++ b/src/main/java/org/springframework/data/redis/support/collections/ReversedRedisListView.java @@ -15,18 +15,7 @@ */ package org.springframework.data.redis.support.collections; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; -import java.util.NoSuchElementException; -import java.util.Objects; -import java.util.Spliterator; -import java.util.Spliterators; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import java.util.function.IntFunction; @@ -44,9 +33,9 @@ import org.springframework.lang.Nullable; * Implementation and view of an existing {@link RedisList} where the elements in the list (deque) are returned in * reverse order. * + * @param the type of elements in this collection. * @author John Blum * @author Mark Paluch - * @param {@link Class type} of the {@link Object elements} contained in the underlying, wrapped {@link RedisList}. * @since 3.2 */ class ReversedRedisListView implements RedisList { @@ -176,7 +165,7 @@ class ReversedRedisListView implements RedisList { public boolean addAll(Collection collection) { return !org.springframework.util.CollectionUtils.isEmpty(collection) - && this.base.addAll(0, Arrays.asList(reverse((E[]) collection.toArray()))); + && this.base.addAll(0, Arrays.asList(reverse((E[]) collection.toArray()))); } @Override @@ -430,7 +419,13 @@ class ReversedRedisListView implements RedisList { @Override public E element() { - return peekLast(); + + E value = peek(); + if (value == null) { + throw new NoSuchElementException(); + } + + return value; } @Override @@ -603,7 +598,13 @@ class ReversedRedisListView implements RedisList { @Override public E remove() { - return pollLast(); + + E value = poll(); + if (value == null) { + throw new NoSuchElementException(); + } + + return value; } @Override