Skip to content

Commit 1df82cb

Browse files
committed
Add serializers for unmodifiable and synchronized collections
1 parent b3bc29f commit 1df82cb

3 files changed

Lines changed: 48 additions & 103 deletions

File tree

src/com/esotericsoftware/kryo/serializers/SynchronizedCollectionSerializers.java

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import com.esotericsoftware.kryo.io.Input;
2626
import com.esotericsoftware.kryo.io.Output;
2727
import com.esotericsoftware.kryo.unsafe.UnsafeUtil;
28-
import com.esotericsoftware.kryo.util.Tuple2;
2928
import com.esotericsoftware.minlog.Log;
3029

3130
import java.util.ArrayList;
@@ -49,7 +48,6 @@
4948
public class SynchronizedCollectionSerializers {
5049

5150
private static class Offset {
52-
// Graalvm unsafe offset substitution support
5351
private static final long SOURCE_COLLECTION_FIELD_OFFSET;
5452
private static final long SOURCE_MAP_FIELD_OFFSET;
5553

@@ -72,7 +70,6 @@ private static class Offset {
7270
}
7371

7472
static final class SynchronizedCollectionSerializer extends CollectionSerializer<Collection> {
75-
7673
private final Function factory;
7774
private final long offset;
7875

@@ -134,37 +131,37 @@ public Map copy (Kryo kryo, Map original) {
134131
}
135132
}
136133

137-
private static Serializer<?> createSerializer (Tuple2<Class<?>, Function> factory) {
138-
if (Collection.class.isAssignableFrom(factory.f0)) {
139-
return new SynchronizedCollectionSerializer(factory.f1, Offset.SOURCE_COLLECTION_FIELD_OFFSET);
134+
private static Serializer<?> createSerializer (Map.Entry<Class<?>, Function> factory) {
135+
if (Collection.class.isAssignableFrom(factory.getKey())) {
136+
return new SynchronizedCollectionSerializer(factory.getValue(), Offset.SOURCE_COLLECTION_FIELD_OFFSET);
140137
} else {
141-
return new SynchronizedMapSerializer(factory.f1, Offset.SOURCE_MAP_FIELD_OFFSET);
138+
return new SynchronizedMapSerializer(factory.getValue(), Offset.SOURCE_MAP_FIELD_OFFSET);
142139
}
143140
}
144141

145-
static Tuple2<Class<?>, Function>[] synchronizedFactories () {
146-
return new Tuple2[] {
147-
Tuple2.<Class<?>, Function> of(
142+
static Map.Entry<Class<?>, Function>[] synchronizedFactories () {
143+
return new Map.Entry[] {
144+
Map.entry(
148145
Collections.synchronizedCollection(Arrays.asList("")).getClass(),
149-
o -> Collections.synchronizedCollection((Collection)o)),
150-
Tuple2.<Class<?>, Function> of(
146+
(Function)o -> Collections.synchronizedCollection((Collection)o)),
147+
Map.entry(
151148
Collections.synchronizedList(new ArrayList<Void>()).getClass(),
152-
o1 -> Collections.synchronizedList((List<?>)o1)),
153-
Tuple2.<Class<?>, Function> of(
149+
(Function)o1 -> Collections.synchronizedList((List<?>)o1)),
150+
Map.entry(
154151
Collections.synchronizedList(new LinkedList<Void>()).getClass(),
155-
o2 -> Collections.synchronizedList((List<?>)o2)),
156-
Tuple2.<Class<?>, Function> of(
152+
(Function)o2 -> Collections.synchronizedList((List<?>)o2)),
153+
Map.entry(
157154
Collections.synchronizedSet(new HashSet<Void>()).getClass(),
158-
o3 -> Collections.synchronizedSet((Set<?>)o3)),
159-
Tuple2.<Class<?>, Function> of(
155+
(Function)o3 -> Collections.synchronizedSet((Set<?>)o3)),
156+
Map.entry(
160157
Collections.synchronizedSortedSet(new TreeSet<>()).getClass(),
161-
o4 -> Collections.synchronizedSortedSet((TreeSet<?>)o4)),
162-
Tuple2.<Class<?>, Function> of(
158+
(Function)o4 -> Collections.synchronizedSortedSet((TreeSet<?>)o4)),
159+
Map.entry(
163160
Collections.synchronizedMap(new HashMap<Void, Void>()).getClass(),
164-
o5 -> Collections.synchronizedMap((Map)o5)),
165-
Tuple2.<Class<?>, Function> of(
161+
(Function)o5 -> Collections.synchronizedMap((Map)o5)),
162+
Map.entry(
166163
Collections.synchronizedSortedMap(new TreeMap<>()).getClass(),
167-
o6 -> Collections.synchronizedSortedMap((SortedMap)o6))
164+
(Function)o6 -> Collections.synchronizedSortedMap((SortedMap)o6))
168165
};
169166
}
170167

@@ -178,8 +175,8 @@ Tuple2.<Class<?>, Function> of(
178175
* @see Collections#synchronizedSortedMap(SortedMap) **/
179176
public static void registerSerializers (Kryo kryo) {
180177
try {
181-
for (Tuple2<Class<?>, Function> factory : synchronizedFactories()) {
182-
kryo.register(factory.f0, createSerializer(factory));
178+
for (Map.Entry<Class<?>, Function> factory : synchronizedFactories()) {
179+
kryo.register(factory.getKey(), createSerializer(factory));
183180
}
184181
} catch (Throwable ignored) {
185182
// ignored
@@ -196,8 +193,8 @@ public static void registerSerializers (Kryo kryo) {
196193
* @see Collections#synchronizedSortedMap(SortedMap) **/
197194
public static void addDefaultSerializers (Kryo kryo) {
198195
try {
199-
for (Tuple2<Class<?>, Function> factory : synchronizedFactories()) {
200-
kryo.addDefaultSerializer(factory.f0, createSerializer(factory));
196+
for (Map.Entry<Class<?>, Function> factory : synchronizedFactories()) {
197+
kryo.addDefaultSerializer(factory.getKey(), createSerializer(factory));
201198
}
202199
} catch (Throwable ignored) {
203200
// ignored

src/com/esotericsoftware/kryo/serializers/UnmodifiableCollectionSerializers.java

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import com.esotericsoftware.kryo.io.Input;
2626
import com.esotericsoftware.kryo.io.Output;
2727
import com.esotericsoftware.kryo.unsafe.UnsafeUtil;
28-
import com.esotericsoftware.kryo.util.Tuple2;
2928
import com.esotericsoftware.minlog.Log;
3029

3130
import java.util.ArrayList;
@@ -48,7 +47,6 @@
4847
public class UnmodifiableCollectionSerializers {
4948

5049
private static class Offset {
51-
// Graalvm unsafe offset substitution support
5250
private static final long SOURCE_COLLECTION_FIELD_OFFSET;
5351
private static final long SOURCE_MAP_FIELD_OFFSET;
5452

@@ -128,38 +126,38 @@ public Map copy (Kryo kryo, Map original) {
128126
}
129127
}
130128

131-
private static Serializer<?> createSerializer (Tuple2<Class<?>, Function> factory) {
132-
if (Collection.class.isAssignableFrom(factory.f0)) {
133-
return new UnmodifiableCollectionSerializer(factory.f1, Offset.SOURCE_COLLECTION_FIELD_OFFSET);
129+
private static Serializer<?> createSerializer (Map.Entry<Class<?>, Function> factory) {
130+
if (Collection.class.isAssignableFrom(factory.getKey())) {
131+
return new UnmodifiableCollectionSerializer(factory.getValue(), Offset.SOURCE_COLLECTION_FIELD_OFFSET);
134132
} else {
135-
return new UnmodifiableMapSerializer(factory.f1, Offset.SOURCE_MAP_FIELD_OFFSET);
133+
return new UnmodifiableMapSerializer(factory.getValue(), Offset.SOURCE_MAP_FIELD_OFFSET);
136134
}
137135
}
138136

139137
@SuppressWarnings("RedundantUnmodifiable")
140-
static Tuple2<Class<?>, Function>[] unmodifiableFactories () {
141-
return new Tuple2[] {
142-
Tuple2.<Class<?>, Function> of(
138+
static Map.Entry<Class<?>, Function>[] unmodifiableFactories () {
139+
return new Map.Entry[] {
140+
Map.entry(
143141
Collections.unmodifiableCollection(Collections.singletonList("")).getClass(),
144-
o -> Collections.unmodifiableCollection((Collection)o)),
145-
Tuple2.<Class<?>, Function> of(
142+
(Function)o -> Collections.unmodifiableCollection((Collection)o)),
143+
Map.entry(
146144
Collections.unmodifiableList(new ArrayList<Void>()).getClass(),
147-
o1 -> Collections.unmodifiableList((List<?>)o1)),
148-
Tuple2.<Class<?>, Function> of(
145+
(Function)o1 -> Collections.unmodifiableList((List<?>)o1)),
146+
Map.entry(
149147
Collections.unmodifiableList(new LinkedList<Void>()).getClass(),
150-
o2 -> Collections.unmodifiableList((List<?>)o2)),
151-
Tuple2.<Class<?>, Function> of(
148+
(Function)o2 -> Collections.unmodifiableList((List<?>)o2)),
149+
Map.entry(
152150
Collections.unmodifiableSet(new HashSet<Void>()).getClass(),
153-
o3 -> Collections.unmodifiableSet((Set<?>)o3)),
154-
Tuple2.<Class<?>, Function> of(
151+
(Function)o3 -> Collections.unmodifiableSet((Set<?>)o3)),
152+
Map.entry(
155153
Collections.unmodifiableSortedSet(new TreeSet<>()).getClass(),
156-
o4 -> Collections.unmodifiableSortedSet((SortedSet<?>)o4)),
157-
Tuple2.<Class<?>, Function> of(
154+
(Function)o4 -> Collections.unmodifiableSortedSet((SortedSet<?>)o4)),
155+
Map.entry(
158156
Collections.unmodifiableMap(new HashMap<>()).getClass(),
159-
o5 -> Collections.unmodifiableMap((Map)o5)),
160-
Tuple2.<Class<?>, Function> of(
157+
(Function)o5 -> Collections.unmodifiableMap((Map)o5)),
158+
Map.entry(
161159
Collections.unmodifiableSortedMap(new TreeMap<>()).getClass(),
162-
o6 -> Collections.unmodifiableSortedMap((SortedMap)o6))
160+
(Function)o6 -> Collections.unmodifiableSortedMap((SortedMap)o6))
163161
};
164162
}
165163

@@ -173,8 +171,8 @@ Tuple2.<Class<?>, Function> of(
173171
* @see Collections#unmodifiableSortedMap(SortedMap) */
174172
public static void registerSerializers (Kryo kryo) {
175173
try {
176-
for (Tuple2<Class<?>, Function> factory : unmodifiableFactories()) {
177-
kryo.register(factory.f0, createSerializer(factory));
174+
for (Map.Entry<Class<?>, Function> factory : unmodifiableFactories()) {
175+
kryo.register(factory.getKey(), createSerializer(factory));
178176
}
179177
} catch (Throwable ignored) {
180178
// ignored
@@ -191,8 +189,8 @@ public static void registerSerializers (Kryo kryo) {
191189
* @see Collections#unmodifiableSortedMap(SortedMap) */
192190
public static void addDefaultSerializers (Kryo kryo) {
193191
try {
194-
for (Tuple2<Class<?>, Function> factory : unmodifiableFactories()) {
195-
kryo.addDefaultSerializer(factory.f0, createSerializer(factory));
192+
for (Map.Entry<Class<?>, Function> factory : unmodifiableFactories()) {
193+
kryo.addDefaultSerializer(factory.getKey(), createSerializer(factory));
196194
}
197195
} catch (Throwable ignored) {
198196
// ignored

src/com/esotericsoftware/kryo/util/Tuple2.java

Lines changed: 0 additions & 50 deletions
This file was deleted.

0 commit comments

Comments
 (0)