Fix remaining Java Serialization issues with JDK21 (#2881)

Fix remaining Java Serialization issues with JDK21

Co-authored-by: karnsa <karnsa@vmware.com>
This commit is contained in:
KrnSaurabh 2024-10-04 17:30:11 +05:30 committed by GitHub
parent c721c5b1ed
commit e53842b6b5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 39 additions and 7 deletions

View File

@ -1105,7 +1105,7 @@ def generateMainClasses(): Unit = {
private static final long serialVersionUID = 1L;
private final Pattern0<T> pattern;
private final $FunctionType<? super T, ? extends R> f;
private transient final $FunctionType<? super T, ? extends R> f;
private Case0(Pattern0<T> pattern, $FunctionType<? super T, ? extends R> f) {
this.pattern = pattern;
@ -1131,13 +1131,18 @@ def generateMainClasses(): Unit = {
case 2 => BiFunctionType
case _ => s"Function$i"
}
val accessModifier = i match {
case 1 => "transient final"
case 2 => "transient final"
case _ => "final"
}
xs"""
public static final class Case$i<T, $generics, R> implements Case<T, R> {
private static final long serialVersionUID = 1L;
private final Pattern$i<T, $generics> pattern;
private final $functionType<$argTypes, ? extends R> f;
private $accessModifier $functionType<$argTypes, ? extends R> f;
private Case$i(Pattern$i<T, $generics> pattern, $functionType<$argTypes, ? extends R> f) {
this.pattern = pattern;
@ -2354,7 +2359,9 @@ def generateMainClasses(): Unit = {
/**
* The base interface of all tuples.
*/
public interface Tuple {
public interface Tuple extends ${im.getType("java.io.Serializable")} {
long serialVersionUID = 1L;
/**
* The maximum arity of an Tuple.
@ -2438,7 +2445,10 @@ def generateMainClasses(): Unit = {
/**
* Helper to replace reflective array access.
*/
interface ArrayType<T> {
interface ArrayType<T> extends Serializable {
long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
static <T> ArrayType<T> obj() { return (ArrayType<T>) ObjectArrayType.INSTANCE; }

View File

@ -32,13 +32,16 @@ package io.vavr;
import io.vavr.collection.Seq;
import io.vavr.collection.Stream;
import java.io.Serializable;
import java.util.Map;
import java.util.Objects;
/**
* The base interface of all tuples.
*/
public interface Tuple {
public interface Tuple extends Serializable {
long serialVersionUID = 1L;
/**
* The maximum arity of an Tuple.

View File

@ -37,7 +37,10 @@ import java.util.Collection;
/**
* Helper to replace reflective array access.
*/
interface ArrayType<T> {
interface ArrayType<T> extends Serializable {
long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
static <T> ArrayType<T> obj() { return (ArrayType<T>) ObjectArrayType.INSTANCE; }

View File

@ -51,6 +51,7 @@ public final class Array<T> implements IndexedSeq<T>, Serializable {
private static final Array<?> EMPTY = new Array<>(new Object[0]);
@SuppressWarnings("serial") // Conditionally serializable
private final Object[] delegate;
private Array(Object[] delegate) {

View File

@ -65,6 +65,7 @@ final class BitMappedTrie<T> implements Serializable {
static <T> BitMappedTrie<T> empty() { return (BitMappedTrie<T>) EMPTY; }
final ArrayType<T> type;
@SuppressWarnings("serial") // Conditionally serializable
private final Object array;
private final int offset, length;
private final int depthShift;

View File

@ -380,7 +380,9 @@ interface HashArrayMappedTrieModule {
private static final long serialVersionUID = 1L;
private final int hash;
@SuppressWarnings("serial") // Conditionally serializable
private final K key;
@SuppressWarnings("serial") // Conditionally serializable
private final V value;
LeafSingleton(int hash, K key, V value) {
@ -449,7 +451,9 @@ interface HashArrayMappedTrieModule {
private static final long serialVersionUID = 1L;
private final int hash;
@SuppressWarnings("serial") // Conditionally serializable
private final K key;
@SuppressWarnings("serial") // Conditionally serializable
private final V value;
private final int size;
private final LeafNode<K, V> tail;
@ -598,6 +602,7 @@ interface HashArrayMappedTrieModule {
private final int bitmap;
private final int size;
@SuppressWarnings("serial") // Conditionally serializable
private final Object[] subNodes;
IndexedNode(int bitmap, int size, Object[] subNodes) {
@ -711,6 +716,7 @@ interface HashArrayMappedTrieModule {
private static final long serialVersionUID = 1L;
@SuppressWarnings("serial") // Conditionally serializable
private final Object[] subNodes;
private final int count;
private final int size;

View File

@ -50,7 +50,9 @@ import static io.vavr.collection.RedBlackTree.Color.RED;
*
* @param <T> Component type
*/
interface RedBlackTree<T> extends Iterable<T> {
interface RedBlackTree<T> extends Iterable<T>, Serializable {
long serialVersionUID = 1L;
static <T> RedBlackTree<T> empty(Comparator<? super T> comparator) {
Objects.requireNonNull(comparator, "comparator is null");
@ -351,6 +353,7 @@ interface RedBlackTreeModule {
final Color color;
final int blackHeight;
final RedBlackTree<T> left;
@SuppressWarnings("serial")
final T value;
final RedBlackTree<T> right;
final Empty<T> empty;
@ -828,6 +831,7 @@ interface RedBlackTreeModule {
private static final long serialVersionUID = 1L;
@SuppressWarnings("serial") // Conditionally serializable
final Comparator<T> comparator;
// This is no public API! The RedBlackTree takes care of passing the correct Comparator.

View File

@ -833,6 +833,7 @@ public abstract class Tree<T> implements Traversable<T>, Serializable {
private static final long serialVersionUID = 1L;
@SuppressWarnings("serial") // Conditionally serializable
private final T value;
private final io.vavr.collection.List<Node<T>> children;

View File

@ -1533,6 +1533,7 @@ public final class TreeMap<K, V> implements SortedMap<K, V>, Serializable {
private static final long serialVersionUID = 1L;
@SuppressWarnings("serial") // Conditionally serializable
private final Comparator<K> keyComparator;
@SuppressWarnings("unchecked")

View File

@ -594,7 +594,9 @@ public class BitSetTest extends AbstractSortedSetTest {
private static final long serialVersionUID = 1L;
@SuppressWarnings("serial") // Conditionally serializable
private final java.util.Map<Integer, T> fromIntMap = new java.util.HashMap<>();
@SuppressWarnings("serial") // Conditionally serializable
private final java.util.Map<T, Integer> toIntMap = new java.util.HashMap<>();
private int nextValue = 0;