def loadPlugin()

in plugins/src/main/scala/org/apache/toree/plugins/PluginManager.scala [124:151]


  def loadPlugin(name: String, klass: Class[_]): Try[Plugin] = {
    if (isActive(name)) {
      logger.warn(s"Skipping $name as already actively loaded!")
      Success(activePlugins(name))
    } else {
      logger.debug(s"Loading $name as plugin")

      // Assume that each plugin has an empty constructor
      // https://docs.oracle.com/javase/9/docs/api/java/lang/Class.html#newInstance--
      val tryInstance = Try(klass.getDeclaredConstructor().newInstance())

      // Log failures
      tryInstance.failed.foreach(ex =>
        logger.error(s"Failed to load plugin $name", ex))

      // Attempt to cast as plugin type to add to active plugins
      tryInstance.transform({
        case p: Plugin  =>
          p.internalPluginManager_=(this)
          activePlugins.put(p.name, p)
          Success(p)
        case x          =>
          val name = x.getClass.getName
          logger.warn(s"Unknown plugin type '$name', ignoring!")
          Failure(new UnknownPluginTypeException(name))
      }, f => Failure(f))
    }
  }