Change Node.child and Node.attribute return type to immutable.Seq on 2.13+#760
Conversation
6436666 to
08e6c71
Compare
|
If we go ahead with this PR we'll need a new minor release (2.4.0). There is more API with return type
I'm happy take a look at those as well; I only did |
Change the type of `Node.child` and `Node.nonEmptyChildren` from `collection.Seq` to `immutable.Seq` in 2.13+. A parent is added to `Node` which defines the old signatures for `child` / `nonEmptyChildren`. This (and the resulting bridge methods) ensures binary compatbility.
|
For the record, there is an implicit conversion So the following works already without this PR scala> val n: Node = <a><b/></a>
val n: scala.xml.Node = <a><b/></a>
scala> val c: collection.immutable.Seq[Node] = n.child
val c: Seq[scala.xml.Node] = Seq(<b/>)But this fails: scala> val c: collection.immutable.Seq[String] = n.child.map(_.toString)
^
error: type mismatch;
found : Seq[String] (in scala.collection)
required: Seq[String] (in scala.collection.immutable) |
I took a closer look.
The compiler uses a |
68e70b7 to
80c3a0d
Compare
8631ddb to
c60701e
Compare
|
I also changed And I changed scala> val b = new NodeBuffer() += <b/>
scala> val x: NodeSeq = Elem(null, "a", Null, TopScope, true, NodeSeq.fromSeq(b): _*)
val x: scala.xml.NodeSeq = <a><b/></a>
scala> b += <c/>
scala> x
val res0: scala.xml.NodeSeq = <a><b/><c/></a>I didn't change |
|
This is ready, if you'd like to take a look @dubinsky. Besides mima, I also used jardiff to compare the changes and it looks as expected. |
|
One minor comment -- it might be more efficient to use |
|
Right.. We have to keep We could use a So it's probably not worth the effort... |
|
Agreed. If we were maximising performance from XML literals we'd be better to use an immutable ArraySeq builder with a size hint as the compiler knows how many elements there are. But maximising performance isn't really a design goal of scala-xml IMO, so the small overhead of |
Change the type of
Node.child/Node.nonEmptyChildrenandNode.attributefromcollection.Seqtoimmutable.Seqin 2.13+.A parent is added to
Nodewhich defines the old signatures forchild/nonEmptyChildren. This (and the resulting bridge methods) ensures binary compatbility.