@@ -441,6 +441,8 @@ trait ImplicitRunInfo { self: Run =>
441441
442442 private val implicitScopeCache = mutable.AnyRefMap [Type , OfTypeImplicits ]()
443443
444+ private val EmptyTermRefSet = new TermRefSet ()(NoContext )
445+
444446 /** The implicit scope of a type `tp`
445447 * @param liftingCtx A context to be used when computing the class symbols of
446448 * a type. Types may contain type variables with their instances
@@ -1533,28 +1535,32 @@ final class SearchRoot extends SearchHistory {
15331535}
15341536
15351537/** 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 ]]
15391540
15401541 def += (ref : TermRef ): Unit = {
15411542 val pre = ref.prefix
15421543 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.forall(_ =:= pre))
1549+ elems.put(sym, pre :: prefixes)
15481550 }
15491551 }
15501552
1551- def ++= (refs : TraversableOnce [ TermRef ] ): Unit =
1552- refs foreach +=
1553+ def ++= (that : TermRefSet ): Unit =
1554+ that. foreach( += )
15531555
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))))
15591559
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