Skip to content
This repository
Browse code

SI-7074 Fix xml attribute sorting

Sorting the attributes of an xml element could drop some of the
attributes. It was caused by the incorrect use of MetaData#copy() to
concatenate "smaller" with the rest of the attributes. The
MetaData#copy() method is similar to the following hypothetical method
on a List:

def copy(other: List): List = head :: other

The fix prepends all elements of "smaller" to the rest of the attributes
in the proper order.
  • Loading branch information...
commit 8187debb7148483d991b7fa131e0c66cdee6e646 1 parent 2952d0f
Szabolcs Berecz khernyo authored
2  src/library/scala/xml/Utility.scala
@@ -64,7 +64,7 @@ object Utility extends AnyRef with parsing.TokenTests {
64 64 val key = md.key
65 65 val smaller = sort(md.filter { m => m.key < key })
66 66 val greater = sort(md.filter { m => m.key > key })
67   - smaller.copy(md.copy ( greater ))
  67 + smaller.foldRight (md copy greater) ((x, xs) => x copy xs)
68 68 }
69 69
70 70 /** Return the node with its attribute list sorted alphabetically
9 test/files/run/t7074.check
... ... @@ -0,0 +1,9 @@
  1 +<a/>
  2 +<a b="2" c="3" d="1"/>
  3 +<a b="2" c="4" d="1" e="3" f="5"/>
  4 +<a b="5" c="4" d="3" e="2" f="1"/>
  5 +<a b="1" c="2" d="3" e="4" f="5"/>
  6 +<a a:b="2" a:c="3" a:d="1"/>
  7 +<a a:b="2" a:c="4" a:d="1" a:e="3" a:f="5"/>
  8 +<a a:b="5" a:c="4" a:d="3" a:e="2" a:f="1"/>
  9 +<a a:b="1" a:c="2" a:d="3" a:e="4" a:f="5"/>
15 test/files/run/t7074.scala
... ... @@ -0,0 +1,15 @@
  1 +import scala.xml.Utility.sort
  2 +
  3 +object Test extends App {
  4 + println(sort(<a/>))
  5 + println(sort(<a d="1" b="2" c="3"/>))
  6 + println(sort(<a d="1" b="2" e="3" c="4" f="5"/>))
  7 + println(sort(<a f="1" e="2" d="3" c="4" b="5"/>))
  8 + println(sort(<a b="1" c="2" d="3" e="4" f="5"/>))
  9 +
  10 + println(sort(<a a:d="1" a:b="2" a:c="3"/>))
  11 + println(sort(<a a:d="1" a:b="2" a:e="3" a:c="4" a:f="5"/>))
  12 + println(sort(<a a:f="1" a:e="2" a:d="3" a:c="4" a:b="5"/>))
  13 + println(sort(<a a:b="1" a:c="2" a:d="3" a:e="4" a:f="5"/>))
  14 +}
  15 +

0 comments on commit 8187deb

Please sign in to comment.
Something went wrong with that request. Please try again.