aboutsummaryrefslogblamecommitdiff
path: root/stage1/MultiClassLoader.scala
blob: 5a93a63ccdac0efff3c8ac936112ac557d757bba (plain) (tree)
1
2
3
4
5
6
7
8
9
10


                     

                                     
                                                                   



                                                                                                                           
                              






                                                         
   






                             
                                                                                                         


                 
 
package cbt
import java.net._
import scala.util.Try
import scala.collection.immutable.Seq

// do not make this a case class, required object identity equality
class MultiClassLoader(parents: Seq[ClassLoader])(implicit val logger: Logger) extends ClassLoader with CachingClassLoader{
  override def findClass(name: String) = {
    parents.find( parent =>
      try{
        parent.loadClass(name)
        true
      } catch {
        case _:ClassNotFoundException => false
      }
    ).map(
      _.loadClass(name)
    ).getOrElse( throw new ClassNotFoundException(name) )
  }
  override def toString = (
    scala.Console.BLUE
      ++ super.toString
      ++ scala.Console.RESET
      ++ "("
      ++ (
        if(parents.nonEmpty)(
          "\n" ++ parents.map(_.toString).mkString(",\n").split("\n").map("  "++_).mkString("\n") ++ "\n"
        ) else ""
      ) ++")"
  )
}