Skip to content

Commit 39753a6

Browse files
committed
Replace deprecated stack with list
shared/src/main/scala/scala/xml/dtd/impl/SubsetConstruction.scala:35: class Stack in package mutable is deprecated (since 2.12.0): Stack is an inelegant and potentially poorly-performing wrapper around List. Use a List assigned to a var instead. val rest = new mutable.Stack[immutable.BitSet] ^ shared/src/main/scala/scala/xml/include/sax/XIncluder.scala:129: class Stack in package mutable is deprecated (since 2.12.0): Stack is an inelegant and potentially poorly-performing wrapper around List. Use a List assigned to a var instead. private val entities = new mutable.Stack[String]() ^ shared/src/main/scala/scala/xml/parsing/FactoryAdapter.scala:42: class Stack in package mutable is deprecated (since 2.12.0): Stack is an inelegant and potentially poorly-performing wrapper around List. Use a List assigned to a var instead. val attribStack = new mutable.Stack[MetaData] ^ shared/src/main/scala/scala/xml/parsing/FactoryAdapter.scala:43: class Stack in package mutable is deprecated (since 2.12.0): Stack is an inelegant and potentially poorly-performing wrapper around List. Use a List assigned to a var instead. val hStack = new mutable.Stack[Node] // [ element ] contains siblings ^ shared/src/main/scala/scala/xml/parsing/FactoryAdapter.scala:44: class Stack in package mutable is deprecated (since 2.12.0): Stack is an inelegant and potentially poorly-performing wrapper around List. Use a List assigned to a var instead. val tagStack = new mutable.Stack[String] ^ shared/src/main/scala/scala/xml/parsing/FactoryAdapter.scala:45: class Stack in package mutable is deprecated (since 2.12.0): Stack is an inelegant and potentially poorly-performing wrapper around List. Use a List assigned to a var instead. var scopeStack = new mutable.Stack[NamespaceBinding] ^
1 parent e0e7df1 commit 39753a6

File tree

4 files changed

+33
-27
lines changed

4 files changed

+33
-27
lines changed

Diff for: shared/src/main/scala/scala/xml/dtd/impl/SubsetConstruction.scala

+5-4
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ private[dtd] class SubsetConstruction[T <: AnyRef](val nfa: NondetWordAutom[T])
3232
val delta = new mutable.HashMap[immutable.BitSet, mutable.HashMap[T, immutable.BitSet]]
3333
val deftrans = mutable.Map(q0 -> sink, sink -> sink) // initial transitions
3434
val finals: mutable.Map[immutable.BitSet, Int] = mutable.Map()
35-
val rest = new mutable.Stack[immutable.BitSet]
35+
var rest = immutable.List.empty[immutable.BitSet]
3636

37-
rest.push(sink, q0)
37+
rest = q0 :: sink :: rest
3838

