From 55df152d044be03cd528790695f98991e5e85771 Mon Sep 17 00:00:00 2001 From: Stefan Zeiger Date: Wed, 6 Apr 2016 21:45:46 +0200 Subject: [PATCH 1/2] Add support for Scala 2.12.0-M4 - M4 has native support for the `JFunction` types that used to be in this project but they are in `scala.runtime.java8`, not `scala.compat.java8`, so we move them to the same location. This breaks compatibility with the previous release of scala-java8-compat but now allows cross-building between Scala 2.11 and 2.12.0-M4. Tests and test support code is also moved to the new package. When building on 2.11 we still generate our own JFunctions but on 2.12 the native ones are used. - JFunctions in 2.12.0-M4 are not `Serializable` (see https://github.com/scala/scala-dev/issues/129) so the test for that is disabled for the time being. - There is currently no genjavadoc-plugin for M4, so we only build the docs on 2.11. --- .travis.yml | 4 +-- admin/build.sh | 6 ++++- build.sbt | 26 ++++++++++--------- project/CodeGen.scala | 2 +- .../scala/compat/java8/SpecializedTest.scala | 2 +- .../{compat => runtime}/java8/BoxingTest.java | 2 +- .../{compat => runtime}/java8/LambdaTest.java | 17 +++++++----- .../java8/SpecializedFactoryTest.java | 2 +- .../java8/SpecializedTestSupport.java | 2 +- 9 files changed, 36 insertions(+), 27 deletions(-) rename src/test/java/scala/{compat => runtime}/java8/BoxingTest.java (96%) rename src/test/java/scala/{compat => runtime}/java8/LambdaTest.java (90%) rename src/test/java/scala/{compat => runtime}/java8/SpecializedFactoryTest.java (95%) rename src/test/java/scala/{compat => runtime}/java8/SpecializedTestSupport.java (95%) diff --git a/.travis.yml b/.travis.yml index a7d0599..b73bc89 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,8 +12,8 @@ env: script: - admin/build.sh scala: - - 2.11.7 - - 2.12.0-M3 + - 2.11.8 + - 2.12.0-M4 jdk: - oraclejdk8 notifications: diff --git a/admin/build.sh b/admin/build.sh index b67abcf..6e53ef7 100755 --- a/admin/build.sh +++ b/admin/build.sh @@ -22,4 +22,8 @@ if [ "$TRAVIS_JDK_VERSION" == "$PUBLISH_JDK" ] && [[ "$TRAVIS_TAG" =~ ^v[0-9]+\. openssl aes-256-cbc -K $K -iv $IV -in admin/secring.asc.enc -out admin/secring.asc -d fi -sbt ++$TRAVIS_SCALA_VERSION "$publishVersion" clean update test publishLocal $extraTarget +if [ "$TRAVIS_SCALA_VERSION" == "2.12.0-M4" ]; then + extraSbtOpts="-Dnodocs=true" +fi + +sbt $extraSbtOpts ++$TRAVIS_SCALA_VERSION "$publishVersion" clean update test publishLocal $extraTarget diff --git a/build.sbt b/build.sbt index 9c0d927..c618551 100644 --- a/build.sbt +++ b/build.sbt @@ -3,16 +3,16 @@ val disableDocs = sys.props("nodocs") == "true" lazy val JavaDoc = config("genjavadoc") extend Compile def jwrite(dir: java.io.File)(name: String, content: String) = { - val f = dir / "scala" / "compat" / "java8" / s"${name}.java" + val f = dir / "scala" / "runtime" / "java8" / s"${name}.java" IO.write(f, content) f } lazy val commonSettings = Seq( - scalaVersion := "2.11.7", - crossScalaVersions := List("2.11.7", "2.12.0-M3"), + scalaVersion := "2.11.8", + crossScalaVersions := List("2.11.8", "2.12.0-M4"), organization := "org.scala-lang.modules", - version := "0.6.0-SNAPSHOT" + version := "0.8.0-SNAPSHOT" ) lazy val fnGen = (project in file("fnGen")). @@ -61,14 +61,16 @@ lazy val root = (project in file(".")). (out ** "*.scala").get }.taskValue, - sourceGenerators in Compile <+= sourceManaged in Compile map { dir => - val write = jwrite(dir) _ - Seq(write("JFunction", CodeGen.factory)) ++ - (0 to 22).map(n => write("JFunction" + n, CodeGen.fN(n))) ++ - (0 to 22).map(n => write("JProcedure" + n, CodeGen.pN(n))) ++ - CodeGen.specializedF0.map(write.tupled) ++ - CodeGen.specializedF1.map(write.tupled) ++ - CodeGen.specializedF2.map(write.tupled) + sourceGenerators in Compile <+= (sourceManaged in Compile, scalaVersion) map { (dir, v) => + if(v.startsWith("2.11.")) { + val write = jwrite(dir) _ + Seq(write("JFunction", CodeGen.factory)) ++ + (0 to 22).map(n => write("JFunction" + n, CodeGen.fN(n))) ++ + (0 to 22).map(n => write("JProcedure" + n, CodeGen.pN(n))) ++ + CodeGen.specializedF0.map(write.tupled) ++ + CodeGen.specializedF1.map(write.tupled) ++ + CodeGen.specializedF2.map(write.tupled) + } else Seq.empty }, sourceGenerators in Test <+= sourceManaged in Test map { dir => diff --git a/project/CodeGen.scala b/project/CodeGen.scala index 68232e6..15c475f 100644 --- a/project/CodeGen.scala +++ b/project/CodeGen.scala @@ -25,7 +25,7 @@ object Type { } object CodeGen { - def packaging = "package scala.compat.java8;" + def packaging = "package scala.runtime.java8;" case class arity(n: Int) { val ns = (1 to n).toList diff --git a/src/test/java/scala/compat/java8/SpecializedTest.scala b/src/test/java/scala/compat/java8/SpecializedTest.scala index 564ef76..707ad82 100644 --- a/src/test/java/scala/compat/java8/SpecializedTest.scala +++ b/src/test/java/scala/compat/java8/SpecializedTest.scala @@ -4,7 +4,7 @@ package scala.compat.java8 import org.junit.Test -import scala.compat.java8.SpecializedTestSupport.IntIdentity +import scala.runtime.java8.SpecializedTestSupport.IntIdentity class SpecializedTest { @Test def specializationWorks() { diff --git a/src/test/java/scala/compat/java8/BoxingTest.java b/src/test/java/scala/runtime/java8/BoxingTest.java similarity index 96% rename from src/test/java/scala/compat/java8/BoxingTest.java rename to src/test/java/scala/runtime/java8/BoxingTest.java index 7074882..f4e6da6 100644 --- a/src/test/java/scala/compat/java8/BoxingTest.java +++ b/src/test/java/scala/runtime/java8/BoxingTest.java @@ -1,7 +1,7 @@ /* * Copyright (C) 2012-2015 Typesafe Inc. */ -package scala.compat.java8; +package scala.runtime.java8; import org.junit.Test; diff --git a/src/test/java/scala/compat/java8/LambdaTest.java b/src/test/java/scala/runtime/java8/LambdaTest.java similarity index 90% rename from src/test/java/scala/compat/java8/LambdaTest.java rename to src/test/java/scala/runtime/java8/LambdaTest.java index 84a586d..7d9f7b7 100644 --- a/src/test/java/scala/compat/java8/LambdaTest.java +++ b/src/test/java/scala/runtime/java8/LambdaTest.java @@ -1,14 +1,14 @@ /* * Copyright (C) 2012-2015 Typesafe Inc. */ -package scala.compat.java8; +package scala.runtime.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 static scala.runtime.java8.JFunction.*; +import static scala.runtime.java8.TestAPI.*; import org.junit.Test; @@ -99,20 +99,23 @@ 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;})); } + /* + // The JFunctions in 2.12.0-M4 are not Serializable anymore @Test public void isSerializable() { - scala.compat.java8.JFunction0 f0 = () -> "foo"; + scala.runtime.java8.JFunction0 f0 = () -> "foo"; assertEquals("foo", SerializationUtils.clone(f0).apply()); - scala.compat.java8.JFunction1 f1 = (a) -> a.toUpperCase(); + scala.runtime.java8.JFunction1 f1 = (a) -> a.toUpperCase(); assertEquals("FOO", SerializationUtils.clone(f1).apply("foo")); - scala.compat.java8.JFunction2 f2 = (a, b) -> a + b; + scala.runtime.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; + scala.runtime.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) { diff --git a/src/test/java/scala/compat/java8/SpecializedFactoryTest.java b/src/test/java/scala/runtime/java8/SpecializedFactoryTest.java similarity index 95% rename from src/test/java/scala/compat/java8/SpecializedFactoryTest.java rename to src/test/java/scala/runtime/java8/SpecializedFactoryTest.java index 2e83412..bd4dddb 100644 --- a/src/test/java/scala/compat/java8/SpecializedFactoryTest.java +++ b/src/test/java/scala/runtime/java8/SpecializedFactoryTest.java @@ -1,7 +1,7 @@ /* * Copyright (C) 2012-2015 Typesafe Inc. */ -package scala.compat.java8; +package scala.runtime.java8; import org.junit.Test; import scala.runtime.BoxedUnit; diff --git a/src/test/java/scala/compat/java8/SpecializedTestSupport.java b/src/test/java/scala/runtime/java8/SpecializedTestSupport.java similarity index 95% rename from src/test/java/scala/compat/java8/SpecializedTestSupport.java rename to src/test/java/scala/runtime/java8/SpecializedTestSupport.java index 8309f26..2ba2833 100644 --- a/src/test/java/scala/compat/java8/SpecializedTestSupport.java +++ b/src/test/java/scala/runtime/java8/SpecializedTestSupport.java @@ -1,7 +1,7 @@ /* * Copyright (C) 2012-2015 Typesafe Inc. */ -package scala.compat.java8; +package scala.runtime.java8; import java.util.Arrays; import java.util.List; From dd965bb0ace52027464bad6455f5368b3187a650 Mon Sep 17 00:00:00 2001 From: Stefan Zeiger Date: Fri, 8 Apr 2016 17:04:49 +0200 Subject: [PATCH 2/2] Re-enable genjavadoc on 2.12.0-M4 --- admin/build.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/admin/build.sh b/admin/build.sh index 6e53ef7..b67abcf 100755 --- a/admin/build.sh +++ b/admin/build.sh @@ -22,8 +22,4 @@ if [ "$TRAVIS_JDK_VERSION" == "$PUBLISH_JDK" ] && [[ "$TRAVIS_TAG" =~ ^v[0-9]+\. openssl aes-256-cbc -K $K -iv $IV -in admin/secring.asc.enc -out admin/secring.asc -d fi -if [ "$TRAVIS_SCALA_VERSION" == "2.12.0-M4" ]; then - extraSbtOpts="-Dnodocs=true" -fi - -sbt $extraSbtOpts ++$TRAVIS_SCALA_VERSION "$publishVersion" clean update test publishLocal $extraTarget +sbt ++$TRAVIS_SCALA_VERSION "$publishVersion" clean update test publishLocal $extraTarget