All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.stripe.rainier.ir.GeneratedClassLoader.scala Maven / Gradle / Ivy

package com.stripe.rainier.ir

class GeneratedClassLoader private[ir] (cf: OutputClassGenerator,
                                        helpers: Seq[ExprClassGenerator],
                                        parent: ClassLoader)
    extends ClassLoader(parent) {
  val cfClass: Class[_] = defineClass(cf.name, cf.bytes, 0, cf.bytes.length)
  val helperClasses: Map[String, Class[_]] =
    helpers.map {
      case cg =>
        cg.name -> defineClass(cg.name, cg.bytes, 0, cg.bytes.length)
    }.toMap

  override def findClass(name: String): Class[_] =
    if (name == cf.name)
      cfClass
    else
      helperClasses(name)

  def newInstance: CompiledFunction =
    cfClass.getConstructor().newInstance().asInstanceOf[CompiledFunction]

  def bytecode: Seq[Array[Byte]] =
    cf.bytes :: helpers.toList.map(_.bytes)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy