diff --git a/compiler/compiler-runner/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.kt b/compiler/compiler-runner/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.kt index 3bf41957fab..89934bd1639 100644 --- a/compiler/compiler-runner/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.kt +++ b/compiler/compiler-runner/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.kt @@ -57,8 +57,7 @@ abstract class KotlinCompilerRunner { protected abstract fun getDaemonConnection(environment: Env): DaemonConnection @Synchronized - protected fun newDaemonConnection(compilerId: CompilerId, flagFile: File, environment: Env): DaemonConnection { - val daemonOptions = configureDaemonOptions() + protected fun newDaemonConnection(compilerId: CompilerId, flagFile: File, environment: Env, daemonOptions: DaemonOptions = configureDaemonOptions()): DaemonConnection { val daemonJVMOptions = configureDaemonJVMOptions(inheritMemoryLimits = true, inheritAdditionalProperties = true) val daemonReportMessages = ArrayList() diff --git a/compiler/daemon/daemon-client/src/org/jetbrains/kotlin/daemon/client/KotlinCompilerClient.kt b/compiler/daemon/daemon-client/src/org/jetbrains/kotlin/daemon/client/KotlinCompilerClient.kt index d7f93107058..0574a707599 100644 --- a/compiler/daemon/daemon-client/src/org/jetbrains/kotlin/daemon/client/KotlinCompilerClient.kt +++ b/compiler/daemon/daemon-client/src/org/jetbrains/kotlin/daemon/client/KotlinCompilerClient.kt @@ -60,7 +60,7 @@ object KotlinCompilerClient { ?.check { !it.isBlank() } ?.let(::File) ?.check(File::exists) - ?: makeAutodeletingFlagFile() + ?: makeAutodeletingFlagFile(baseDir = File(daemonOptions.runFilesPathOrDefault)) return connectToCompileService(compilerId, flagFile, daemonJVMOptions, daemonOptions, reportingTargets, autostart) } diff --git a/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/ClientUtils.kt b/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/ClientUtils.kt index 786a8f38170..a02c1bab172 100644 --- a/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/ClientUtils.kt +++ b/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/ClientUtils.kt @@ -81,10 +81,10 @@ private inline fun tryConnectToDaemon(port: Int, report: (DaemonReportCategory, return null } +private const val validFlagFileKeywordChars = "abcdefghijklmnopqrstuvwxyz0123456789-_" -fun makeAutodeletingFlagFile(keyword: String = "compiler-client"): File { - val validChars = "^a-zA-Z0-9-_" - val flagFile = File.createTempFile("kotlin-${keyword.filter { validChars.contains(it) }}-", "-is-running") +fun makeAutodeletingFlagFile(keyword: String = "compiler-client", baseDir: File? = null): File { + val flagFile = File.createTempFile("kotlin-${keyword.filter { validFlagFileKeywordChars.contains(it.toLowerCase()) }}-", "-is-running", baseDir?.takeIf { it.isDirectory && it.exists() }) flagFile.deleteOnExit() return flagFile } diff --git a/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt b/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt index 885fe9f37c4..b195caeb7bd 100644 --- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt +++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt @@ -328,7 +328,7 @@ class CompileServiceImpl( compilationOptions: CompilationOptions, servicesFacade: CompilerServicesFacadeBase, compilationResults: CompilationResults? - ): CompileService.CallResult { + ): CompileService.CallResult = ifAlive { val messageCollector = CompileServicesFacadeMessageCollector(servicesFacade, compilationOptions) val daemonReporter = DaemonMessageReporter(servicesFacade, compilationOptions) val compilerMode = compilationOptions.compilerMode @@ -342,10 +342,10 @@ class CompileServiceImpl( } catch (e: IllegalArgumentException) { messageCollector.report(CompilerMessageSeverity.EXCEPTION, e.stackTraceStr, CompilerMessageLocation.NO_LOCATION) - return CompileService.CallResult.Error("Could not deserialize compiler arguments") + return@ifAlive CompileService.CallResult.Error("Could not deserialize compiler arguments") } - return when (compilerMode) { + return@ifAlive when (compilerMode) { CompilerMode.JPS_COMPILER -> { val jpsServicesFacade = servicesFacade as JpsCompilerServicesFacade diff --git a/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/JpsKotlinCompilerRunner.kt b/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/JpsKotlinCompilerRunner.kt index a557b301749..22f2f111759 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/JpsKotlinCompilerRunner.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/JpsKotlinCompilerRunner.kt @@ -206,10 +206,10 @@ class JpsKotlinCompilerRunner : KotlinCompilerRunner() { val libPath = CompilerRunnerUtil.getLibPath(environment.kotlinPaths, environment.messageCollector) val compilerPath = File(libPath, "kotlin-compiler.jar") val compilerId = CompilerId.makeCompilerId(compilerPath) - val flagFile = File.createTempFile("kotlin-compiler-jps-session-", "-is-running").apply { - deleteOnExit() - } - jpsDaemonConnection = newDaemonConnection(compilerId, flagFile, environment) + // TODO: pass daemon options to newDaemonConnection + val daemonOptions = configureDaemonOptions() + val flagFile = makeAutodeletingFlagFile("compiler-jps-session-", File(daemonOptions.runFilesPathOrDefault)) + jpsDaemonConnection = newDaemonConnection(compilerId, flagFile, environment, daemonOptions) } return jpsDaemonConnection!! }