[BTA, Gradle] Share cached classloaders between builds
^KT-64353 Fixed
This commit is contained in:
committed by
Space Team
parent
0ce7bdc837
commit
9d88e90821
+4
-8
@@ -27,9 +27,7 @@ internal interface UsesClassLoadersCachingBuildService : Task {
|
|||||||
/**
|
/**
|
||||||
* A [BuildService] for caching [ClassLoader] instances
|
* A [BuildService] for caching [ClassLoader] instances
|
||||||
*/
|
*/
|
||||||
internal abstract class ClassLoadersCachingBuildService : BuildService<BuildServiceParameters.None>, AutoCloseable {
|
internal abstract class ClassLoadersCachingBuildService : BuildService<BuildServiceParameters.None> {
|
||||||
// The service could be used by multiple tasks in parallel, so the map have to be synchronized
|
|
||||||
private val classLoaders = ConcurrentHashMap<ClassLoaderCacheKey, ClassLoader>()
|
|
||||||
private val logger = Logging.getLogger(javaClass)
|
private val logger = Logging.getLogger(javaClass)
|
||||||
|
|
||||||
fun getClassLoader(
|
fun getClassLoader(
|
||||||
@@ -42,12 +40,10 @@ internal abstract class ClassLoadersCachingBuildService : BuildService<BuildServ
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun close() {
|
|
||||||
logger.debug("Clearing ${classLoaders.size} cached classloaders")
|
|
||||||
classLoaders.clear()
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
// The service could be used by multiple tasks in parallel, so the map have to be synchronized
|
||||||
|
private val classLoaders = ConcurrentHashMap<ClassLoaderCacheKey, ClassLoader>()
|
||||||
|
|
||||||
fun registerIfAbsent(project: Project) =
|
fun registerIfAbsent(project: Project) =
|
||||||
project.gradle.registerClassLoaderScopedBuildService(ClassLoadersCachingBuildService::class).also { serviceProvider ->
|
project.gradle.registerClassLoaderScopedBuildService(ClassLoadersCachingBuildService::class).also { serviceProvider ->
|
||||||
SingleActionPerProject.run(project, UsesClassLoadersCachingBuildService::class.java.name) {
|
SingleActionPerProject.run(project, UsesClassLoadersCachingBuildService::class.java.name) {
|
||||||
|
|||||||
Reference in New Issue
Block a user