This is an automated email from the ASF dual-hosted git repository.
He-Pin pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pekko.git
The following commit(s) were added to refs/heads/main by this push:
new 78cd528313 refactor: migrate Collections.unmodifiable* to
List.copyOf/Set.copyOf/Map.copyOf (Java 10+) (#3194)
78cd528313 is described below
commit 78cd528313ea12252e0bce1f7d3e2754062fbe09
Author: He-Pin(kerr) <[email protected]>
AuthorDate: Fri Jun 26 22:00:50 2026 +0800
refactor: migrate Collections.unmodifiable* to
List.copyOf/Set.copyOf/Map.copyOf (Java 10+) (#3194)
* refactor: migrate Collections.unmodifiable* to
List.copyOf/Set.copyOf/Map.copyOf (Java 10+)
Motivation:
Java 10 introduced List.copyOf, Set.copyOf, and Map.copyOf as concise,
type-safe replacements for Collections.unmodifiable* wrappers. These
methods produce truly immutable snapshots rather than views, and align
with the broader Java 17 modernization effort across Pekko.
Modification:
- Replace Collections.unmodifiableList(x) with List.copyOf(x)
- Replace Collections.unmodifiableSet(new HashSet<>(Arrays.asList(...)))
with Set.of(...)
- Replace Collections.unmodifiableSet(x) with Set.copyOf(x)
- Replace Collections.unmodifiableMap(x) with Map.copyOf(x)
- Remove now-unused imports (Collections, HashSet, Arrays where applicable)
- Applied across 14 test files in 6 modules
Result:
Cleaner, more idiomatic Java 17 code. Immutable snapshots instead of
unmodifiable views. Net reduction of 17 lines across 14 files.
Tests: sbt validatePullRequest
References: https://javaalmanac.io/jdk/17/apidiff/8/
* refactor: migrate Collections.singletonList to List.of per review feedback
Motivation:
Address reviewer comment that Collections.singletonList should also
be migrated to the Java 9+ factory method List.of().
Modification:
Replace Collections.singletonList(element) with List.of(element) in
StatefulMap.java.
Result:
Consistent use of Java 9+ collection factory methods.
---
.../java/jdocs/org/apache/pekko/typed/InteractionPatternsTest.java | 2 +-
.../src/test/java/jdocs/delivery/ShardingDocExample.java | 3 +--
.../cluster/sharding/typed/ReplicatedShardingCompileOnlySpec.java | 4 +---
.../apache/pekko/cluster/sharding/typed/ReplicatedShardingTest.java | 5 +----
docs/src/test/java/jdocs/actor/ImmutableMessage.java | 4 +---
docs/src/test/java/jdocs/actor/Messages.java | 4 +---
docs/src/test/java/jdocs/stream/operators/flow/StatefulMap.java | 6 ++----
.../org/apache/pekko/persistence/typed/MyReplicatedBehavior.java | 3 +--
.../pekko/persistence/typed/ReplicatedAuctionExampleTest.java | 3 +--
.../org/apache/pekko/persistence/typed/ReplicatedMovieExample.java | 3 +--
.../pekko/persistence/typed/ReplicatedShoppingCartExample.java | 3 +--
.../jdocs/org/apache/pekko/persistence/typed/MovieWatchList.java | 2 +-
.../org/apache/pekko/persistence/typed/WebStoreCustomerFSM.java | 3 +--
.../org/apache/pekko/persistence/fsm/AbstractPersistentFSMTest.java | 3 +--
14 files changed, 15 insertions(+), 33 deletions(-)
diff --git
a/actor-typed-tests/src/test/java/jdocs/org/apache/pekko/typed/InteractionPatternsTest.java
b/actor-typed-tests/src/test/java/jdocs/org/apache/pekko/typed/InteractionPatternsTest.java
index a9960cfe55..6a7cf0b8b8 100644
---
a/actor-typed-tests/src/test/java/jdocs/org/apache/pekko/typed/InteractionPatternsTest.java
+++
b/actor-typed-tests/src/test/java/jdocs/org/apache/pekko/typed/InteractionPatternsTest.java
@@ -186,7 +186,7 @@ public class InteractionPatternsTest {
private final List<Command> messages;
public Batch(List<Command> messages) {
- this.messages = Collections.unmodifiableList(messages);
+ this.messages = List.copyOf(messages);
}
public List<Command> getMessages() {
diff --git
a/cluster-sharding-typed/src/test/java/jdocs/delivery/ShardingDocExample.java
b/cluster-sharding-typed/src/test/java/jdocs/delivery/ShardingDocExample.java
index 791df69762..23ac1d207f 100644
---
a/cluster-sharding-typed/src/test/java/jdocs/delivery/ShardingDocExample.java
+++
b/cluster-sharding-typed/src/test/java/jdocs/delivery/ShardingDocExample.java
@@ -26,7 +26,6 @@ import org.apache.pekko.actor.typed.javadsl.Receive;
import java.time.Duration;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletionStage;
@@ -87,7 +86,7 @@ interface ShardingDocExample {
public final List<String> tasks;
public State(List<String> tasks) {
- this.tasks = Collections.unmodifiableList(tasks);
+ this.tasks = List.copyOf(tasks);
}
public State add(String task) {
diff --git
a/cluster-sharding-typed/src/test/java/jdocs/org/apache/pekko/cluster/sharding/typed/ReplicatedShardingCompileOnlySpec.java
b/cluster-sharding-typed/src/test/java/jdocs/org/apache/pekko/cluster/sharding/typed/ReplicatedShardingCompileOnlySpec.java
index 9c28a27427..f689b119d7 100644
---
a/cluster-sharding-typed/src/test/java/jdocs/org/apache/pekko/cluster/sharding/typed/ReplicatedShardingCompileOnlySpec.java
+++
b/cluster-sharding-typed/src/test/java/jdocs/org/apache/pekko/cluster/sharding/typed/ReplicatedShardingCompileOnlySpec.java
@@ -33,9 +33,7 @@ public class ReplicatedShardingCompileOnlySpec {
}
public static final Set<ReplicaId> ALL_REPLICAS =
- Collections.unmodifiableSet(
- new HashSet<>(
- Arrays.asList(new ReplicaId("DC-A"), new ReplicaId("DC-B"), new
ReplicaId("DC-C"))));
+ Set.of(new ReplicaId("DC-A"), new ReplicaId("DC-B"), new
ReplicaId("DC-C"));
public static ReplicatedEntityProvider<Command> provider() {
// #bootstrap
diff --git
a/cluster-sharding-typed/src/test/java/org/apache/pekko/cluster/sharding/typed/ReplicatedShardingTest.java
b/cluster-sharding-typed/src/test/java/org/apache/pekko/cluster/sharding/typed/ReplicatedShardingTest.java
index 812eb1ebec..b8e8621e59 100644
---
a/cluster-sharding-typed/src/test/java/org/apache/pekko/cluster/sharding/typed/ReplicatedShardingTest.java
+++
b/cluster-sharding-typed/src/test/java/org/apache/pekko/cluster/sharding/typed/ReplicatedShardingTest.java
@@ -149,10 +149,7 @@ public class ReplicatedShardingTest {
}
public static final Set<ReplicaId> ALL_REPLICAS =
- Collections.unmodifiableSet(
- new HashSet<>(
- Arrays.asList(
- new ReplicaId("DC-A"), new ReplicaId("DC-B"), new
ReplicaId("DC-C"))));
+ Set.of(new ReplicaId("DC-A"), new ReplicaId("DC-B"), new
ReplicaId("DC-C"));
private final ReplicatedSharding<MyReplicatedStringSet.Command>
replicatedSharding;
diff --git a/docs/src/test/java/jdocs/actor/ImmutableMessage.java
b/docs/src/test/java/jdocs/actor/ImmutableMessage.java
index b94a85b309..094c5ec3fc 100644
--- a/docs/src/test/java/jdocs/actor/ImmutableMessage.java
+++ b/docs/src/test/java/jdocs/actor/ImmutableMessage.java
@@ -13,14 +13,12 @@
package jdocs.actor;
-import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
// #immutable-message
public record ImmutableMessage(int sequenceNumber, List<String> values) {
public ImmutableMessage {
- values = Collections.unmodifiableList(new ArrayList<>(values));
+ values = List.copyOf(values);
}
}
// #immutable-message
diff --git a/docs/src/test/java/jdocs/actor/Messages.java
b/docs/src/test/java/jdocs/actor/Messages.java
index f47aad7baa..5e535a17f7 100644
--- a/docs/src/test/java/jdocs/actor/Messages.java
+++ b/docs/src/test/java/jdocs/actor/Messages.java
@@ -13,8 +13,6 @@
package jdocs.actor;
-import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
public class Messages {
@@ -22,7 +20,7 @@ public class Messages {
// #immutable-message
static record ImmutableMessage(int sequenceNumber, List<String> values) {
public ImmutableMessage {
- values = Collections.unmodifiableList(new ArrayList<>(values));
+ values = List.copyOf(values);
}
}
diff --git a/docs/src/test/java/jdocs/stream/operators/flow/StatefulMap.java
b/docs/src/test/java/jdocs/stream/operators/flow/StatefulMap.java
index 52fceaa115..4153b7cde3 100644
--- a/docs/src/test/java/jdocs/stream/operators/flow/StatefulMap.java
+++ b/docs/src/test/java/jdocs/stream/operators/flow/StatefulMap.java
@@ -46,9 +46,7 @@ public class StatefulMap {
() -> (List<String>) new LinkedList<String>(),
(buffer, element) -> {
if (buffer.size() > 0 && (!buffer.get(0).equals(element))) {
- return Pair.create(
- new LinkedList<>(Collections.singletonList(element)),
- Collections.unmodifiableList(buffer));
+ return Pair.create(new LinkedList<>(List.of(element)),
List.copyOf(buffer));
} else {
buffer.add(element);
return Pair.create(buffer, Collections.<String>emptyList());
@@ -96,7 +94,7 @@ public class StatefulMap {
(list, element) -> {
list.add(element);
if (list.size() == 3) {
- return Pair.create(new ArrayList<Integer>(3),
Collections.unmodifiableList(list));
+ return Pair.create(new ArrayList<Integer>(3),
List.copyOf(list));
} else {
return Pair.create(list, Collections.<Integer>emptyList());
}
diff --git
a/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/MyReplicatedBehavior.java
b/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/MyReplicatedBehavior.java
index 26698e4208..e3fe783f7e 100644
---
a/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/MyReplicatedBehavior.java
+++
b/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/MyReplicatedBehavior.java
@@ -34,8 +34,7 @@ public class MyReplicatedBehavior
public static final ReplicaId DCA = new ReplicaId("DCA");
public static final ReplicaId DCB = new ReplicaId("DCB");
- public static final Set<ReplicaId> ALL_REPLICAS =
- Collections.unmodifiableSet(new HashSet<>(Arrays.asList(DCA, DCB)));
+ public static final Set<ReplicaId> ALL_REPLICAS = Set.of(DCA, DCB);
// #replicas
diff --git
a/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/ReplicatedAuctionExampleTest.java
b/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/ReplicatedAuctionExampleTest.java
index 8c3eec0222..0bc22bad4c 100644
---
a/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/ReplicatedAuctionExampleTest.java
+++
b/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/ReplicatedAuctionExampleTest.java
@@ -253,8 +253,7 @@ class AuctionEntity
AuctionState addFinishedAtReplica(String replica) {
Set<String> s = new HashSet<>(finishedAtDc);
s.add(replica);
- return new AuctionState(
- false, highestBid, highestCounterOffer,
Collections.unmodifiableSet(s));
+ return new AuctionState(false, highestBid, highestCounterOffer,
Set.copyOf(s));
}
public AuctionState close() {
diff --git
a/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/ReplicatedMovieExample.java
b/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/ReplicatedMovieExample.java
index 7e6f7d71d8..8a57976191 100644
---
a/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/ReplicatedMovieExample.java
+++
b/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/ReplicatedMovieExample.java
@@ -13,7 +13,6 @@
package jdocs.org.apache.pekko.persistence.typed;
-import java.util.Collections;
import java.util.Set;
import org.apache.pekko.actor.typed.ActorRef;
import org.apache.pekko.actor.typed.Behavior;
@@ -45,7 +44,7 @@ interface ReplicatedMovieExample {
public final Set<String> movieIds;
public MovieList(Set<String> movieIds) {
- this.movieIds = Collections.unmodifiableSet(movieIds);
+ this.movieIds = Set.copyOf(movieIds);
}
}
diff --git
a/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/ReplicatedShoppingCartExample.java
b/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/ReplicatedShoppingCartExample.java
index 8e9a63bf26..d802aca0dc 100644
---
a/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/ReplicatedShoppingCartExample.java
+++
b/persistence-typed-tests/src/test/java/jdocs/org/apache/pekko/persistence/typed/ReplicatedShoppingCartExample.java
@@ -13,7 +13,6 @@
package jdocs.org.apache.pekko.persistence.typed;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@@ -119,7 +118,7 @@ interface ReplicatedShoppingCartExample {
int count = counter.value().intValue();
if (count > 0) result.put(key, count);
});
- return Collections.unmodifiableMap(result);
+ return Map.copyOf(result);
}
@Override
diff --git
a/persistence-typed/src/test/java/jdocs/org/apache/pekko/persistence/typed/MovieWatchList.java
b/persistence-typed/src/test/java/jdocs/org/apache/pekko/persistence/typed/MovieWatchList.java
index d85ad80fff..7bf56b20d1 100644
---
a/persistence-typed/src/test/java/jdocs/org/apache/pekko/persistence/typed/MovieWatchList.java
+++
b/persistence-typed/src/test/java/jdocs/org/apache/pekko/persistence/typed/MovieWatchList.java
@@ -45,7 +45,7 @@ public class MovieWatchList
public final Set<String> movieIds;
public MovieList(Set<String> movieIds) {
- this.movieIds = Collections.unmodifiableSet(movieIds);
+ this.movieIds = Set.copyOf(movieIds);
}
public MovieList add(String movieId) {
diff --git
a/persistence-typed/src/test/java/jdocs/org/apache/pekko/persistence/typed/WebStoreCustomerFSM.java
b/persistence-typed/src/test/java/jdocs/org/apache/pekko/persistence/typed/WebStoreCustomerFSM.java
index d39dc05da7..f01d241ad5 100644
---
a/persistence-typed/src/test/java/jdocs/org/apache/pekko/persistence/typed/WebStoreCustomerFSM.java
+++
b/persistence-typed/src/test/java/jdocs/org/apache/pekko/persistence/typed/WebStoreCustomerFSM.java
@@ -15,7 +15,6 @@ package jdocs.org.apache.pekko.persistence.typed;
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
/**
@@ -33,7 +32,7 @@ public class WebStoreCustomerFSM {
public ShoppingCart() {}
public List<Item> getItems() {
- return Collections.unmodifiableList(items);
+ return List.copyOf(items);
}
public ShoppingCart addItem(Item item) {
diff --git
a/persistence/src/test/java/org/apache/pekko/persistence/fsm/AbstractPersistentFSMTest.java
b/persistence/src/test/java/org/apache/pekko/persistence/fsm/AbstractPersistentFSMTest.java
index 646b3c0fd4..447d5277c4 100644
---
a/persistence/src/test/java/org/apache/pekko/persistence/fsm/AbstractPersistentFSMTest.java
+++
b/persistence/src/test/java/org/apache/pekko/persistence/fsm/AbstractPersistentFSMTest.java
@@ -16,7 +16,6 @@ package org.apache.pekko.persistence.fsm;
import java.io.Serializable;
import java.time.Duration;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import org.apache.pekko.actor.*;
@@ -64,7 +63,7 @@ public class AbstractPersistentFSMTest {
public ShoppingCart() {}
public List<Item> getItems() {
- return Collections.unmodifiableList(items);
+ return List.copyOf(items);
}
public ShoppingCart addItem(Item item) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]