diff --git a/build.sbt b/build.sbt index b8cec2f..5bd3d69 100644 --- a/build.sbt +++ b/build.sbt @@ -17,6 +17,8 @@ OsgiKeys.privatePackage := List("scala.concurrent.java8.*") libraryDependencies += "junit" % "junit" % "4.11" % "test" +libraryDependencies += "org.apache.commons" % "commons-lang3" % "3.4" % "test" + libraryDependencies += "com.novocode" % "junit-interface" % "0.10" % "test" mimaPreviousVersion := None diff --git a/project/CodeGen.scala b/project/CodeGen.scala index 0e0234c..c916af3 100644 --- a/project/CodeGen.scala +++ b/project/CodeGen.scala @@ -40,7 +40,7 @@ object CodeGen { |$packaging | |@FunctionalInterface - |public interface JFunction0 extends scala.Function0 { + |public interface JFunction0 extends scala.Function0, java.io.Serializable { | default void $initName() { | }; |""".stripMargin @@ -51,7 +51,7 @@ object CodeGen { |$packaging | |@FunctionalInterface - |public interface JFunction1 extends scala.Function1 { + |public interface JFunction1 extends scala.Function1, java.io.Serializable { | default void $initName() { | }; | @@ -77,7 +77,7 @@ object CodeGen { |$packaging | |@FunctionalInterface - |public interface JFunction$n<$tparams, R> extends scala.Function$n<$tparams, R> { + |public interface JFunction$n<$tparams, R> extends scala.Function$n<$tparams, R>, java.io.Serializable { | default void $initName() { | }; | diff --git a/src/test/java/scala/compat/java8/LambdaTest.java b/src/test/java/scala/compat/java8/LambdaTest.java index c626083..84a586d 100644 --- a/src/test/java/scala/compat/java8/LambdaTest.java +++ b/src/test/java/scala/compat/java8/LambdaTest.java @@ -3,12 +3,16 @@ */ package scala.compat.java8; +import org.apache.commons.lang3.SerializationUtils; import scala.runtime.*; + +import static junit.framework.Assert.assertEquals; import static scala.compat.java8.JFunction.*; import static scala.compat.java8.TestAPI.*; import org.junit.Test; + public class LambdaTest { @Test public void lambdaDemo() { @@ -95,6 +99,21 @@ public void lambdaDemo() { acceptFunction22Unit( proc((v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) -> {v1.toUpperCase(); return;})); } + @Test + public void isSerializable() { + scala.compat.java8.JFunction0 f0 = () -> "foo"; + assertEquals("foo", SerializationUtils.clone(f0).apply()); + + scala.compat.java8.JFunction1 f1 = (a) -> a.toUpperCase(); + assertEquals("FOO", SerializationUtils.clone(f1).apply("foo")); + + scala.compat.java8.JFunction2 f2 = (a, b) -> a + b; + assertEquals("foobar", SerializationUtils.clone(f2).apply("foo", "bar")); + + scala.compat.java8.JFunction3 f3 = (a, b, c) -> a + b + c; + assertEquals("foobarbaz", SerializationUtils.clone(f3).apply("foo", "bar", "baz")); + } + private static scala.concurrent.Future futureExample( scala.concurrent.Future future, scala.concurrent.ExecutionContext ec) { return future.map(func(s -> s.toUpperCase()), ec).map(func(s -> s.length()), ec);