All Downloads are FREE. Search and download functionalities are using the official Maven repository.

name.remal.gradle_plugins.dsl.extensions.kotlin.collections.Iterable-java.io.File.kt Maven / Gradle / Ivy

package name.remal.gradle_plugins.dsl.extensions

import name.remal.forThreadContextClassLoader
import name.remal.reflection.ExtendedURLClassLoader
import name.remal.reflection.ExtendedURLClassLoader.LoadingOrder
import name.remal.reflection.ExtendedURLClassLoader.LoadingOrder.PARENT_FIRST
import name.remal.reflection.ExtendedURLClassLoader.LoadingOrderFactory
import java.io.File
import java.net.URLClassLoader

internal class ClassLoaderProvider

fun  Iterable.forClassLoader(loadingOrder: (resourceName: String) -> LoadingOrder, parent: ClassLoader? = ClassLoaderProvider::class.java.classLoader, action: (classLoader: URLClassLoader) -> R): R {
    val loadingOrderFactory = LoadingOrderFactory { resourceName ->
        if (arrayOf(
                "groovy/",
                "org/gradle/",
                "org/slf4j/",
                "org/apache/log4j/",
                "org/apache/logging/log4j/",
                "org/apache/commons/logging/"
            ).any { resourceName.startsWith(it) }
        ) {
            PARENT_FIRST
        } else {
            loadingOrder(resourceName)
        }
    }
    val urls = map { it.toURI().toURL() }
    ExtendedURLClassLoader(loadingOrderFactory, urls, parent).use { classLoader ->
        forThreadContextClassLoader(classLoader) {
            return action(classLoader)
        }
    }
}

fun  Iterable.forClassLoader(loadingOrder: LoadingOrder, parent: ClassLoader? = ClassLoaderProvider::class.java.classLoader, action: (classLoader: URLClassLoader) -> R): R {
    return forClassLoader({ loadingOrder }, parent, action)
}

fun  Iterable.forClassLoader(parent: ClassLoader? = ClassLoaderProvider::class.java.classLoader, action: (classLoader: URLClassLoader) -> R): R {
    return forClassLoader(PARENT_FIRST, parent, action)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy