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();