From 4669acb765bbf69b3f4ddd6c45425693259f7ee8 Mon Sep 17 00:00:00 2001 From: Massimo Siani Date: Tue, 20 Feb 2024 23:42:22 +0100 Subject: [PATCH 1/6] currency instances --- build.sbt | 1 + .../main/scala-2.12/cats/instances/all.scala | 1 + .../main/scala-2.13+/cats/instances/all.scala | 1 + .../main/scala/cats/instances/currency.scala | 30 ++++++++++++++ .../scala/cats/kernel/laws/JvmLawTests.scala | 40 +++++++++++++++++++ .../cats/kernel/instances/AllInstances.scala | 1 + .../cats/kernel/instances/AllInstances.scala | 1 + .../kernel/instances/CurrencyInstances.scala | 34 ++++++++++++++++ .../kernel/instances/currency/package.scala | 25 ++++++++++++ 9 files changed, 134 insertions(+) create mode 100644 core/src/main/scala/cats/instances/currency.scala create mode 100644 kernel-laws/jvm/src/test/scala/cats/kernel/laws/JvmLawTests.scala create mode 100644 kernel/src/main/scala/cats/kernel/instances/CurrencyInstances.scala create mode 100644 kernel/src/main/scala/cats/kernel/instances/currency/package.scala diff --git a/build.sbt b/build.sbt index 8779410704..3edae74868 100644 --- a/build.sbt +++ b/build.sbt @@ -124,6 +124,7 @@ lazy val kernelLaws = crossProject(JSPlatform, JVMPlatform, NativePlatform) .settings(testingDependencies) .jsSettings(commonJsSettings) .jvmSettings(commonJvmSettings) + .jvmSettings(libraryDependencies += "org.scala-lang.modules" %% "scala-collection-compat" % "2.11.0" % Test) .nativeSettings(commonNativeSettings) lazy val algebraSettings = Seq[Setting[?]]( diff --git a/core/src/main/scala-2.12/cats/instances/all.scala b/core/src/main/scala-2.12/cats/instances/all.scala index 1628094e95..ccca8db72b 100644 --- a/core/src/main/scala-2.12/cats/instances/all.scala +++ b/core/src/main/scala-2.12/cats/instances/all.scala @@ -39,6 +39,7 @@ trait AllInstances with BigIntInstances with BigDecimalInstances with BitSetInstances + with CurrencyInstances with EitherInstances with EqInstances with EquivInstances diff --git a/core/src/main/scala-2.13+/cats/instances/all.scala b/core/src/main/scala-2.13+/cats/instances/all.scala index f57d80ac52..47e4e82bd8 100644 --- a/core/src/main/scala-2.13+/cats/instances/all.scala +++ b/core/src/main/scala-2.13+/cats/instances/all.scala @@ -41,6 +41,7 @@ trait AllInstances with BigIntInstances with BigDecimalInstances with BitSetInstances + with CurrencyInstances with EitherInstances with EqInstances with EquivInstances diff --git a/core/src/main/scala/cats/instances/currency.scala b/core/src/main/scala/cats/instances/currency.scala new file mode 100644 index 0000000000..dc655ca243 --- /dev/null +++ b/core/src/main/scala/cats/instances/currency.scala @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2015 Typelevel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package cats +package instances + +import java.util.Currency + +trait CurrencyInstances extends cats.kernel.instances.CurrencyInstances { + implicit val catsStdShowForCurrency: Show[Currency] = + Show.fromToString[Currency] +} diff --git a/kernel-laws/jvm/src/test/scala/cats/kernel/laws/JvmLawTests.scala b/kernel-laws/jvm/src/test/scala/cats/kernel/laws/JvmLawTests.scala new file mode 100644 index 0000000000..ad7442a8ec --- /dev/null +++ b/kernel-laws/jvm/src/test/scala/cats/kernel/laws/JvmLawTests.scala @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2015 Typelevel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package cats.kernel +package laws + +import cats.kernel.instances.currency.* +import cats.kernel.laws.discipline.* +import munit.DisciplineSuite +import java.util.Currency +import org.scalacheck.{Arbitrary, Cogen, Gen} +import scala.jdk.CollectionConverters.* + +class JvmLawTests extends TestsConfig with DisciplineSuite { + implicit private val arbitraryCurrency: Arbitrary[Currency] = Arbitrary( + Gen.oneOf(Currency.getAvailableCurrencies().asScala) + ) + implicit private val cogenCurrency: Cogen[Currency] = Cogen[String].contramap(_.getCurrencyCode()) + + checkAll("Eq[Currency]", EqTests[Currency].eqv) + checkAll("Hash[Currency]", HashTests[Currency].hash) +} diff --git a/kernel/src/main/scala-2.12/cats/kernel/instances/AllInstances.scala b/kernel/src/main/scala-2.12/cats/kernel/instances/AllInstances.scala index 8bc45b444e..6d9b315b09 100644 --- a/kernel/src/main/scala-2.12/cats/kernel/instances/AllInstances.scala +++ b/kernel/src/main/scala-2.12/cats/kernel/instances/AllInstances.scala @@ -29,6 +29,7 @@ trait AllInstances with BooleanInstances with ByteInstances with CharInstances + with CurrencyInstances with DoubleInstances with EqInstances with EitherInstances diff --git a/kernel/src/main/scala-2.13+/cats/kernel/instances/AllInstances.scala b/kernel/src/main/scala-2.13+/cats/kernel/instances/AllInstances.scala index 773ffaa80d..cde3fa5738 100644 --- a/kernel/src/main/scala-2.13+/cats/kernel/instances/AllInstances.scala +++ b/kernel/src/main/scala-2.13+/cats/kernel/instances/AllInstances.scala @@ -30,6 +30,7 @@ trait AllInstances with BooleanInstances with ByteInstances with CharInstances + with CurrencyInstances with DoubleInstances with EqInstances with EitherInstances diff --git a/kernel/src/main/scala/cats/kernel/instances/CurrencyInstances.scala b/kernel/src/main/scala/cats/kernel/instances/CurrencyInstances.scala new file mode 100644 index 0000000000..48af24d325 --- /dev/null +++ b/kernel/src/main/scala/cats/kernel/instances/CurrencyInstances.scala @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2015 Typelevel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package cats.kernel +package instances + +import java.util.Currency + +trait CurrencyInstances { + implicit def catsKernelStdHashForCurrency: Hash[Currency] = new CurrencyHash +} + +class CurrencyHash extends Hash[Currency] { + override def eqv(x: Currency, y: Currency): Boolean = x.getCurrencyCode().equals(y.getCurrencyCode()) + override def hash(x: Currency): Int = x.getCurrencyCode().hashCode() +} diff --git a/kernel/src/main/scala/cats/kernel/instances/currency/package.scala b/kernel/src/main/scala/cats/kernel/instances/currency/package.scala new file mode 100644 index 0000000000..52f50b0f30 --- /dev/null +++ b/kernel/src/main/scala/cats/kernel/instances/currency/package.scala @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2015 Typelevel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package cats.kernel +package instances + +package object currency extends CurrencyInstances From 9d4ec8aa11365afcc98f13cb1521b25fb11c93b4 Mon Sep 17 00:00:00 2001 From: Massimo Siani Date: Wed, 21 Feb 2024 22:45:47 +0100 Subject: [PATCH 2/6] guarantee binary compat --- core/src/main/scala-2.12/cats/instances/all.scala | 4 +++- core/src/main/scala-2.13+/cats/instances/all.scala | 4 +++- core/src/main/scala/cats/instances/currency.scala | 3 +-- .../main/scala-2.12/cats/kernel/instances/AllInstances.scala | 3 ++- .../main/scala-2.13+/cats/kernel/instances/AllInstances.scala | 3 ++- kernel/src/main/scala/cats/kernel/instances/all/package.scala | 1 + 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/core/src/main/scala-2.12/cats/instances/all.scala b/core/src/main/scala-2.12/cats/instances/all.scala index ccca8db72b..04de602a17 100644 --- a/core/src/main/scala-2.12/cats/instances/all.scala +++ b/core/src/main/scala-2.12/cats/instances/all.scala @@ -33,13 +33,13 @@ abstract class AllInstancesBinCompat with AllInstancesBinCompat6 with AllInstancesBinCompat7 with AllInstancesBinCompat8 + with AllInstancesBinCompat10 trait AllInstances extends AnyValInstances with BigIntInstances with BigDecimalInstances with BitSetInstances - with CurrencyInstances with EitherInstances with EqInstances with EquivInstances @@ -95,3 +95,5 @@ trait AllInstancesBinCompat7 extends SeqInstances trait AllInstancesBinCompat8 extends DeadlineInstances trait AllInstancesBinCompat9 extends InvariantInstances with InvariantInstancesBinCompat0 + +trait AllInstancesBinCompat10 extends CurrencyInstances diff --git a/core/src/main/scala-2.13+/cats/instances/all.scala b/core/src/main/scala-2.13+/cats/instances/all.scala index 47e4e82bd8..54beb5114b 100644 --- a/core/src/main/scala-2.13+/cats/instances/all.scala +++ b/core/src/main/scala-2.13+/cats/instances/all.scala @@ -34,6 +34,7 @@ abstract class AllInstancesBinCompat with AllInstancesBinCompat7 with AllInstancesBinCompat8 with AllInstancesBinCompat9 + with AllInstancesBinCompat11 trait AllInstances extends AnyValInstances @@ -41,7 +42,6 @@ trait AllInstances with BigIntInstances with BigDecimalInstances with BitSetInstances - with CurrencyInstances with EitherInstances with EqInstances with EquivInstances @@ -100,3 +100,5 @@ trait AllInstancesBinCompat8 extends InvariantInstances trait AllInstancesBinCompat9 extends DeadlineInstances trait AllInstancesBinCompat10 extends InvariantInstancesBinCompat0 + +trait AllInstancesBinCompat11 extends CurrencyInstances diff --git a/core/src/main/scala/cats/instances/currency.scala b/core/src/main/scala/cats/instances/currency.scala index dc655ca243..f53bfd3d49 100644 --- a/core/src/main/scala/cats/instances/currency.scala +++ b/core/src/main/scala/cats/instances/currency.scala @@ -25,6 +25,5 @@ package instances import java.util.Currency trait CurrencyInstances extends cats.kernel.instances.CurrencyInstances { - implicit val catsStdShowForCurrency: Show[Currency] = - Show.fromToString[Currency] + implicit val catsStdShowForCurrency: Show[Currency] = Show.fromToString[Currency] } diff --git a/kernel/src/main/scala-2.12/cats/kernel/instances/AllInstances.scala b/kernel/src/main/scala-2.12/cats/kernel/instances/AllInstances.scala index 6d9b315b09..54394e98ea 100644 --- a/kernel/src/main/scala-2.12/cats/kernel/instances/AllInstances.scala +++ b/kernel/src/main/scala-2.12/cats/kernel/instances/AllInstances.scala @@ -29,7 +29,6 @@ trait AllInstances with BooleanInstances with ByteInstances with CharInstances - with CurrencyInstances with DoubleInstances with EqInstances with EitherInstances @@ -61,3 +60,5 @@ private[instances] trait AllInstancesBinCompat0 extends FiniteDurationInstances private[instances] trait AllInstancesBinCompat1 extends SortedMapInstances with SortedSetInstances private[instances] trait AllInstancesBinCompat2 extends DeadlineInstances + +private[instances] trait AllInstancesBinCompat3 extends CurrencyInstances diff --git a/kernel/src/main/scala-2.13+/cats/kernel/instances/AllInstances.scala b/kernel/src/main/scala-2.13+/cats/kernel/instances/AllInstances.scala index cde3fa5738..850d851f44 100644 --- a/kernel/src/main/scala-2.13+/cats/kernel/instances/AllInstances.scala +++ b/kernel/src/main/scala-2.13+/cats/kernel/instances/AllInstances.scala @@ -30,7 +30,6 @@ trait AllInstances with BooleanInstances with ByteInstances with CharInstances - with CurrencyInstances with DoubleInstances with EqInstances with EitherInstances @@ -63,3 +62,5 @@ private[instances] trait AllInstancesBinCompat0 extends FiniteDurationInstances private[instances] trait AllInstancesBinCompat1 extends SortedMapInstances with SortedSetInstances private[instances] trait AllInstancesBinCompat2 extends DeadlineInstances + +private[instances] trait AllInstancesBinCompat3 extends CurrencyInstances diff --git a/kernel/src/main/scala/cats/kernel/instances/all/package.scala b/kernel/src/main/scala/cats/kernel/instances/all/package.scala index ab6901c941..1f1f76368a 100644 --- a/kernel/src/main/scala/cats/kernel/instances/all/package.scala +++ b/kernel/src/main/scala/cats/kernel/instances/all/package.scala @@ -27,3 +27,4 @@ package object all with AllInstancesBinCompat0 with AllInstancesBinCompat1 with AllInstancesBinCompat2 + with AllInstancesBinCompat3 From fe4975b69a05cb87bdf3fd02e8706ac912d3fa74 Mon Sep 17 00:00:00 2001 From: Massimo Siani Date: Fri, 23 Feb 2024 23:52:35 +0100 Subject: [PATCH 3/6] remove scala collection compat --- build.sbt | 1 - .../jvm/src/test/scala/cats/kernel/laws/JvmLawTests.scala | 2 +- .../cats/kernel/compat/scalaVersionSpecific.scala | 7 ++++++- .../cats/kernel/compat/scalaVersionSpecific.scala | 6 ++++++ .../scala/cats/kernel/instances/CurrencyInstances.scala | 7 +------ 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/build.sbt b/build.sbt index 3edae74868..8779410704 100644 --- a/build.sbt +++ b/build.sbt @@ -124,7 +124,6 @@ lazy val kernelLaws = crossProject(JSPlatform, JVMPlatform, NativePlatform) .settings(testingDependencies) .jsSettings(commonJsSettings) .jvmSettings(commonJvmSettings) - .jvmSettings(libraryDependencies += "org.scala-lang.modules" %% "scala-collection-compat" % "2.11.0" % Test) .nativeSettings(commonNativeSettings) lazy val algebraSettings = Seq[Setting[?]]( diff --git a/kernel-laws/jvm/src/test/scala/cats/kernel/laws/JvmLawTests.scala b/kernel-laws/jvm/src/test/scala/cats/kernel/laws/JvmLawTests.scala index ad7442a8ec..a5043cab07 100644 --- a/kernel-laws/jvm/src/test/scala/cats/kernel/laws/JvmLawTests.scala +++ b/kernel-laws/jvm/src/test/scala/cats/kernel/laws/JvmLawTests.scala @@ -22,12 +22,12 @@ package cats.kernel package laws +import cats.kernel.compat.scalaVersionSpecific.* import cats.kernel.instances.currency.* import cats.kernel.laws.discipline.* import munit.DisciplineSuite import java.util.Currency import org.scalacheck.{Arbitrary, Cogen, Gen} -import scala.jdk.CollectionConverters.* class JvmLawTests extends TestsConfig with DisciplineSuite { implicit private val arbitraryCurrency: Arbitrary[Currency] = Arbitrary( diff --git a/kernel/src/main/scala-2.12/cats/kernel/compat/scalaVersionSpecific.scala b/kernel/src/main/scala-2.12/cats/kernel/compat/scalaVersionSpecific.scala index ea473c1350..a713dce8e9 100644 --- a/kernel/src/main/scala-2.12/cats/kernel/compat/scalaVersionSpecific.scala +++ b/kernel/src/main/scala-2.12/cats/kernel/compat/scalaVersionSpecific.scala @@ -21,7 +21,8 @@ package cats.kernel.compat import scala.annotation.{Annotation, StaticAnnotation} -import scala.collection.{IterableLike, TraversableLike} +import scala.collection.{mutable, IterableLike, TraversableLike} +import scala.collection.convert.ImplicitConversionsToScala.* private[cats] object scalaVersionSpecific { @@ -50,4 +51,8 @@ private[cats] object scalaVersionSpecific { that: T )(implicit w1: A => TraversableLike[El1, Repr1], w2: T => IterableLike[El2, Repr2]) = (a, that).zipped } + + implicit class setExtension[A](private val a: A) extends AnyVal { + def asScala(s: java.util.Set[A]): mutable.Set[A] = `set asScala`(s) + } } diff --git a/kernel/src/main/scala-2.13+/cats/kernel/compat/scalaVersionSpecific.scala b/kernel/src/main/scala-2.13+/cats/kernel/compat/scalaVersionSpecific.scala index d59fe29167..ac7e84f888 100644 --- a/kernel/src/main/scala-2.13+/cats/kernel/compat/scalaVersionSpecific.scala +++ b/kernel/src/main/scala-2.13+/cats/kernel/compat/scalaVersionSpecific.scala @@ -24,6 +24,8 @@ package kernel package compat import scala.annotation.{Annotation, StaticAnnotation} +import scala.collection.mutable +import scala.jdk.CollectionConverters.* private[cats] object scalaVersionSpecific { @@ -35,4 +37,8 @@ private[cats] object scalaVersionSpecific { implicit class iterableOnceExtension[A](private val io: IterableOnce[A]) extends AnyVal { def reduceOption(f: (A, A) => A): Option[A] = io.iterator.reduceOption(f) } + + implicit class setExtension[A](private val s: java.util.Set[A]) extends AnyVal { + def asScala: mutable.Set[A] = SetHasAsScala(s).asScala + } } diff --git a/kernel/src/main/scala/cats/kernel/instances/CurrencyInstances.scala b/kernel/src/main/scala/cats/kernel/instances/CurrencyInstances.scala index 48af24d325..06ac655c68 100644 --- a/kernel/src/main/scala/cats/kernel/instances/CurrencyInstances.scala +++ b/kernel/src/main/scala/cats/kernel/instances/CurrencyInstances.scala @@ -25,10 +25,5 @@ package instances import java.util.Currency trait CurrencyInstances { - implicit def catsKernelStdHashForCurrency: Hash[Currency] = new CurrencyHash -} - -class CurrencyHash extends Hash[Currency] { - override def eqv(x: Currency, y: Currency): Boolean = x.getCurrencyCode().equals(y.getCurrencyCode()) - override def hash(x: Currency): Int = x.getCurrencyCode().hashCode() + implicit val catsKernelStdHashForCurrency: Hash[Currency] = Hash.fromUniversalHashCode[Currency] } From 58de8f05bf0c97c82d67ce7368a2bfaa1310c765 Mon Sep 17 00:00:00 2001 From: Massimo Siani Date: Sat, 24 Feb 2024 00:03:17 +0100 Subject: [PATCH 4/6] fix implementation --- .../scala-2.12/cats/kernel/compat/scalaVersionSpecific.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/src/main/scala-2.12/cats/kernel/compat/scalaVersionSpecific.scala b/kernel/src/main/scala-2.12/cats/kernel/compat/scalaVersionSpecific.scala index a713dce8e9..735b4ddb47 100644 --- a/kernel/src/main/scala-2.12/cats/kernel/compat/scalaVersionSpecific.scala +++ b/kernel/src/main/scala-2.12/cats/kernel/compat/scalaVersionSpecific.scala @@ -52,7 +52,7 @@ private[cats] object scalaVersionSpecific { )(implicit w1: A => TraversableLike[El1, Repr1], w2: T => IterableLike[El2, Repr2]) = (a, that).zipped } - implicit class setExtension[A](private val a: A) extends AnyVal { - def asScala(s: java.util.Set[A]): mutable.Set[A] = `set asScala`(s) + implicit class setExtension[A](private val s: java.util.Set[A]) extends AnyVal { + def asScala: mutable.Set[A] = `set asScala`(s) } } From 17209a4f435fffca221b7605d32d134aaffea7b8 Mon Sep 17 00:00:00 2001 From: Massimo Siani Date: Fri, 17 Jan 2025 17:15:56 +0100 Subject: [PATCH 5/6] address more comments --- .../scala/cats/kernel/laws/JvmLawTests.scala | 1 + .../kernel/laws/scalaVersionSpecific.scala | 32 +++++++++++++++++++ .../kernel/compat/scalaVersionSpecific.scala | 7 +--- .../kernel/compat/scalaVersionSpecific.scala | 5 ++- 4 files changed, 36 insertions(+), 9 deletions(-) create mode 100644 kernel-laws/shared/src/test/scala-2.12/cats/kernel/laws/scalaVersionSpecific.scala diff --git a/kernel-laws/jvm/src/test/scala/cats/kernel/laws/JvmLawTests.scala b/kernel-laws/jvm/src/test/scala/cats/kernel/laws/JvmLawTests.scala index a5043cab07..e07cb0bed1 100644 --- a/kernel-laws/jvm/src/test/scala/cats/kernel/laws/JvmLawTests.scala +++ b/kernel-laws/jvm/src/test/scala/cats/kernel/laws/JvmLawTests.scala @@ -25,6 +25,7 @@ package laws import cats.kernel.compat.scalaVersionSpecific.* import cats.kernel.instances.currency.* import cats.kernel.laws.discipline.* +import cats.kernel.laws.scalaVersionSpecific.* import munit.DisciplineSuite import java.util.Currency import org.scalacheck.{Arbitrary, Cogen, Gen} diff --git a/kernel-laws/shared/src/test/scala-2.12/cats/kernel/laws/scalaVersionSpecific.scala b/kernel-laws/shared/src/test/scala-2.12/cats/kernel/laws/scalaVersionSpecific.scala new file mode 100644 index 0000000000..cbf9feb7db --- /dev/null +++ b/kernel-laws/shared/src/test/scala-2.12/cats/kernel/laws/scalaVersionSpecific.scala @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2015 Typelevel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package cats.kernel.laws +import scala.annotation.{Annotation, StaticAnnotation} +import scala.collection.{mutable, IterableLike, TraversableLike} +import scala.collection.JavaConverters._ + +private[cats] object scalaVersionSpecific { + + implicit class iterableExtension[A](private val s: java.lang.Iterable[A]) extends AnyVal { + def asScala: Iterable[A] = iterableAsScalaIterable(s) + } +} diff --git a/kernel/src/main/scala-2.12/cats/kernel/compat/scalaVersionSpecific.scala b/kernel/src/main/scala-2.12/cats/kernel/compat/scalaVersionSpecific.scala index 735b4ddb47..ea473c1350 100644 --- a/kernel/src/main/scala-2.12/cats/kernel/compat/scalaVersionSpecific.scala +++ b/kernel/src/main/scala-2.12/cats/kernel/compat/scalaVersionSpecific.scala @@ -21,8 +21,7 @@ package cats.kernel.compat import scala.annotation.{Annotation, StaticAnnotation} -import scala.collection.{mutable, IterableLike, TraversableLike} -import scala.collection.convert.ImplicitConversionsToScala.* +import scala.collection.{IterableLike, TraversableLike} private[cats] object scalaVersionSpecific { @@ -51,8 +50,4 @@ private[cats] object scalaVersionSpecific { that: T )(implicit w1: A => TraversableLike[El1, Repr1], w2: T => IterableLike[El2, Repr2]) = (a, that).zipped } - - implicit class setExtension[A](private val s: java.util.Set[A]) extends AnyVal { - def asScala: mutable.Set[A] = `set asScala`(s) - } } diff --git a/kernel/src/main/scala-2.13+/cats/kernel/compat/scalaVersionSpecific.scala b/kernel/src/main/scala-2.13+/cats/kernel/compat/scalaVersionSpecific.scala index ac7e84f888..e801663582 100644 --- a/kernel/src/main/scala-2.13+/cats/kernel/compat/scalaVersionSpecific.scala +++ b/kernel/src/main/scala-2.13+/cats/kernel/compat/scalaVersionSpecific.scala @@ -24,8 +24,7 @@ package kernel package compat import scala.annotation.{Annotation, StaticAnnotation} -import scala.collection.mutable -import scala.jdk.CollectionConverters.* +import scala.jdk.javaapi.CollectionConverters private[cats] object scalaVersionSpecific { @@ -39,6 +38,6 @@ private[cats] object scalaVersionSpecific { } implicit class setExtension[A](private val s: java.util.Set[A]) extends AnyVal { - def asScala: mutable.Set[A] = SetHasAsScala(s).asScala + def asScala: Iterable[A] = CollectionConverters.asScala(x) } } From 1ceeb9a3e56e36b433d47e2061985beea9fbc76e Mon Sep 17 00:00:00 2001 From: Massimo Siani Date: Sat, 1 Feb 2025 01:12:04 +0100 Subject: [PATCH 6/6] fix compile error --- .../kernel/laws/scalaVersionSpecific.scala | 24 +++++++++++++++++++ .../kernel/compat/scalaVersionSpecific.scala | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 kernel-laws/shared/src/test/scala-2.13+/cats/kernel/laws/scalaVersionSpecific.scala diff --git a/kernel-laws/shared/src/test/scala-2.13+/cats/kernel/laws/scalaVersionSpecific.scala b/kernel-laws/shared/src/test/scala-2.13+/cats/kernel/laws/scalaVersionSpecific.scala new file mode 100644 index 0000000000..e11db668ae --- /dev/null +++ b/kernel-laws/shared/src/test/scala-2.13+/cats/kernel/laws/scalaVersionSpecific.scala @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2015 Typelevel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package cats.kernel.laws + +private[cats] object scalaVersionSpecific diff --git a/kernel/src/main/scala-2.13+/cats/kernel/compat/scalaVersionSpecific.scala b/kernel/src/main/scala-2.13+/cats/kernel/compat/scalaVersionSpecific.scala index e801663582..4224b05a1a 100644 --- a/kernel/src/main/scala-2.13+/cats/kernel/compat/scalaVersionSpecific.scala +++ b/kernel/src/main/scala-2.13+/cats/kernel/compat/scalaVersionSpecific.scala @@ -38,6 +38,6 @@ private[cats] object scalaVersionSpecific { } implicit class setExtension[A](private val s: java.util.Set[A]) extends AnyVal { - def asScala: Iterable[A] = CollectionConverters.asScala(x) + def asScala: Iterable[A] = CollectionConverters.asScala(s) } }