3939
def addFinal(q: immutable.BitSet): Unit = {
4040
if (nfa containsFinal q)
@@ -43,15 +43,16 @@ private[dtd] class SubsetConstruction[T <: AnyRef](val nfa: NondetWordAutom[T])
4343
def add(Q: immutable.BitSet): Unit = {
4444
if (!states(Q)) {
4545
states += Q
46-
rest push Q
46+
rest = Q :: rest
4747
addFinal(Q)
4848
}
4949
}
5050

5151
addFinal(q0) // initial state may also be a final state
5252

5353
while (!rest.isEmpty) {
54-
val P = rest.pop()
54+
val P = rest.head
55+
rest = rest.tail
5556
// assign a number to this bitset
5657
indexMap(P) = ix
5758
invIndexMap(ix) = P

Diff for: shared/src/main/scala/scala/xml/factory/XMLLoader.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ trait XMLLoader[T <: Node] {
3737
def loadXML(source: InputSource, parser: SAXParser): T = {
3838
val newAdapter = adapter
3939

40-
newAdapter.scopeStack push TopScope
40+
newAdapter.scopeStack = TopScope :: newAdapter.scopeStack
4141
parser.parse(source, newAdapter)
42-
newAdapter.scopeStack.pop()
42+
newAdapter.scopeStack = newAdapter.scopeStack.tail
4343

4444
newAdapter.rootElem.asInstanceOf[T]
4545
}

Diff for: shared/src/main/scala/scala/xml/include/sax/XIncluder.scala

+3-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ package scala
1010
package xml
1111
package include.sax
1212

13-
import scala.collection.mutable
1413
import org.xml.sax.{ ContentHandler, Locator, Attributes }
1514
import org.xml.sax.ext.LexicalHandler
1615
import java.io.{ OutputStream, OutputStreamWriter, IOException }
@@ -126,7 +125,7 @@ class XIncluder(outs: OutputStream, encoding: String) extends ContentHandler wit
126125

127126
// LexicalHandler methods
128127
private var inDTD: Boolean = false
129-
private val entities = new mutable.Stack[String]()
128+
private var entities = List.empty[String]
130129

131130
def startDTD(name: String, publicID: String, systemID: String): Unit = {
132131
inDTD = true
@@ -146,11 +145,11 @@ class XIncluder(outs: OutputStream, encoding: String) extends ContentHandler wit
146145
def endDTD(): Unit = {}
147146

148147
def startEntity(name: String): Unit = {
149-
entities push name
148+
entities = name :: entities
150149
}
151150

152151
def endEntity(name: String): Unit = {
153-
entities.pop()
152+
entities = entities.tail
154153
}
155154

156155
def startCDATA(): Unit = {}

Diff for: shared/src/main/scala/scala/xml/parsing/FactoryAdapter.scala

+23-17
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ package scala
1010
package xml
1111
package parsing
1212

13-
import scala.collection.{ mutable, Iterator }
1413
import scala.collection.Seq
1514
import org.xml.sax.Attributes
1615
import org.xml.sax.helpers.DefaultHandler
@@ -40,10 +39,10 @@ abstract class FactoryAdapter extends DefaultHandler with factory.XMLLoader[Node
4039
var rootElem: Node = null
4140

4241
val buffer = new StringBuilder()
43-
val attribStack = new mutable.Stack[MetaData]
44-
val hStack = new mutable.Stack[Node] // [ element ] contains siblings
45-
val tagStack = new mutable.Stack[String]
46-
var scopeStack = new mutable.Stack[NamespaceBinding]
42+
var attribStack = List.empty[MetaData]
43+
var hStack = List.empty[Node] // [ element ] contains siblings
44+
var tagStack = List.empty[String]
45+
var scopeStack = List.empty[NamespaceBinding]
4746

4847
var curTag: String = null
4948
var capture: Boolean = false
@@ -123,17 +122,17 @@ abstract class FactoryAdapter extends DefaultHandler with factory.XMLLoader[Node
123122
attributes: Attributes): Unit =
124123
{
125124
captureText()
126-
tagStack push curTag
125+
tagStack = curTag :: tagStack
127126
curTag = qname
128127

129128
val localName = splitName(qname)._2
130129
capture = nodeContainsText(localName)
131130

132-
hStack push null
131+
hStack = null :: hStack
133132
var m: MetaData = Null
134133
var scpe: NamespaceBinding =
135134
if (scopeStack.isEmpty) TopScope
136-
else scopeStack.top
135+
else scopeStack.head
137136

138137
for (i <- 0 until attributes.getLength()) {
139138
val qname = attributes getQName i
@@ -148,16 +147,16 @@ abstract class FactoryAdapter extends DefaultHandler with factory.XMLLoader[Node
148147
m = Attribute(Option(pre), key, Text(value), m)
149148
}
150149

151-
scopeStack push scpe
152-
attribStack push m
150+
scopeStack = scpe :: scopeStack
151+
attribStack = m :: attribStack
153152
}
154153

155154
/**
156155
* captures text, possibly normalizing whitespace
157156
*/
158157
def captureText(): Unit = {
159158
if (capture && buffer.length > 0)
160-
hStack push createText(buffer.toString)
159+
hStack = createText(buffer.toString) :: hStack
161160

162161
buffer.clear()
163162
}
@@ -171,17 +170,24 @@ abstract class FactoryAdapter extends DefaultHandler with factory.XMLLoader[Node
171170
*/
172171
override def endElement(uri: String, _localName: String, qname: String): Unit = {
173172
captureText()
174-
val metaData = attribStack.pop()
173+
val metaData = attribStack.head
174+
attribStack = attribStack.tail
175175

176176
// reverse order to get it right
177-
val v = (Iterator continually hStack.pop takeWhile (_ != null)).toList.reverse
177+
val v = hStack.takeWhile(_ != null).reverse
178+
hStack = hStack.dropWhile(_ != null) match {
179+
case null :: hs => hs
180+
case hs => hs
181+
}
178182
val (pre, localName) = splitName(qname)
179-
val scp = scopeStack.pop()
183+
val scp = scopeStack.head
184+
scopeStack = scopeStack.tail
180185

181186
// create element
182187
rootElem = createNode(pre, localName, metaData, scp, v)
183-
hStack push rootElem
184-
curTag = tagStack.pop()
188+
hStack = rootElem :: hStack
189+
curTag = tagStack.head
190+
tagStack = tagStack.tail
185191
capture = curTag != null && nodeContainsText(curTag) // root level
186192
}
187193

@@ -190,6 +196,6 @@ abstract class FactoryAdapter extends DefaultHandler with factory.XMLLoader[Node
190196
*/
191197
override def processingInstruction(target: String, data: String): Unit = {
192198
captureText()
193-
hStack pushAll createProcInstr(target, data)
199+
hStack = hStack.reverse_:::(createProcInstr(target, data).toList)
194200
}
195201
}

0 commit comments

Comments
 (0)