@@ -441,6 +441,8 @@ trait ImplicitRunInfo { self: Run =>
441
441
442
442
private val implicitScopeCache = mutable.AnyRefMap [Type , OfTypeImplicits ]()
443
443
444
+ private val EmptyTermRefSet = new TermRefSet ()(NoContext )
445
+
444
446
/** The implicit scope of a type `tp`
445
447
* @param liftingCtx A context to be used when computing the class symbols of
446
448
* a type. Types may contain type variables with their instances
@@ -1533,28 +1535,32 @@ final class SearchRoot extends SearchHistory {
1533
1535
}
1534
1536
1535
1537
/** A set of term references where equality is =:= */
1536
- class TermRefSet (implicit ctx : Context ) extends mutable.Traversable [TermRef ] {
1537
- import collection .JavaConverters ._
1538
- private val elems = (new java.util.LinkedHashMap [TermSymbol , List [Type ]]).asScala
1538
+ final class TermRefSet (implicit ctx : Context ) {
1539
+ private [this ] val elems = new java.util.LinkedHashMap [TermSymbol , List [Type ]]
1539
1540
1540
1541
def += (ref : TermRef ): Unit = {
1541
1542
val pre = ref.prefix
1542
1543
val sym = ref.symbol.asTerm
1543
- elems get sym match {
1544
- case Some (prefixes) =>
1545
- if (! (prefixes exists (_ =:= pre))) elems(sym) = pre :: prefixes
1546
- case None =>
1547
- elems(sym) = pre :: Nil
1544
+ elems.get(sym) match {
1545
+ case null =>
1546
+ elems.put(sym, pre :: Nil )
1547
+ case prefixes =>
1548
+ if (! prefixes.exists(_ =:= pre))
1549
+ elems.put(sym, pre :: prefixes)
1548
1550
}
1549
1551
}
1550
1552
1551
- def ++= (refs : TraversableOnce [ TermRef ] ): Unit =
1552
- refs foreach +=
1553
+ def ++= (that : TermRefSet ): Unit =
1554
+ that. foreach( += )
1553
1555
1554
- override def foreach [U ](f : TermRef => U ): Unit =
1555
- for (sym <- elems.keysIterator)
1556
- for (pre <- elems(sym))
1557
- f(TermRef (pre, sym))
1558
- }
1556
+ def foreach [U ](f : TermRef => U ): Unit =
1557
+ elems.forEach((sym : TermSymbol , prefixes : List [Type ]) =>
1558
+ prefixes.foreach(pre => f(TermRef (pre, sym))))
1559
1559
1560
- @ sharable object EmptyTermRefSet extends TermRefSet ()(NoContext )
1560
+ // used only for debugging
1561
+ def toList : List [TermRef ] = {
1562
+ val buffer = new mutable.ListBuffer [TermRef ]
1563
+ foreach(tr => buffer += tr)
1564
+ buffer.toList
1565
+ }
1566
+ }
0 commit comments