[BT] Use bootstrap classloader as a fallback instead of system classloader

Using system classloader may lead to unwanted leakage of classes from the application classpath (like Gradle's ones).
#KT-61206 Fixed
This commit is contained in:
Alexander.Likhachev
2023-08-14 23:08:53 +02:00
committed by Space Team
parent 4705f13b39
commit 797ca34a34
@@ -19,7 +19,6 @@ import kotlin.reflect.KClass
@JvmName("newInstance")
public fun SharedApiClassesClassLoader(): ClassLoader = SharedApiClassesClassLoaderImpl(
SharedApiClassesClassLoaderImpl::class.java.classLoader,
ClassLoader.getSystemClassLoader(),
SharedApiClassesClassLoaderImpl::class.java.`package`.name,
)
@@ -32,9 +31,8 @@ internal fun <T : Any> loadImplementation(cls: KClass<T>, classLoader: ClassLoad
private class SharedApiClassesClassLoaderImpl(
private val parent: ClassLoader,
fallback: ClassLoader,
private val allowedPackage: String,
) : ClassLoader(fallback) {
) : ClassLoader(null) { // `null` parent means that the parent is the bootstrap classloader
override fun loadClass(name: String, resolve: Boolean): Class<*> {
return if (name.startsWith(allowedPackage)) {
parent.loadClass(name)