From 6c402d9b14f09c81e5012c7071b0d430013a7374 Mon Sep 17 00:00:00 2001 From: Martin Grotzke Date: Tue, 29 Mar 2016 14:55:13 +0200 Subject: [PATCH] Make Closure public, moving it to ClosureSerializer. Closure is moved to ClosureSerializer because it's tightly coupled and this makes the connection more obvious. This also renames `Kryo.isClousre` to `isClosure`, assuming that it was not used until now it's ignored regarding binary compatibility. Fixes #299, refs #215 --- pom-main.xml | 5 +++++ src/com/esotericsoftware/kryo/Kryo.java | 9 ++++----- .../kryo/serializers/ClosureSerializer.java | 9 ++++++--- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/pom-main.xml b/pom-main.xml index 8906ffea0..0914a9acc 100644 --- a/pom-main.xml +++ b/pom-main.xml @@ -109,6 +109,11 @@ com/esotericsoftware/reflectasm/** 8001 + + com/esotericsoftware/kryo/Kryo + *isClousre* + 7002 + diff --git a/src/com/esotericsoftware/kryo/Kryo.java b/src/com/esotericsoftware/kryo/Kryo.java index 2b26efe61..c3c236da1 100644 --- a/src/com/esotericsoftware/kryo/Kryo.java +++ b/src/com/esotericsoftware/kryo/Kryo.java @@ -44,6 +44,7 @@ import java.util.TreeMap; import java.util.TreeSet; +import com.esotericsoftware.kryo.serializers.ClosureSerializer; import com.esotericsoftware.kryo.serializers.DefaultSerializers.URLSerializer; import com.esotericsoftware.kryo.serializers.OptionalSerializers; import com.esotericsoftware.kryo.serializers.GenericsResolver; @@ -491,8 +492,8 @@ public Registration getRegistration (Class type) { registration = getRegistration(type.getEnclosingClass()); } else if (EnumSet.class.isAssignableFrom(type)) { registration = classResolver.getRegistration(EnumSet.class); - } else if (isClousre(type)) { - registration = classResolver.getRegistration(Closure.class); + } else if (isClosure(type)) { + registration = classResolver.getRegistration(ClosureSerializer.Closure.class); } if (registration == null) { if (registrationRequired) { @@ -1174,7 +1175,7 @@ public boolean isFinal (Class type) { /** Returns true if the specified type is a closure. *

* This can be overridden to support alternative implementations of clousres. Current version supports Oracle's Java8 only */ - public boolean isClousre (Class type) { + protected boolean isClosure(Class type) { if (type == null) throw new IllegalArgumentException("type cannot be null."); return type.getName().indexOf('/') >= 0; } @@ -1290,6 +1291,4 @@ public Object newInstance () { } } - private static class Closure { - } } diff --git a/src/com/esotericsoftware/kryo/serializers/ClosureSerializer.java b/src/com/esotericsoftware/kryo/serializers/ClosureSerializer.java index cd9c7af5d..6853bbcf5 100644 --- a/src/com/esotericsoftware/kryo/serializers/ClosureSerializer.java +++ b/src/com/esotericsoftware/kryo/serializers/ClosureSerializer.java @@ -30,15 +30,18 @@ *

* * kryo.register(java.lang.invoke.SerializedLambda.class);
- * kryo.register(Closure.class, new ClosureSerializer());
+ * kryo.register(ClosureSerializer.Closure.class, new ClosureSerializer()); * @author Roman Levenstein */ public class ClosureSerializer extends Serializer { + /** Marker class to bind ClosureSerializer to. See also {@link Kryo#isClosure(Class)} and {@link Kryo#getRegistration(Class)} */ + public static class Closure { + } + private static Method readResolve; - private static Class serializedLambda; + private static Class serializedLambda = java.lang.invoke.SerializedLambda.class; static { try { - serializedLambda = Class.forName("java.lang.invoke.SerializedLambda"); readResolve = serializedLambda.getDeclaredMethod("readResolve"); readResolve.setAccessible(true); } catch (Exception e) {