From f5664257e46ecc76a0231a3fb66c4c2db8b4293f Mon Sep 17 00:00:00 2001 From: Michel Davit Date: Fri, 9 Aug 2024 16:37:37 +0200 Subject: [PATCH 1/3] Add Array.from extension for scala 2.11 and 2.12 --- .../scala/collection/compat/PackageShared.scala | 8 ++++++++ .../test/scala/test/scala/collection/CollectionTest.scala | 3 +++ 2 files changed, 11 insertions(+) diff --git a/compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala b/compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala index 5aa45f83..d89033b6 100644 --- a/compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala +++ b/compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala @@ -272,6 +272,9 @@ private[compat] trait PackageShared { builder.result() } + implicit def toArrayExtensions(fact: Array.type): ArrayExtensions = + new ArrayExtensions(fact) + implicit def toImmutableSortedMapExtensions( fact: i.SortedMap.type): ImmutableSortedMapExtensions = new ImmutableSortedMapExtensions(fact) @@ -357,6 +360,11 @@ private[compat] trait PackageShared { new RandomExtensions(self) } +class ArrayExtensions(private val fact: Array.type) extends AnyVal { + def from[A: ClassTag](source: TraversableOnce[A]): Array[A] = + fact.apply(source.toSeq: _*) +} + class ImmutableSortedMapExtensions(private val fact: i.SortedMap.type) extends AnyVal { def from[K: Ordering, V](source: TraversableOnce[(K, V)]): i.SortedMap[K, V] = build(i.SortedMap.newBuilder[K, V], source) diff --git a/compat/src/test/scala/test/scala/collection/CollectionTest.scala b/compat/src/test/scala/test/scala/collection/CollectionTest.scala index 2bd6955b..2902db91 100644 --- a/compat/src/test/scala/test/scala/collection/CollectionTest.scala +++ b/compat/src/test/scala/test/scala/collection/CollectionTest.scala @@ -56,6 +56,9 @@ class CollectionTest { @Test def testFrom: Unit = { val xs = List(1, 2, 3) + val a = Array.from(xs) + val aT: Array[Int] = a + assertTrue(Array(1, 2, 3).sameElements(a)) val v = Vector.from(xs) val vT: Vector[Int] = v assertEquals(Vector(1, 2, 3), v) From e5c566eee9cfeb4ab1a51a946ce7feb99b2ca95b Mon Sep 17 00:00:00 2001 From: Michel Davit Date: Thu, 5 Sep 2024 09:09:20 +0200 Subject: [PATCH 2/3] Update array from extension --- .../scala/collection/compat/PackageShared.scala | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala b/compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala index d89033b6..8d811e20 100644 --- a/compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala +++ b/compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala @@ -362,7 +362,10 @@ private[compat] trait PackageShared { class ArrayExtensions(private val fact: Array.type) extends AnyVal { def from[A: ClassTag](source: TraversableOnce[A]): Array[A] = - fact.apply(source.toSeq: _*) + source match { + case it: Iterable[A] => it.toArray[A] + case _ => source.toIterator.toArray[A] + } } class ImmutableSortedMapExtensions(private val fact: i.SortedMap.type) extends AnyVal { From 272af6e78c95da65471728ee7457295429d97755 Mon Sep 17 00:00:00 2001 From: Michel Davit Date: Thu, 5 Sep 2024 09:20:49 +0200 Subject: [PATCH 3/3] Add final modifier --- .../scala-2.11_2.12/scala/collection/compat/PackageShared.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala b/compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala index 8d811e20..a5511615 100644 --- a/compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala +++ b/compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala @@ -360,7 +360,7 @@ private[compat] trait PackageShared { new RandomExtensions(self) } -class ArrayExtensions(private val fact: Array.type) extends AnyVal { +final class ArrayExtensions(private val fact: Array.type) extends AnyVal { def from[A: ClassTag](source: TraversableOnce[A]): Array[A] = source match { case it: Iterable[A] => it.toArray[A]