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()
|
||||
|
||||
@@ -20,5 +20,6 @@
|
||||
<orderEntry type="module" module-name="incremental-compilation-impl" scope="TEST" />
|
||||
<orderEntry type="library" name="kotlin-reflect" level="project" />
|
||||
<orderEntry type="module" module-name="cli" scope="TEST" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="native-platform-uberjar" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
+2
-2
@@ -59,7 +59,7 @@ class SourceSectionsTest : TestCaseWithTmpdir() {
|
||||
}
|
||||
|
||||
val compilerClassPath = listOf(kotlinPaths.compilerPath)
|
||||
val scriptRuntimeClassPath = listOf( kotlinPaths.runtimePath, kotlinPaths.scriptRuntimePath)
|
||||
val scriptRuntimeClassPath = listOf( kotlinPaths.stdlibPath, kotlinPaths.scriptRuntimePath)
|
||||
val sourceSectionsPluginJar = File(kotlinPaths.libPath, "kotlin-source-sections-compiler-plugin.jar")
|
||||
val compilerId by lazy(LazyThreadSafetyMode.NONE) { CompilerId.makeCompilerId(compilerClassPath) }
|
||||
|
||||
@@ -201,7 +201,7 @@ class SourceSectionsTest : TestCaseWithTmpdir() {
|
||||
|
||||
val daemonWithSession = KotlinCompilerClient.connectAndLease(compilerId, aliveFile, daemonJVMOptions, daemonOptions,
|
||||
DaemonReportingTargets(messageCollector = messageCollector), autostart = true, leaseSession = true)
|
||||
assertNotNull("failed to connect daemon", daemonWithSession)
|
||||
assertNotNull("failed to connect daemon:\ncompiler id: $compilerId\ndaemon opts: $daemonOptions\njvm opts: $daemonJVMOptions\nalive file: $aliveFile\n", daemonWithSession)
|
||||
|
||||
try {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user