-
-
Notifications
You must be signed in to change notification settings - Fork 757
/
ClassLoaderCache.kt
28 lines (21 loc) · 945 Bytes
/
ClassLoaderCache.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package io.gitlab.arturbosch.detekt.internal
import org.gradle.api.file.FileCollection
import java.net.URLClassLoader
import java.util.concurrent.ConcurrentHashMap
fun interface ClassLoaderCache {
fun getOrCreate(classpath: FileCollection): URLClassLoader
}
internal class DefaultClassLoaderCache : ClassLoaderCache {
private val classpathFilesHashWithLoaders = ConcurrentHashMap<Int, URLClassLoader>()
override fun getOrCreate(classpath: FileCollection): URLClassLoader {
val classpathFiles = classpath.files
val classpathHashCode = HashSet(classpathFiles).hashCode()
return classpathFilesHashWithLoaders.getOrPut(classpathHashCode) {
URLClassLoader(
classpathFiles.map { it.toURI().toURL() }.toTypedArray(),
null /* isolate detekt environment */
)
}
}
}
object GlobalClassLoaderCache : ClassLoaderCache by DefaultClassLoaderCache()