aboutsummaryrefslogblamecommitdiff
path: root/stage1/ClassLoaderCache.scala
blob: 18a0d0e921ef10f36a510f7575ac465192dca31a (plain) (tree)
1
2
3
4
5



                 
                                     



















                                                                                    
package cbt

import java.net._

private[cbt] object ClassLoaderCache{
  private val cache = NailgunLauncher.classLoaderCache
  def get( classpath: ClassPath )(implicit logger: Logger): ClassLoader
    = cache.synchronized{
    val lib = new Stage1Lib(logger)
    val key = classpath.strings.sorted.mkString(":")
    if( cache.containsKey(key) ){
      logger.resolver("CACHE HIT: "++key)
      cache.get(key)
    } else {
      logger.resolver("CACHE MISS: "++key)
      val cl = new cbt.URLClassLoader( classpath, ClassLoader.getSystemClassLoader )
      cache.put( key, cl )
      cl
    }
  }
  def remove( classpath: ClassPath ) = {
    val key = classpath.strings.sorted.mkString(":")
    cache.remove( key )
  }
}