From 8ffdb970d0a0a465706456e754aec082869f5ae1 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Fri, 17 Aug 2018 19:11:24 -0700 Subject: [PATCH 1/6] Switch to includeOnce in 2.13 Scala-specific code for M5 --- .../main/scala-2.13/scala/xml/ScalaVersionSpecific.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/shared/src/main/scala-2.13/scala/xml/ScalaVersionSpecific.scala b/shared/src/main/scala-2.13/scala/xml/ScalaVersionSpecific.scala index fb256ba60..0d0c99167 100644 --- a/shared/src/main/scala-2.13/scala/xml/ScalaVersionSpecific.scala +++ b/shared/src/main/scala-2.13/scala/xml/ScalaVersionSpecific.scala @@ -1,7 +1,7 @@ package scala.xml import scala.collection.immutable.StrictOptimizedSeqOps -import scala.collection.{SeqOps, immutable, mutable} +import scala.collection.{SeqOps, IterableOnce, immutable, mutable} import scala.collection.BuildFrom import scala.collection.mutable.Builder @@ -10,14 +10,14 @@ private[xml] object ScalaVersionSpecific { type CBF[-From, -A, +C] = BuildFrom[From, A, C] object NodeSeqCBF extends BuildFrom[Coll, Node, NodeSeq] { def newBuilder(from: Coll): Builder[Node, NodeSeq] = NodeSeq.newBuilder - def fromSpecificIterable(from: Coll)(it: Iterable[Node]): NodeSeq = (NodeSeq.newBuilder ++= from).result() + def fromSpecific(from: Coll)(it: IterableOnce[Node]): NodeSeq = (NodeSeq.newBuilder ++= from).result() } } private[xml] trait ScalaVersionSpecificNodeSeq extends SeqOps[Node, immutable.Seq, NodeSeq] with StrictOptimizedSeqOps[Node, immutable.Seq, NodeSeq] { self: NodeSeq => - override def fromSpecificIterable(coll: Iterable[Node]): NodeSeq = (NodeSeq.newBuilder ++= coll).result() + override def fromSpecific(coll: IterableOnce[Node]): NodeSeq = (NodeSeq.newBuilder ++= coll).result() override def newSpecificBuilder: mutable.Builder[Node, NodeSeq] = NodeSeq.newBuilder } From d3963467298cd73c56db3a8c2961721fe64f89cb Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Tue, 21 Aug 2018 13:25:39 -0700 Subject: [PATCH 2/6] Name-based pattern matching dropped for unapplySeq in 2.13 --- shared/src/main/scala/scala/xml/Elem.scala | 2 +- shared/src/main/scala/scala/xml/Node.scala | 2 +- shared/src/main/scala/scala/xml/QNode.scala | 2 +- shared/src/test/scala/scala/xml/PatternMatching.scala | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/shared/src/main/scala/scala/xml/Elem.scala b/shared/src/main/scala/scala/xml/Elem.scala index 8392255ca..288133e4c 100755 --- a/shared/src/main/scala/scala/xml/Elem.scala +++ b/shared/src/main/scala/scala/xml/Elem.scala @@ -36,7 +36,7 @@ object Elem { def unapplySeq(n: Node) = n match { case _: SpecialNode | _: Group => None - case _ => Some((n.prefix, n.label, n.attributes, n.scope, n.child)) + case _ => Some((n.prefix, n.label, n.attributes, n.scope, n.child.toSeq)) } import scala.sys.process._ diff --git a/shared/src/main/scala/scala/xml/Node.scala b/shared/src/main/scala/scala/xml/Node.scala index f62edabda..907dd4bb8 100755 --- a/shared/src/main/scala/scala/xml/Node.scala +++ b/shared/src/main/scala/scala/xml/Node.scala @@ -24,7 +24,7 @@ object Node { /** the empty namespace */ val EmptyNamespace = "" - def unapplySeq(n: Node) = Some((n.label, n.attributes, n.child)) + def unapplySeq(n: Node) = Some((n.label, n.attributes, n.child.toSeq)) } /** diff --git a/shared/src/main/scala/scala/xml/QNode.scala b/shared/src/main/scala/scala/xml/QNode.scala index 3d41d2e79..5e5d052fa 100644 --- a/shared/src/main/scala/scala/xml/QNode.scala +++ b/shared/src/main/scala/scala/xml/QNode.scala @@ -16,5 +16,5 @@ package xml * @author Burak Emir */ object QNode { - def unapplySeq(n: Node) = Some((n.scope.getURI(n.prefix), n.label, n.attributes, n.child)) + def unapplySeq(n: Node) = Some((n.scope.getURI(n.prefix), n.label, n.attributes, n.child.toSeq)) } diff --git a/shared/src/test/scala/scala/xml/PatternMatching.scala b/shared/src/test/scala/scala/xml/PatternMatching.scala index 41644cec1..32d4b9b78 100644 --- a/shared/src/test/scala/scala/xml/PatternMatching.scala +++ b/shared/src/test/scala/scala/xml/PatternMatching.scala @@ -58,9 +58,9 @@ class PatternMatching extends { object SafeNodeSeq { def unapplySeq(any: Any): Option[Seq[Node]] = any match { - case s: Seq[_] => Some(s flatMap (_ match { + case s: Seq[_] => Some((s flatMap (_ match { case n: Node => n case _ => NodeSeq.Empty - })) case _ => None + })).toSeq) case _ => None } } From 8c48d07191c45f71669f973710549ba8ed7a5630 Mon Sep 17 00:00:00 2001 From: "Aaron S. Hawley" Date: Wed, 29 Aug 2018 21:54:31 -0400 Subject: [PATCH 3/6] Use scala 2.13.0-M5 milestone release --- .travis.yml | 4 ++-- build.sbt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index efe857912..cca72f2e8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,7 @@ jdk: scala: - 2.11.12 - 2.12.6 - - 2.13.0-M4 + - 2.13.0-M5 env: global: @@ -46,7 +46,7 @@ matrix: jdk: openjdk11 - scala: 2.12.6 jdk: openjdk6 - - scala: 2.13.0-M4 + - scala: 2.13.0-M5 jdk: openjdk6 script: diff --git a/build.sbt b/build.sbt index 9dcb1cfed..e851ea0f3 100644 --- a/build.sbt +++ b/build.sbt @@ -1,7 +1,7 @@ import sbtcrossproject.{crossProject, CrossType} import ScalaModulePlugin._ -crossScalaVersions in ThisBuild := List("2.12.6", "2.11.12", "2.13.0-M4") +crossScalaVersions in ThisBuild := List("2.12.6", "2.11.12", "2.13.0-M5") lazy val xml = crossProject(JSPlatform, JVMPlatform) .withoutSuffixFor(JVMPlatform) From de93de554165b2e006d20dc2b8cf585e6a7d7081 Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Thu, 30 Aug 2018 09:09:04 +0900 Subject: [PATCH 4/6] override writeReplace. fix serialize error https://github.com/scala/scala/blob/v2.13.0-M5/src/library/scala/collection/Iterable.scala#L42-L46 --- shared/src/main/scala/scala/xml/MetaData.scala | 2 ++ shared/src/main/scala/scala/xml/NodeSeq.scala | 2 ++ 2 files changed, 4 insertions(+) diff --git a/shared/src/main/scala/scala/xml/MetaData.scala b/shared/src/main/scala/scala/xml/MetaData.scala index 1affff4e0..cdb988518 100644 --- a/shared/src/main/scala/scala/xml/MetaData.scala +++ b/shared/src/main/scala/scala/xml/MetaData.scala @@ -225,4 +225,6 @@ abstract class MetaData final def remove(namespace: String, owner: Node, key: String): MetaData = remove(namespace, owner.scope, key) + + protected[this] override def writeReplace(): AnyRef = this } diff --git a/shared/src/main/scala/scala/xml/NodeSeq.scala b/shared/src/main/scala/scala/xml/NodeSeq.scala index eb7056272..431d8461e 100644 --- a/shared/src/main/scala/scala/xml/NodeSeq.scala +++ b/shared/src/main/scala/scala/xml/NodeSeq.scala @@ -158,4 +158,6 @@ abstract class NodeSeq extends AbstractSeq[Node] with immutable.Seq[Node] with S override def toString(): String = theSeq.mkString def text: String = (this map (_.text)).mkString + + protected[this] override def writeReplace(): AnyRef = this } From bd764f0e13e89548fb484f3b95d324e1712f4415 Mon Sep 17 00:00:00 2001 From: "Aaron S. Hawley" Date: Fri, 12 Oct 2018 18:32:01 -0400 Subject: [PATCH 5/6] Make writeReplace Scala version-specific --- .../main/scala-2.11-2.12/scala/xml/ScalaVersionSpecific.scala | 4 ++++ .../src/main/scala-2.13/scala/xml/ScalaVersionSpecific.scala | 4 ++++ shared/src/main/scala/scala/xml/MetaData.scala | 3 +-- shared/src/main/scala/scala/xml/NodeSeq.scala | 4 +--- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/shared/src/main/scala-2.11-2.12/scala/xml/ScalaVersionSpecific.scala b/shared/src/main/scala-2.11-2.12/scala/xml/ScalaVersionSpecific.scala index 417a3bcc6..fd3452089 100644 --- a/shared/src/main/scala-2.11-2.12/scala/xml/ScalaVersionSpecific.scala +++ b/shared/src/main/scala-2.11-2.12/scala/xml/ScalaVersionSpecific.scala @@ -20,3 +20,7 @@ private[xml] trait ScalaVersionSpecificNodeSeq extends SeqLike[Node, NodeSeq] { private[xml] trait ScalaVersionSpecificNodeBuffer { self: NodeBuffer => override def stringPrefix: String = "NodeBuffer" } + +private[xml] trait ScalaVersionSpecificIterableSerializable[+A] { // extends Iterable[A] { + // protected[this] override def writeReplace(): AnyRef = this +} diff --git a/shared/src/main/scala-2.13/scala/xml/ScalaVersionSpecific.scala b/shared/src/main/scala-2.13/scala/xml/ScalaVersionSpecific.scala index 0d0c99167..c47518336 100644 --- a/shared/src/main/scala-2.13/scala/xml/ScalaVersionSpecific.scala +++ b/shared/src/main/scala-2.13/scala/xml/ScalaVersionSpecific.scala @@ -24,3 +24,7 @@ private[xml] trait ScalaVersionSpecificNodeSeq private[xml] trait ScalaVersionSpecificNodeBuffer { self: NodeBuffer => override def className: String = "NodeBuffer" } + +private[xml] trait ScalaVersionSpecificIterableSerializable[+A] extends Iterable[A] { + protected[this] override def writeReplace(): AnyRef = this +} diff --git a/shared/src/main/scala/scala/xml/MetaData.scala b/shared/src/main/scala/scala/xml/MetaData.scala index cdb988518..f930a7fb8 100644 --- a/shared/src/main/scala/scala/xml/MetaData.scala +++ b/shared/src/main/scala/scala/xml/MetaData.scala @@ -82,6 +82,7 @@ abstract class MetaData extends AbstractIterable[MetaData] with Iterable[MetaData] with Equality + with ScalaVersionSpecificIterableSerializable[MetaData] with Serializable { /** @@ -225,6 +226,4 @@ abstract class MetaData final def remove(namespace: String, owner: Node, key: String): MetaData = remove(namespace, owner.scope, key) - - protected[this] override def writeReplace(): AnyRef = this } diff --git a/shared/src/main/scala/scala/xml/NodeSeq.scala b/shared/src/main/scala/scala/xml/NodeSeq.scala index 431d8461e..94f7535d8 100644 --- a/shared/src/main/scala/scala/xml/NodeSeq.scala +++ b/shared/src/main/scala/scala/xml/NodeSeq.scala @@ -44,7 +44,7 @@ object NodeSeq { * * @author Burak Emir */ -abstract class NodeSeq extends AbstractSeq[Node] with immutable.Seq[Node] with ScalaVersionSpecificNodeSeq with Equality with Serializable { +abstract class NodeSeq extends AbstractSeq[Node] with immutable.Seq[Node] with ScalaVersionSpecificNodeSeq with Equality with ScalaVersionSpecificIterableSerializable[Node] with Serializable { def theSeq: Seq[Node] def length = theSeq.length override def iterator = theSeq.iterator @@ -158,6 +158,4 @@ abstract class NodeSeq extends AbstractSeq[Node] with immutable.Seq[Node] with S override def toString(): String = theSeq.mkString def text: String = (this map (_.text)).mkString - - protected[this] override def writeReplace(): AnyRef = this } From 270e9cdd92c4cec5187aa997ac60437dbcb3b664 Mon Sep 17 00:00:00 2001 From: "Aaron S. Hawley" Date: Fri, 26 Oct 2018 15:46:58 -0400 Subject: [PATCH 6/6] Update Scala.js to 1.0.0-M6 --- .travis.yml | 6 +++--- build.sbt | 2 +- project/plugins.sbt | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index cca72f2e8..846fc9c0f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,16 +30,16 @@ env: # The empty SCALAJS_VERSION will only compile for the JVM - SCALAJS_VERSION= - SCALAJS_VERSION=0.6.25 - - SCALAJS_VERSION=1.0.0-M5 + - SCALAJS_VERSION=1.0.0-M6 matrix: exclude: - jdk: openjdk11 env: SCALAJS_VERSION=0.6.25 - jdk: openjdk11 - env: SCALAJS_VERSION=1.0.0-M5 + env: SCALAJS_VERSION=1.0.0-M6 - scala: 2.11.12 - env: SCALAJS_VERSION=1.0.0-M5 + env: SCALAJS_VERSION=1.0.0-M6 - scala: 2.11.12 jdk: oraclejdk8 - scala: 2.11.12 diff --git a/build.sbt b/build.sbt index e851ea0f3..c6d583fe3 100644 --- a/build.sbt +++ b/build.sbt @@ -19,7 +19,7 @@ lazy val xml = crossProject(JSPlatform, JVMPlatform) scalacOptions in Test += "-Xxml:coalescing", mimaPreviousVersion := { - if (System.getenv("SCALAJS_VERSION") == "1.0.0-M5") None // No such release yet + if (System.getenv("SCALAJS_VERSION") == "1.0.0-M6") None // No such release yet else Some("1.1.1") }, diff --git a/project/plugins.sbt b/project/plugins.sbt index 62ba94c51..f166d63cc 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -9,5 +9,5 @@ val scalaJSVersion = Option(System.getenv("SCALAJS_VERSION")).filter(_.nonEmpty).getOrElse("0.6.25") addSbtPlugin("org.scala-js" % "sbt-scalajs" % scalaJSVersion) -addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "0.5.0") +addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "0.6.0") addSbtPlugin("org.scala-lang.modules" % "sbt-scala-module" % "1.0.14")