Skip to content

Commit

Permalink
Merge pull request #9058 from lrytz/b11976
Browse files Browse the repository at this point in the history
Add StrictOptimized parents to JDK converters
  • Loading branch information
SethTisue committed Jun 23, 2020
2 parents 69d2537 + dc22b37 commit 1587590
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 7 deletions.
54 changes: 54 additions & 0 deletions build.sbt
Expand Up @@ -329,6 +329,60 @@ val mimaFilterSettings = Seq {
ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.collection.SortedMap.scala$collection$SortedMap$$super=uals"),

ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.Vector.prependedAll0"),

// Fix for scala/bug#11976
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#AbstractJMapWrapper.filterImpl"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#AbstractJMapWrapper.strictOptimizedCollect"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#AbstractJMapWrapper.strictOptimizedConcat"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#AbstractJMapWrapper.strictOptimizedFlatMap"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#AbstractJMapWrapper.strictOptimizedFlatten"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#AbstractJMapWrapper.strictOptimizedMap"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#AbstractJMapWrapper.strictOptimizedZip"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JCollectionWrapper.filterImpl"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JCollectionWrapper.strictOptimizedCollect"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JCollectionWrapper.strictOptimizedConcat"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JCollectionWrapper.strictOptimizedFlatMap"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JCollectionWrapper.strictOptimizedFlatten"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JCollectionWrapper.strictOptimizedMap"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JCollectionWrapper.strictOptimizedZip"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JIterableWrapper.filterImpl"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JIterableWrapper.strictOptimizedCollect"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JIterableWrapper.strictOptimizedConcat"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JIterableWrapper.strictOptimizedFlatMap"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JIterableWrapper.strictOptimizedFlatten"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JIterableWrapper.strictOptimizedMap"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JIterableWrapper.strictOptimizedZip"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JListWrapper.filterImpl"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JListWrapper.strictOptimizedCollect"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JListWrapper.strictOptimizedConcat"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JListWrapper.strictOptimizedFlatMap"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JListWrapper.strictOptimizedFlatten"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JListWrapper.strictOptimizedMap"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JListWrapper.strictOptimizedZip"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JPropertiesWrapper.filterImpl"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JPropertiesWrapper.strictOptimizedCollect"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JPropertiesWrapper.strictOptimizedConcat"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JPropertiesWrapper.strictOptimizedFlatMap"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JPropertiesWrapper.strictOptimizedFlatten"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JPropertiesWrapper.strictOptimizedMap"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JPropertiesWrapper.strictOptimizedZip"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JSetWrapper.filterImpl"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JSetWrapper.strictOptimizedCollect"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JSetWrapper.strictOptimizedConcat"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JSetWrapper.strictOptimizedFlatMap"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JSetWrapper.strictOptimizedFlatten"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JSetWrapper.strictOptimizedMap"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#JSetWrapper.strictOptimizedZip"),
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.convert.JavaCollectionWrappers$AbstractJMapWrapper"),
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.convert.JavaCollectionWrappers$JCollectionWrapper"),
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.convert.JavaCollectionWrappers$JConcurrentMapWrapper"),
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.convert.JavaCollectionWrappers$JIterableWrapper"),
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.convert.JavaCollectionWrappers$JListWrapper"),
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.convert.JavaCollectionWrappers$JMapWrapper"),
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.convert.JavaCollectionWrappers$JMapWrapperLike"),
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.convert.JavaCollectionWrappers$JPropertiesWrapper"),
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.convert.JavaCollectionWrappers$JSetWrapper"),
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.mutable.WeakHashMap"),
),
}

