Fix classloaders order on script evaluation

the dependencies one should be a parent for the modules one, to avoid
incompatibility problems. Also fixes main-kts tests
This commit is contained in:
Ilya Chernikov
2019-04-23 12:44:07 +02:00
parent 6ffc3a8679
commit 4b8d9c8fdd
@@ -104,11 +104,10 @@ fun KJvmCompiledScript<*>.getOrCreateActualClassloader(evaluationConfiguration:
val module = compiledModule
?: throw IllegalStateException("Illegal call sequence, actualClassloader should be set before calling function on the class without module")
val baseClassLoader = evaluationConfiguration[ScriptEvaluationConfiguration.jvm.baseClassLoader]
val moduleClassLoader = module.createClassLoader(baseClassLoader)
val classLoaderWithDeps =
if (evaluationConfiguration[ScriptEvaluationConfiguration.jvm.loadDependencies] == false) moduleClassLoader
else makeClassLoaderFromDependencies(moduleClassLoader)
return classLoaderWithDeps
if (evaluationConfiguration[ScriptEvaluationConfiguration.jvm.loadDependencies] == false) baseClassLoader
else makeClassLoaderFromDependencies(baseClassLoader)
return module.createClassLoader(classLoaderWithDeps)
}
fun getConfigurationWithClassloader(
@@ -130,7 +129,7 @@ fun getConfigurationWithClassloader(
}
}
private fun CompiledScript<*>.makeClassLoaderFromDependencies(baseClassLoader: ClassLoader): ClassLoader {
private fun CompiledScript<*>.makeClassLoaderFromDependencies(baseClassLoader: ClassLoader?): ClassLoader? {
val processedScripts = mutableSetOf<CompiledScript<*>>()
fun seq(res: Sequence<CompiledScript<*>>, script: CompiledScript<*>): Sequence<CompiledScript<*>> {
if (processedScripts.contains(script)) return res