Minor, template providers: don't create classloader for empty classpath

This commit is contained in:
Pavel V. Talanov
2017-07-13 15:18:14 +03:00
parent beb28a1c7d
commit ee70a64e1c
@@ -70,9 +70,7 @@ fun makeScriptDefsFromTemplatesProviders(providers: Iterable<ScriptTemplatesProv
errorsHandler: ((ScriptTemplatesProvider, Throwable) -> Unit) = { _, ex -> throw ex }
): List<KotlinScriptDefinition> = providers.flatMap { provider ->
try {
val classpath = provider.dependenciesClasspath + provider.additionalResolverClasspath
LOG.info("[kts] loading script definitions ${provider.templateClassNames} using cp: ${classpath.joinToString(File.pathSeparator)}")
val loader = URLClassLoader(classpath.map { it.toURI().toURL() }.toTypedArray(), ScriptTemplatesProvider::class.java.classLoader)
val loader = createClassLoader(provider)
provider.templateClassNames.map {
KotlinScriptDefinitionFromAnnotatedTemplate(loader.loadClass(it).kotlin, provider.resolver, provider.filePattern, provider.environment)
}
@@ -84,4 +82,11 @@ fun makeScriptDefsFromTemplatesProviders(providers: Iterable<ScriptTemplatesProv
}
}
private fun createClassLoader(provider: ScriptTemplatesProvider): ClassLoader {
val classpath = provider.dependenciesClasspath + provider.additionalResolverClasspath
LOG.info("[kts] loading script definitions ${provider.templateClassNames} using cp: ${classpath.joinToString(File.pathSeparator)}")
val baseLoader = ScriptTemplatesProvider::class.java.classLoader
return if (classpath.isEmpty()) baseLoader else URLClassLoader(classpath.map { it.toURI().toURL() }.toTypedArray(), baseLoader)
}
private val LOG = Logger.getInstance("ScriptTemplatesProviders")