[Gradle, Native] When running tool in-process, log the actual classpath

When running tool in-process, log the actual classpath extracted from
the classloader, not the one that was intended.
This helps to detect the cases when these two don't match.
This commit is contained in:
Svyatoslav Scherbina
2021-08-30 15:05:15 +03:00
committed by Space
parent 71af22dba0
commit 1c052ad448
@@ -36,7 +36,7 @@ internal abstract class KotlinToolRunner(
open fun checkClasspath(): Unit = check(classpath.isNotEmpty()) { "Classpath of the tool is empty: $displayName" }
abstract val isolatedClassLoaderCacheKey: Any
private fun getIsolatedClassLoader(): ClassLoader = isolatedClassLoadersMap.computeIfAbsent(isolatedClassLoaderCacheKey) {
private fun getIsolatedClassLoader(): URLClassLoader = isolatedClassLoadersMap.computeIfAbsent(isolatedClassLoaderCacheKey) {
val arrayOfURLs = classpath.map { File(it.absolutePath).toURI().toURL() }.toTypedArray()
URLClassLoader(arrayOfURLs, null).apply {
setDefaultAssertionStatus(enableAssertions)
@@ -112,18 +112,19 @@ internal abstract class KotlinToolRunner(
private fun runInProcess(args: List<String>) {
val transformedArgs = transformArgs(args)
val isolatedClassLoader = getIsolatedClassLoader()
project.logger.info(
"""|Run in-process tool "$displayName"
|Entry point method = $mainClass.$daemonEntryPoint
|Classpath = ${classpath.map { it.absolutePath }.toPrettyString()}
|Classpath = ${isolatedClassLoader.urLs.map { it.file }.toPrettyString()}
|Arguments = ${args.toPrettyString()}
|Transformed arguments = ${if (transformedArgs == args) "same as arguments" else transformedArgs.toPrettyString()}
""".trimMargin()
)
try {
val mainClass = getIsolatedClassLoader().loadClass(mainClass)
val mainClass = isolatedClassLoader.loadClass(mainClass)
val entryPoint = mainClass.methods.single { it.name == daemonEntryPoint }
entryPoint.invoke(null, transformedArgs.toTypedArray())
@@ -138,7 +139,7 @@ internal abstract class KotlinToolRunner(
private fun Sequence<Pair<String, String>>.escapeQuotesForWindows() =
if (HostManager.hostIsMingw) map { (key, value) -> key.escapeQuotes() to value.escapeQuotes() } else this
private val isolatedClassLoadersMap = ConcurrentHashMap<Any, ClassLoader>()
private val isolatedClassLoadersMap = ConcurrentHashMap<Any, URLClassLoader>()
private fun Map<String, String>.toPrettyString(): String = buildString {
append('[')