-
Notifications
You must be signed in to change notification settings - Fork 92
Change Node.child and Node.attribute return type to immutable.Seq on 2.13+ #760
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
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... |
Change the type of
Node.child
/Node.nonEmptyChildren
andNode.attribute
fromcollection.Seq
toimmutable.Seq
in 2.13+.A parent is added to
Node
which defines the old signatures forchild
/nonEmptyChildren
. This (and the resulting bridge methods) ensures binary compatbility.