Expand Down
33 changes: 26 additions & 7 deletions src/library/scala/collection/convert/JavaCollectionWrappers.scala
Expand Up @@ -55,14 +55,20 @@ private[collection] object JavaCollectionWrappers extends Serializable {
case class IterableWrapper[A](underlying: Iterable[A]) extends ju.AbstractCollection[A] with IterableWrapperTrait[A] with Serializable

@SerialVersionUID(3L)
case class JIterableWrapper[A](underlying: jl.Iterable[A]) extends AbstractIterable[A] with Serializable {
case class JIterableWrapper[A](underlying: jl.Iterable[A])
extends AbstractIterable[A]
with StrictOptimizedIterableOps[A, Iterable, Iterable[A]]
with Serializable {
def iterator = underlying.iterator.asScala
override def iterableFactory = mutable.ArrayBuffer
override def isEmpty: Boolean = !underlying.iterator().hasNext
}

@SerialVersionUID(3L)
case class JCollectionWrapper[A](underlying: ju.Collection[A]) extends AbstractIterable[A] with Serializable {
case class JCollectionWrapper[A](underlying: ju.Collection[A])
extends AbstractIterable[A]
with StrictOptimizedIterableOps[A, Iterable, Iterable[A]]
with Serializable {
def iterator = underlying.iterator.asScala
override def size = underlying.size
override def knownSize: Int = if (underlying.isEmpty) 0 else super.knownSize
Expand Down Expand Up @@ -94,8 +100,10 @@ private[collection] object JavaCollectionWrappers extends Serializable {
}

@SerialVersionUID(3L)
case class JListWrapper[A](underlying: ju.List[A]) extends mutable.AbstractBuffer[A]
case class JListWrapper[A](underlying: ju.List[A])
extends mutable.AbstractBuffer[A]
with SeqOps[A, mutable.Buffer, mutable.Buffer[A]]
with StrictOptimizedSeqOps[A, mutable.Buffer, mutable.Buffer[A]]
with IterableFactoryDefaults[A, mutable.Buffer]
with Serializable {
def length = underlying.size
Expand Down Expand Up @@ -169,7 +177,11 @@ private[collection] object JavaCollectionWrappers extends Serializable {
}

@SerialVersionUID(3L)
case class JSetWrapper[A](underlying: ju.Set[A]) extends mutable.AbstractSet[A] with mutable.SetOps[A, mutable.Set, mutable.Set[A]] with Serializable {
case class JSetWrapper[A](underlying: ju.Set[A])
extends mutable.AbstractSet[A]
with mutable.SetOps[A, mutable.Set, mutable.Set[A]]
with StrictOptimizedSetOps[A, mutable.Set, mutable.Set[A]]
with Serializable {

override def size: Int = underlying.size
override def isEmpty: Boolean = underlying.isEmpty
Expand Down Expand Up @@ -299,7 +311,9 @@ private[collection] object JavaCollectionWrappers extends Serializable {
with JMapWrapperLike[K, V, mutable.Map, mutable.Map[K, V]] with Serializable

trait JMapWrapperLike[K, V, +CC[X, Y] <: mutable.MapOps[X, Y, CC, _], +C <: mutable.MapOps[K, V, CC, C]]
extends mutable.MapOps[K, V, CC, C] {
extends mutable.MapOps[K, V, CC, C]
with StrictOptimizedMapOps[K, V, CC, C]
with StrictOptimizedIterableOps[(K, V), mutable.Iterable, C] {

def underlying: ju.Map[K, V]

Expand Down Expand Up @@ -458,8 +472,13 @@ private[collection] object JavaCollectionWrappers extends Serializable {
}

@SerialVersionUID(3L)
case class JPropertiesWrapper(underlying: ju.Properties) extends mutable.AbstractMap[String, String]
with mutable.MapOps[String, String, mutable.Map, mutable.Map[String, String]] with Serializable {
case class JPropertiesWrapper(underlying: ju.Properties)
extends mutable.AbstractMap[String, String]
with mutable.MapOps[String, String, mutable.Map, mutable.Map[String, String]]
with StrictOptimizedMapOps[String, String, mutable.Map, mutable.Map[String, String]]
with StrictOptimizedIterableOps[(String, String), mutable.Iterable, mutable.Map[String, String]]
with Serializable {
unzip

override def size = underlying.size
override def isEmpty: Boolean = underlying.isEmpty
Expand Down
12 changes: 12 additions & 0 deletions test/junit/scala/collection/CollectionConversionsTest.scala
Expand Up @@ -63,5 +63,17 @@ class CollectionConversionsTest {
fail("Not all tests successful")
}
}

@Test
def t11976(): Unit = {
import scala.jdk.CollectionConverters._
val myMap_1 = java.util.Collections.singletonMap("a", 1)
var x = 0
myMap_1.asScala.partition { case (key, value) =>
x += 1
true
}
assertEquals(1, x)
}
}

0 comments on commit 1587590

Please sign in to comment.