in kernel-api/src/main/scala/org/apache/toree/magic/MagicManager.scala [36:75]
def isLineMagic(magic: Magic): Boolean =
magic.getClass.getInterfaces.contains(classOf[LineMagic])
/**
* Checks if the provided magic is a cell magic.
*
* @param magic The magic instance
* @return True if the magic is an instance of a cell magic
*/
def isCellMagic(magic: Magic): Boolean =
magic.getClass.getInterfaces.contains(classOf[CellMagic])
/**
* Finds a magic whose class name ends with a case insensitive name.
*
* @param name The name to search for
* @return The magic
* @throws MagicNotFoundException when no magics match name
*/
@throws[MagicNotFoundException]
def findMagic(name: String): Magic = {
@tailrec def inheritsMagic(klass: Class[_]): Boolean = {
if (klass == null) false
else if (klass.getInterfaces.exists(classOf[Magic].isAssignableFrom)) true
else inheritsMagic(klass.getSuperclass)
}
val magics = pluginManager.plugins
.filter(p => inheritsMagic(p.getClass))
.filter(_.simpleName.split("\\.").last.toLowerCase == name.toLowerCase)
if (magics.size <= 0){
logger.error(s"No magic found for $name!")
throw new MagicNotFoundException(name)
} else if (magics.size > 1) {
logger.warn(s"More than one magic found for $name!")
}
magics.head.asInstanceOf[Magic]
}