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

org.opalj.util.InMemoryClassLoader.scala Maven / Gradle / Ivy

The newest version!
/* BSD 2-Clause License - see OPAL/LICENSE for details. */
package org.opalj
package util

/**
 * A simple `ClassLoader` that looks-up the available classes in a standard map.
 *
 * @param   classes a `Map` of classes where the key is the class name – using `.` as the package
 *          separator – and the value is the serialized class file.
 *
 * @author  Malte Limmeroth
 * @author  Michael Eichberg
 */
class InMemoryClassLoader(
        private[this] var rawClasses: Map[String, Array[Byte]],
        parent:                       ClassLoader              = ClassLoader.getSystemClassLoader
) extends ClassLoader(parent) {

    /**
     * @note Clients should call `loadClass`! Please, consult the documentation of
     *       `java.lang.ClassLoader` for further details!
     */
    @throws[ClassNotFoundException]
    override def findClass(name: String): Class[_] = {
        rawClasses.get(name) match {
            case Some(data) ⇒
                val clazz = defineClass(name, data, 0, data.length)
                rawClasses -= name
                clazz
            case None ⇒
                throw new ClassNotFoundException(name)
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy