def invoke()

in plugins/src/main/scala/org/apache/toree/plugins/PluginMethod.scala [84:122]


  def invoke(dependencyManager: DependencyManager): PluginMethodResult = Try({
    // Get dependency info (if has specific name or just use class)
    val depInfo = method.getParameterAnnotations
      .zip(method.getParameterTypes)
      .map { case (annotations, parameterType) =>
        (annotations.collect {
          case dn: DepName => dn
        }.lastOption.map(_.name()), parameterType)
      }

    // Load dependencies for plugin method
    val dependencies = depInfo.map { case (name, c) => name match {
      case Some(n) =>
        val dep = dependencyManager.find(n)
        if (dep.isEmpty) throw new DepNameNotFoundException(n)

        // Verify found dep has acceptable class
        val depClass: Class[_] = dep.get.valueClass
        if (!c.isAssignableFrom(depClass))
          throw new DepUnexpectedClassException(n, c, depClass)

        dep.get
      case None =>
        val deps = dependencyManager.findByValueClass(c)
        if (deps.isEmpty) throw new DepClassNotFoundException(c)
        deps.last
    } }

    // Validate arguments
    val arguments: Seq[AnyRef] = dependencies.map(_.value.asInstanceOf[AnyRef])

    // Invoke plugin method
    method.invoke(plugin, arguments: _*)
  }).map(SuccessPluginMethodResult.apply(this, _: AnyRef)).recover {
    case i: InvocationTargetException =>
      FailurePluginMethodResult(this, i.getTargetException)
    case throwable: Throwable =>
      FailurePluginMethodResult(this, throwable)
  }.get