Skip to content

Commit e53842b

Browse files
KrnSaurabhkarnsa
andauthored
Fix remaining Java Serialization issues with JDK21 (#2881)
Fix remaining Java Serialization issues with JDK21 Co-authored-by: karnsa <karnsa@vmware.com>
1 parent c721c5b commit e53842b

File tree

10 files changed

+39
-7
lines changed

10 files changed

+39
-7
lines changed

generator/Generator.sc

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,7 +1105,7 @@ def generateMainClasses(): Unit = {
11051105
private static final long serialVersionUID = 1L;
11061106

11071107
private final Pattern0<T> pattern;
1108-
private final $FunctionType<? super T, ? extends R> f;
1108+
private transient final $FunctionType<? super T, ? extends R> f;
11091109

11101110
private Case0(Pattern0<T> pattern, $FunctionType<? super T, ? extends R> f) {
11111111
this.pattern = pattern;
@@ -1131,13 +1131,18 @@ def generateMainClasses(): Unit = {
11311131
case 2 => BiFunctionType
11321132
case _ => s"Function$i"
11331133
}
1134+
val accessModifier = i match {
1135+
case 1 => "transient final"
1136+
case 2 => "transient final"
1137+
case _ => "final"
1138+
}
11341139
xs"""
11351140
public static final class Case$i<T, $generics, R> implements Case<T, R> {
11361141

11371142
private static final long serialVersionUID = 1L;
11381143

11391144
private final Pattern$i<T, $generics> pattern;
1140-
private final $functionType<$argTypes, ? extends R> f;
1145+
private $accessModifier $functionType<$argTypes, ? extends R> f;
11411146

11421147
private Case$i(Pattern$i<T, $generics> pattern, $functionType<$argTypes, ? extends R> f) {
11431148
this.pattern = pattern;
@@ -2354,7 +2359,9 @@ def generateMainClasses(): Unit = {
23542359
/**
23552360
* The base interface of all tuples.
23562361
*/
2357-
public interface Tuple {
2362+
public interface Tuple extends ${im.getType("java.io.Serializable")} {
2363+
2364+
long serialVersionUID = 1L;
23582365

23592366
/**
23602367
* The maximum arity of an Tuple.
@@ -2438,7 +2445,10 @@ def generateMainClasses(): Unit = {
24382445
/**
24392446
* Helper to replace reflective array access.
24402447
*/
2441-
interface ArrayType<T> {
2448+
interface ArrayType<T> extends Serializable {
2449+
2450+
long serialVersionUID = 1L;
2451+
24422452
@SuppressWarnings("unchecked")
24432453
static <T> ArrayType<T> obj() { return (ArrayType<T>) ObjectArrayType.INSTANCE; }
24442454

src-gen/main/java/io/vavr/Tuple.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,16 @@
3232

3333
import io.vavr.collection.Seq;
3434
import io.vavr.collection.Stream;
35+
import java.io.Serializable;
3536
import java.util.Map;
3637
import java.util.Objects;
3738

3839
/**
3940
* The base interface of all tuples.
4041
*/
41-
public interface Tuple {
42+
public interface Tuple extends Serializable {
43+
44+
long serialVersionUID = 1L;
4245

4346
/**
4447
* The maximum arity of an Tuple.

src-gen/main/java/io/vavr/collection/ArrayType.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@
3737
/**
3838
* Helper to replace reflective array access.
3939
*/
40-
interface ArrayType<T> {
40+
interface ArrayType<T> extends Serializable {
41+
42+
long serialVersionUID = 1L;
43+
4144
@SuppressWarnings("unchecked")
4245
static <T> ArrayType<T> obj() { return (ArrayType<T>) ObjectArrayType.INSTANCE; }
4346

src/main/java/io/vavr/collection/Array.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public final class Array<T> implements IndexedSeq<T>, Serializable {
5151

5252
private static final Array<?> EMPTY = new Array<>(new Object[0]);
5353

54+
@SuppressWarnings("serial") // Conditionally serializable
5455
private final Object[] delegate;
5556

5657
private Array(Object[] delegate) {

src/main/java/io/vavr/collection/BitMappedTrie.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ final class BitMappedTrie<T> implements Serializable {
6565
static <T> BitMappedTrie<T> empty() { return (BitMappedTrie<T>) EMPTY; }
6666

6767
final ArrayType<T> type;
68+
@SuppressWarnings("serial") // Conditionally serializable
6869
private final Object array;
6970
private final int offset, length;
7071
private final int depthShift;

src/main/java/io/vavr/collection/HashArrayMappedTrie.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,9 @@ final class LeafSingleton<K, V> extends LeafNode<K, V> implements Serializable {
380380
private static final long serialVersionUID = 1L;
381381

382382
private final int hash;
383+
@SuppressWarnings("serial") // Conditionally serializable
383384
private final K key;
385+
@SuppressWarnings("serial") // Conditionally serializable
384386
private final V value;
385387

386388
LeafSingleton(int hash, K key, V value) {
@@ -449,7 +451,9 @@ final class LeafList<K, V> extends LeafNode<K, V> implements Serializable {
449451
private static final long serialVersionUID = 1L;
450452

451453
private final int hash;
454+
@SuppressWarnings("serial") // Conditionally serializable
452455
private final K key;
456+
@SuppressWarnings("serial") // Conditionally serializable
453457
private final V value;
454458
private final int size;
455459
private final LeafNode<K, V> tail;
@@ -598,6 +602,7 @@ final class IndexedNode<K, V> extends AbstractNode<K, V> implements Serializable
598602

599603
private final int bitmap;
600604
private final int size;
605+
@SuppressWarnings("serial") // Conditionally serializable
601606
private final Object[] subNodes;
602607

603608
IndexedNode(int bitmap, int size, Object[] subNodes) {
@@ -711,6 +716,7 @@ final class ArrayNode<K, V> extends AbstractNode<K, V> implements Serializable {
711716

712717
private static final long serialVersionUID = 1L;
713718

719+
@SuppressWarnings("serial") // Conditionally serializable
714720
private final Object[] subNodes;
715721
private final int count;
716722
private final int size;

src/main/java/io/vavr/collection/RedBlackTree.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@
5050
*
5151
* @param <T> Component type
5252
*/
53-
interface RedBlackTree<T> extends Iterable<T> {
53+
interface RedBlackTree<T> extends Iterable<T>, Serializable {
54+
55+
long serialVersionUID = 1L;
5456

5557
static <T> RedBlackTree<T> empty(Comparator<? super T> comparator) {
5658
Objects.requireNonNull(comparator, "comparator is null");
@@ -351,6 +353,7 @@ final class Node<T> implements RedBlackTree<T>, Serializable {
351353
final Color color;
352354
final int blackHeight;
353355
final RedBlackTree<T> left;
356+
@SuppressWarnings("serial")
354357
final T value;
355358
final RedBlackTree<T> right;
356359
final Empty<T> empty;
@@ -828,6 +831,7 @@ final class Empty<T> implements RedBlackTree<T>, Serializable {
828831

829832
private static final long serialVersionUID = 1L;
830833

834+
@SuppressWarnings("serial") // Conditionally serializable
831835
final Comparator<T> comparator;
832836

833837
// This is no public API! The RedBlackTree takes care of passing the correct Comparator.

src/main/java/io/vavr/collection/Tree.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,7 @@ public static final class Node<T> extends Tree<T> implements Serializable {
833833

834834
private static final long serialVersionUID = 1L;
835835

836+
@SuppressWarnings("serial") // Conditionally serializable
836837
private final T value;
837838
private final io.vavr.collection.List<Node<T>> children;
838839

src/main/java/io/vavr/collection/TreeMap.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,6 +1533,7 @@ final class Specific<K, V> implements EntryComparator<K, V> {
15331533

15341534
private static final long serialVersionUID = 1L;
15351535

1536+
@SuppressWarnings("serial") // Conditionally serializable
15361537
private final Comparator<K> keyComparator;
15371538

15381539
@SuppressWarnings("unchecked")

src/test/java/io/vavr/collection/BitSetTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,9 @@ private static final class Mapper<T> implements Serializable {
594594

595595
private static final long serialVersionUID = 1L;
596596

597+
@SuppressWarnings("serial") // Conditionally serializable
597598
private final java.util.Map<Integer, T> fromIntMap = new java.util.HashMap<>();
599+
@SuppressWarnings("serial") // Conditionally serializable
598600
private final java.util.Map<T, Integer> toIntMap = new java.util.HashMap<>();
599601
private int nextValue = 0;
600602

0 commit comments

Comments
 (0)