From 6a0f5dd47111ffd883c77e4c2103539eae68d443 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 25 May 2016 12:57:38 -0400 Subject: [PATCH] Use parent's toString --- main/src/main/scala/sbt/Load.scala | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/main/src/main/scala/sbt/Load.scala b/main/src/main/scala/sbt/Load.scala index a204bd3a8..47ba90290 100755 --- a/main/src/main/scala/sbt/Load.scala +++ b/main/src/main/scala/sbt/Load.scala @@ -974,21 +974,20 @@ object Load { final class EvaluatedConfigurations(val eval: Eval, val settings: Seq[Setting[_]]) final case class InjectSettings(global: Seq[Setting[_]], project: Seq[Setting[_]], projectLoaded: ClassLoader => Seq[Setting[_]]) { import java.net.URLClassLoader - private val cache: mutable.Map[List[URL], Seq[Setting[_]]] = mutable.Map.empty + private val cache: mutable.Map[String, Seq[Setting[_]]] = mutable.Map.empty // Cache based on the underlying URL values of the classloader def cachedProjectLoaded(cl: ClassLoader): Seq[Setting[_]] = cl match { - case cl: URLClassLoader => cache.getOrElseUpdate(classLoaderToList(cl), projectLoaded(cl)) + case cl: URLClassLoader => cache.getOrElseUpdate(classLoaderToHash(Some(cl)), projectLoaded(cl)) case _ => projectLoaded(cl) } - private def classLoaderToList(cl: ClassLoader): List[URL] = - cl match { - case cl: URLClassLoader => - cl.getURLs.toList ::: (Option(cl.getParent) match { - case Some(x) => classLoaderToList(x) - case _ => Nil - }) - case _ => Nil + private def classLoaderToHash(o: Option[ClassLoader]): String = + o match { + case Some(cl: URLClassLoader) => + cl.getURLs.toList.toString + classLoaderToHash(Option(cl.getParent)) + case Some(cl: ClassLoader) => + cl.toString + classLoaderToHash(Option(cl.getParent)) + case _ => "null" } }