From 995706c8b7c2ab6b5d5354c74fdf1a8786989461 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Thu, 2 Jun 2016 02:49:08 -0800 Subject: [PATCH] Better plugin class loading. --- .../beust/kobalt/internal/KobaltPluginXml.kt | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/KobaltPluginXml.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/KobaltPluginXml.kt index b22ad6ba..33c0176e 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/KobaltPluginXml.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/KobaltPluginXml.kt @@ -156,10 +156,22 @@ class PluginInfo(val xml: KobaltPluginXml, val pluginClassLoader: ClassLoader?, GuiceFactory() } - fun forName(className: String) = - if (pluginClassLoader != null) pluginClassLoader.loadClass(className) - else if (classLoader != null) classLoader.loadClass(className) - else Class.forName(className) + fun forName(className: String) : Class<*> { + fun loadClass(className: String, classLoader: ClassLoader?) : Class<*>? { + try { + return classLoader?.loadClass(className) + } catch(ex: ClassNotFoundException) { + return null + } + } + + val result = loadClass(className, classLoader) + ?: Class.forName(className) + ?: loadClass(className, pluginClassLoader) + ?: throw ClassNotFoundException(className) + + return result + } // // Populate pluginInfo with what was found in Kobalt's own kobalt-plugin.xml