diff --git a/build.sbt b/build.sbt index 9afc3010..dbdb7b6d 100644 --- a/build.sbt +++ b/build.sbt @@ -22,9 +22,6 @@ lazy val `scala-collection-compat` = crossProject(JSPlatform, JVMPlatform) } ) .jvmSettings( - // NOTE: if this setting is not defined, the published jar doesn't contain any classfiles. - // Related to https://github.com/scala/scala-parser-combinators/issues/119. - // TODO: what should the setting be? This library also adds classes to other (existing) packages. OsgiKeys.exportPackage := Seq(s"scala.collection.compat.*;version=${version.value}"), libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % "test" ) diff --git a/src/main/scala-2.11_2.12/scala/collection/BuildFrom.scala b/src/main/scala-2.11_2.12/scala/collection/compat/BuildFrom.scala similarity index 95% rename from src/main/scala-2.11_2.12/scala/collection/BuildFrom.scala rename to src/main/scala-2.11_2.12/scala/collection/compat/BuildFrom.scala index 0149a97d..b84dbcee 100644 --- a/src/main/scala-2.11_2.12/scala/collection/BuildFrom.scala +++ b/src/main/scala-2.11_2.12/scala/collection/compat/BuildFrom.scala @@ -1,6 +1,7 @@ -package scala.collection +package scala.collection.compat import scala.collection.generic.CanBuildFrom +import scala.collection.{Iterable, mutable} /** Builds a collection of type `C` from elements of type `A` when a source collection of type `From` is available. * Implicit instances of `BuildFrom` are available for all collection types. diff --git a/src/main/scala-2.11_2.12/scala/collection/compat/CompatImpl.scala b/src/main/scala-2.11_2.12/scala/collection/compat/CompatImpl.scala index 91abd31a..79c666b3 100644 --- a/src/main/scala-2.11_2.12/scala/collection/compat/CompatImpl.scala +++ b/src/main/scala-2.11_2.12/scala/collection/compat/CompatImpl.scala @@ -2,7 +2,7 @@ package scala.collection.compat import scala.collection.generic.CanBuildFrom import scala.collection.mutable.Builder -import scala.collection.{immutable, mutable} +import scala.collection.{immutable => i, mutable => m} private[compat] object CompatImpl { def simpleCBF[A, C](f: => Builder[A, C]): CanBuildFrom[Any, A, C] = new CanBuildFrom[Any, A, C] { @@ -10,6 +10,6 @@ private[compat] object CompatImpl { def apply(): Builder[A, C] = f } - type ImmutableBitSetCC[X] = ({ type L[_] = immutable.BitSet })#L[X] - type MutableBitSetCC[X] = ({ type L[_] = mutable.BitSet })#L[X] + type ImmutableBitSetCC[X] = ({ type L[_] = i.BitSet })#L[X] + type MutableBitSetCC[X] = ({ type L[_] = m.BitSet })#L[X] } diff --git a/src/main/scala-2.11_2.12/scala/collection/Factory.scala b/src/main/scala-2.11_2.12/scala/collection/compat/Factory.scala similarity index 93% rename from src/main/scala-2.11_2.12/scala/collection/Factory.scala rename to src/main/scala-2.11_2.12/scala/collection/compat/Factory.scala index 9b14aa0e..959afcdb 100644 --- a/src/main/scala-2.11_2.12/scala/collection/Factory.scala +++ b/src/main/scala-2.11_2.12/scala/collection/compat/Factory.scala @@ -1,6 +1,7 @@ -package scala.collection +package scala.collection.compat import scala.collection.generic.CanBuildFrom +import scala.collection.{TraversableOnce, mutable} /** * A factory that builds a collection of type `C` with elements of type `A`. @@ -33,4 +34,4 @@ object Factory { implicit def fromCanBuildFromConversion[X, A, C](x: X)(implicit toCanBuildFrom: X => CanBuildFrom[Nothing, A, C]): Factory[A, C] = fromCanBuildFrom(toCanBuildFrom(x)) -} \ No newline at end of file +} diff --git a/src/main/scala-2.11_2.12/scala/collection/immutable/ArraySeq.scala b/src/main/scala-2.11_2.12/scala/collection/compat/immutable/ArraySeq.scala similarity index 97% rename from src/main/scala-2.11_2.12/scala/collection/immutable/ArraySeq.scala rename to src/main/scala-2.11_2.12/scala/collection/compat/immutable/ArraySeq.scala index d486797a..7a4886ba 100644 --- a/src/main/scala-2.11_2.12/scala/collection/immutable/ArraySeq.scala +++ b/src/main/scala-2.11_2.12/scala/collection/compat/immutable/ArraySeq.scala @@ -1,15 +1,14 @@ -package scala -package collection -package immutable +package scala.collection.compat.immutable -import scala.reflect.ClassTag -import scala.runtime.BoxedUnit +import java.util.Arrays + +import scala.annotation.unchecked.uncheckedVariance +import scala.collection.AbstractSeq import scala.collection.generic._ -import scala.collection.mutable.{Builder, ArrayBuilder, ArrayBuffer, WrappedArrayBuilder} +import scala.collection.immutable.IndexedSeq +import scala.collection.mutable.{ArrayBuilder, Builder, WrappedArrayBuilder} +import scala.reflect.ClassTag import scala.util.hashing.MurmurHash3 -import scala.annotation.unchecked.uncheckedVariance - -import java.util.Arrays /** * An immutable array. @@ -42,9 +41,6 @@ abstract class ArraySeq[+T] /** The underlying array */ def unsafeArray: Array[T @uncheckedVariance] - private def elementClass: Class[_] = - unsafeArray.getClass.getComponentType - override def stringPrefix = "ArraySeq" /** Clones this object, including the underlying Array. */ diff --git a/src/main/scala-2.11_2.12/scala/collection/compat/package.scala b/src/main/scala-2.11_2.12/scala/collection/compat/package.scala index 42fdb10d..e367ea2a 100644 --- a/src/main/scala-2.11_2.12/scala/collection/compat/package.scala +++ b/src/main/scala-2.11_2.12/scala/collection/compat/package.scala @@ -1,8 +1,8 @@ package scala.collection import scala.collection.generic._ -import scala.collection.mutable.Builder import scala.reflect.ClassTag +import scala.collection.{immutable => i, mutable => m} /** The collection compatibility API */ package object compat { @@ -26,10 +26,10 @@ package object compat { implicit def bitSetFactoryToCBF(fact: BitSetFactory[BitSet]): CanBuildFrom[Any, Int, BitSet] = simpleCBF(fact.newBuilder) - implicit def immutableBitSetFactoryToCBF(fact: BitSetFactory[immutable.BitSet]): CanBuildFrom[Any, Int, ImmutableBitSetCC[Int]] = + implicit def immutableBitSetFactoryToCBF(fact: BitSetFactory[i.BitSet]): CanBuildFrom[Any, Int, ImmutableBitSetCC[Int]] = simpleCBF(fact.newBuilder) - implicit def mutableBitSetFactoryToCBF(fact: BitSetFactory[mutable.BitSet]): CanBuildFrom[Any, Int, MutableBitSetCC[Int]] = + implicit def mutableBitSetFactoryToCBF(fact: BitSetFactory[m.BitSet]): CanBuildFrom[Any, Int, MutableBitSetCC[Int]] = simpleCBF(fact.newBuilder) implicit class IterableFactoryExtensionMethods[CC[X] <: GenTraversable[X]](private val fact: GenericCompanion[CC]) { @@ -56,4 +56,5 @@ package object compat { // This really belongs into scala.collection but there's already a package object in scala-library so we can't add to it type IterableOnce[+X] = TraversableOnce[X] + val IterableOnce = TraversableOnce } diff --git a/src/main/scala-2.13/scala/collection/compat/immutable/package.scala b/src/main/scala-2.13/scala/collection/compat/immutable/package.scala new file mode 100644 index 00000000..324b26b8 --- /dev/null +++ b/src/main/scala-2.13/scala/collection/compat/immutable/package.scala @@ -0,0 +1,6 @@ +package scala.collection.compat + +package object immutable { + type ArraySeq[+T] = scala.collection.immutable.ArraySeq[T] + val ArraySeq = scala.collection.immutable.ArraySeq +} diff --git a/src/main/scala-2.13/scala/collection/compat/package.scala b/src/main/scala-2.13/scala/collection/compat/package.scala index 4038e858..51a5ea35 100644 --- a/src/main/scala-2.13/scala/collection/compat/package.scala +++ b/src/main/scala-2.13/scala/collection/compat/package.scala @@ -1,5 +1,12 @@ package scala.collection -// Empty dummy package to allow cross-building with Scala 2.12 package object compat { + type Factory[-A, +C] = scala.collection.Factory[A, C] + val Factory = scala.collection.Factory + + type BuildFrom[-From, -A, +C] = scala.collection.BuildFrom[From, A, C] + val BuildFrom = scala.collection.BuildFrom + + type IterableOnce[+X] = scala.collection.IterableOnce[X] + val IterableOnce = scala.collection.IterableOnce } diff --git a/src/test/scala/test/scala/collection/ArraySeqTest.scala b/src/test/scala/test/scala/collection/ArraySeqTest.scala index 4dd36c9c..beac7289 100644 --- a/src/test/scala/test/scala/collection/ArraySeqTest.scala +++ b/src/test/scala/test/scala/collection/ArraySeqTest.scala @@ -2,7 +2,7 @@ package test.scala.collection import org.junit.{Assert, Test} -import scala.collection.immutable.ArraySeq +import scala.collection.compat.immutable.ArraySeq // The unmodified ArraySeqTest from collection-strawman class ArraySeqTest { diff --git a/src/test/scala/test/scala/collection/BuildFromTest.scala b/src/test/scala/test/scala/collection/BuildFromTest.scala index 2de26ef1..5904f003 100644 --- a/src/test/scala/test/scala/collection/BuildFromTest.scala +++ b/src/test/scala/test/scala/collection/BuildFromTest.scala @@ -5,7 +5,7 @@ import org.junit.Test import scala.collection.compat._ import scala.collection.immutable.{HashMap, TreeMap, TreeSet} import scala.collection.mutable.{ArrayBuffer, Builder, ListBuffer} -import scala.collection.{BitSet, BuildFrom, SortedMap, SortedSet, immutable, mutable} +import scala.collection.{BitSet, SortedMap, SortedSet, immutable, mutable} // Tests copied from the 2.13 scala-library class BuildFromTest { diff --git a/src/test/scala/test/scala/collection/FactoryTest.scala b/src/test/scala/test/scala/collection/FactoryTest.scala index 84e1c027..06533efa 100644 --- a/src/test/scala/test/scala/collection/FactoryTest.scala +++ b/src/test/scala/test/scala/collection/FactoryTest.scala @@ -3,7 +3,7 @@ package test.scala.collection import org.junit.{Assert, Test} import scala.collection.compat._ -import scala.collection.{BitSet, Factory, immutable, mutable} +import scala.collection.{BitSet, immutable, mutable} class FactoryTest {