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