Fix failing tests on TC on Windows by falling back to standard launcher
...in one more case Plus some minor test tweaks, diagnostics improvement and important comments
This commit is contained in:
+15
-3
@@ -20,9 +20,12 @@ import org.jetbrains.kotlin.daemon.common.DaemonReportCategory
|
||||
import java.io.IOException
|
||||
|
||||
private class NativePlatformLauncherWrapper {
|
||||
private val nativeLauncher: net.rubygrapefruit.platform.ProcessLauncher by lazy {
|
||||
net.rubygrapefruit.platform.Native.get(net.rubygrapefruit.platform.ProcessLauncher::class.java)
|
||||
}
|
||||
|
||||
fun launch(processBuilder: ProcessBuilder): Process =
|
||||
try {
|
||||
val nativeLauncher = net.rubygrapefruit.platform.Native.get(net.rubygrapefruit.platform.ProcessLauncher::class.java)
|
||||
nativeLauncher.start(processBuilder)
|
||||
}
|
||||
catch (e: net.rubygrapefruit.platform.NativeException) {
|
||||
@@ -33,14 +36,23 @@ private class NativePlatformLauncherWrapper {
|
||||
|
||||
fun launchProcessWithFallback(processBuilder: ProcessBuilder, reportingTargets: DaemonReportingTargets, reportingSource: String = "process launcher"): Process =
|
||||
try {
|
||||
// A separate class to delay classloading until this point, where we can catch class loading errors in case then the native lib is not in the classpath
|
||||
NativePlatformLauncherWrapper().launch(processBuilder)
|
||||
}
|
||||
catch (e: UnsatisfiedLinkError) {
|
||||
reportingTargets.report(DaemonReportCategory.DEBUG, "Could not start process with native process launcher, falling back to ProcessBuilder#start ($e)", reportingSource)
|
||||
null
|
||||
}
|
||||
catch (e: IOException) {
|
||||
reportingTargets.report(DaemonReportCategory.DEBUG, "Could not start process with native process launcher, falling back to ProcessBuilder#start (${e.cause})")
|
||||
reportingTargets.report(DaemonReportCategory.DEBUG, "Could not start process with native process launcher, falling back to ProcessBuilder#start (${e.cause})", reportingSource)
|
||||
null
|
||||
}
|
||||
catch (e: NoClassDefFoundError) {
|
||||
reportingTargets.report(DaemonReportCategory.DEBUG, "net.rubygrapefruit.platform library is not in the classpath, falling back to ProcessBuilder#start")
|
||||
reportingTargets.report(DaemonReportCategory.DEBUG, "net.rubygrapefruit.platform library is not in the classpath, falling back to ProcessBuilder#start ($e)", reportingSource)
|
||||
null
|
||||
}
|
||||
catch (e: ClassNotFoundException) {
|
||||
reportingTargets.report(DaemonReportCategory.DEBUG, "net.rubygrapefruit.platform library is not in the classpath, falling back to ProcessBuilder#start ($e)", reportingSource)
|
||||
null
|
||||
}
|
||||
?: processBuilder.start()
|
||||
|
||||
Reference in New Issue
Block a user