diff --git a/.idea/artifacts/KotlinPlugin.xml b/.idea/artifacts/KotlinPlugin.xml index 3476cd93123..1ff79edf65e 100644 --- a/.idea/artifacts/KotlinPlugin.xml +++ b/.idea/artifacts/KotlinPlugin.xml @@ -44,6 +44,8 @@ + + diff --git a/compiler/rmi/kotlinr/src/KotlinCompilerClient.kt b/compiler/rmi/kotlinr/src/KotlinCompilerClient.kt index 754a74405d0..ab5324dda2b 100644 --- a/compiler/rmi/kotlinr/src/KotlinCompilerClient.kt +++ b/compiler/rmi/kotlinr/src/KotlinCompilerClient.kt @@ -157,6 +157,11 @@ public class KotlinCompilerClient { return connectToService(compilerId, daemonOptions, errStream) } + public fun shutdownCompileService(): Unit { + KotlinCompilerClient.connectToCompileService(CompilerId(), DaemonLaunchingOptions(), DaemonOptions(), System.out, autostart = false, checkId = false) + ?.shutdown() + } + public fun incrementalCompile(compiler: CompileService, args: Array, caches: Map, out: OutputStream): Int { val outStrm = RemoteOutputStreamServer(out) @@ -174,6 +179,13 @@ public class KotlinCompilerClient { public fun isDaemonEnabled(): Boolean = System.getProperty(COMPILE_DAEMON_ENABLED_PROPERTY) != null + public fun configureDaemonLaunchingOptions(opts: DaemonLaunchingOptions) { + System.getProperty(COMPILE_DAEMON_JVM_OPTIONS_PROPERTY)?.let { + // TODO: find better way to pass and parse jvm options for daemon + opts.jvmParams = it.split("##") + } + } + data class ClientOptions( public var stop: Boolean = false ) :CmdlineParams { diff --git a/compiler/rmi/rmi-interface/src/org/jetbrains/kotlin/rmi/DaemonParams.kt b/compiler/rmi/rmi-interface/src/org/jetbrains/kotlin/rmi/DaemonParams.kt index 58706ea4979..2c4f0c74f12 100644 --- a/compiler/rmi/rmi-interface/src/org/jetbrains/kotlin/rmi/DaemonParams.kt +++ b/compiler/rmi/rmi-interface/src/org/jetbrains/kotlin/rmi/DaemonParams.kt @@ -30,6 +30,7 @@ public val COMPILER_SERVICE_RMI_NAME: String = "KotlinJvmCompilerService" public val COMPILER_DAEMON_CLASS_FQN: String = "org.jetbrains.kotlin.rmi.service.CompileDaemon" public val COMPILE_DAEMON_DEFAULT_PORT: Int = 17031 public val COMPILE_DAEMON_ENABLED_PROPERTY: String ="kotlin.daemon.enabled" +public val COMPILE_DAEMON_JVM_OPTIONS_PROPERTY: String ="kotlin.daemon.jvm.options" fun> C.propToParams(p: P, conv: ((v: V) -> String) = { it.toString() } ) = diff --git a/idea/idea.iml b/idea/idea.iml index f0de3f1fc81..725e973dd63 100644 --- a/idea/idea.iml +++ b/idea/idea.iml @@ -50,5 +50,6 @@ + \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/PluginStartupComponent.java b/idea/src/org/jetbrains/kotlin/idea/PluginStartupComponent.java index d9fbc93f52f..cfea2bc5d71 100644 --- a/idea/src/org/jetbrains/kotlin/idea/PluginStartupComponent.java +++ b/idea/src/org/jetbrains/kotlin/idea/PluginStartupComponent.java @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.idea.caches.JarUserDataManager; import org.jetbrains.kotlin.idea.debugger.filter.FilterPackage; import org.jetbrains.kotlin.idea.decompiler.HasCompiledKotlinInJar; import org.jetbrains.kotlin.idea.framework.KotlinJavaScriptLibraryDetectionUtil; +import org.jetbrains.kotlin.rmi.kotlinr.KotlinCompilerClient; import org.jetbrains.kotlin.utils.PathUtil; public class PluginStartupComponent implements ApplicationComponent { @@ -51,5 +52,6 @@ public class PluginStartupComponent implements ApplicationComponent { @Override public void disposeComponent() { + KotlinCompilerClient.Companion.shutdownCompileService(); } } diff --git a/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.java b/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.java index 4921e35768b..25b917c6b6e 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.java +++ b/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.java @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.config.CompilerSettings; import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache; import org.jetbrains.kotlin.rmi.CompileService; import org.jetbrains.kotlin.rmi.CompilerId; +import org.jetbrains.kotlin.rmi.DaemonLaunchingOptions; import org.jetbrains.kotlin.rmi.DaemonOptions; import org.jetbrains.kotlin.rmi.kotlinr.KotlinCompilerClient; import org.jetbrains.kotlin.utils.UtilsPackage; @@ -136,8 +137,10 @@ public class KotlinCompilerRunner { // the lifetime of JPS process is small anyway, we can neglect the probability of changed compiler CompilerId compilerId = CompilerId.makeCompilerId(new File(libPath, "kotlin-compiler.jar")); DaemonOptions daemonOptions = new DaemonOptions(); + DaemonLaunchingOptions daemonLaunchingOptions = new DaemonLaunchingOptions(); + KotlinCompilerClient.Companion.configureDaemonLaunchingOptions(daemonLaunchingOptions); // TODO: find proper stream to report daemon connection progress - CompileService daemon = KotlinCompilerClient.Companion.connectToCompileService(compilerId, daemonOptions, System.out, true, true); + CompileService daemon = KotlinCompilerClient.Companion.connectToCompileService(compilerId, daemonLaunchingOptions, daemonOptions, System.out, true, true); if (daemon != null) { Integer res = KotlinCompilerClient.Companion.incrementalCompile(daemon, argsArray, incrementalCaches, out); return res.toString();