diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.java b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.java index 9789918161a..cee6029fad8 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.java +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.java @@ -93,6 +93,13 @@ public abstract class CommonCompilerArguments implements Serializable { @Argument(value = "-Xno-check-impl", description = "Do not check presence of 'impl' modifier in multi-platform projects") public boolean noCheckImpl; + @Argument( + value = "-Xintellij-plugin-root", + valueDescription = "", + description = "Path to the kotlin-compiler.jar or directory where IntelliJ configuration files can be found" + ) + public String intellijPluginRoot; + @Argument( value = "-Xcoroutines", valueDescription = "{enable|warn|error}", diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java index cd96566013c..748283d65d6 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java @@ -212,7 +212,10 @@ public abstract class CLICompiler { if (arguments.noInline) { configuration.put(CommonConfigurationKeys.DISABLE_INLINE, true); } - + if (arguments.intellijPluginRoot != null) { + configuration.put(CLIConfigurationKeys.INTELLIJ_PLUGIN_ROOT, arguments.intellijPluginRoot); + } + @SuppressWarnings("deprecation") CompilerJarLocator locator = services.get(CompilerJarLocator.class); if (locator != null) { configuration.put(CLIConfigurationKeys.COMPILER_JAR_LOCATOR, locator); diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLIConfigurationKeys.java b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLIConfigurationKeys.java index 60a80e4dc6d..06a07bb5c70 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLIConfigurationKeys.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLIConfigurationKeys.java @@ -33,6 +33,9 @@ public class CLIConfigurationKeys { CompilerConfigurationKey.create("is API version explicit"); // Used in Eclipse plugin (see KotlinCLICompiler) + public static final CompilerConfigurationKey INTELLIJ_PLUGIN_ROOT = + CompilerConfigurationKey.create("intellij plugin root"); + @SuppressWarnings("deprecation") public static final CompilerConfigurationKey COMPILER_JAR_LOCATOR = CompilerConfigurationKey.create("compiler jar locator"); diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CompilerJarLocator.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CompilerJarLocator.java index cccbe0c9360..bd16b5e7cf8 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CompilerJarLocator.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CompilerJarLocator.java @@ -20,6 +20,11 @@ import org.jetbrains.annotations.NotNull; import java.io.File; +/** + * @deprecated use the -Xintellij-plugin-root command line argument instead + */ +// TODO: drop as soon as Eclipse plugin starts using the new API +@Deprecated public interface CompilerJarLocator { @NotNull File getCompilerJar(); diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt index 0b00bb66d19..2b0b451f7bf 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt @@ -435,8 +435,10 @@ class KotlinCoreEnvironment private constructor( } private fun registerApplicationExtensionPointsAndExtensionsFrom(configuration: CompilerConfiguration, configFilePath: String) { - val locator = configuration.get(CLIConfigurationKeys.COMPILER_JAR_LOCATOR) - var pluginRoot = if (locator == null) PathUtil.getPathUtilJar() else locator.compilerJar + var pluginRoot = + configuration.get(CLIConfigurationKeys.INTELLIJ_PLUGIN_ROOT)?.let(::File) + ?: configuration.get(CLIConfigurationKeys.COMPILER_JAR_LOCATOR)?.compilerJar + ?: PathUtil.getPathUtilJar() val app = ApplicationManager.getApplication() val parentFile = pluginRoot.parentFile diff --git a/compiler/testData/cli/js/jsExtraHelp.out b/compiler/testData/cli/js/jsExtraHelp.out index 5c89046e42e..37f76e9b876 100644 --- a/compiler/testData/cli/js/jsExtraHelp.out +++ b/compiler/testData/cli/js/jsExtraHelp.out @@ -8,6 +8,7 @@ where advanced options include: -Xplugin= Load plugins from the given classpath -Xmulti-platform Enable experimental language support for multi-platform projects -Xno-check-impl Do not check presence of 'impl' modifier in multi-platform projects + -Xintellij-plugin-root= Path to the kotlin-compiler.jar or directory where IntelliJ configuration files can be found -Xcoroutines={enable|warn|error} Enable coroutines or report warnings or errors on declarations and use sites of 'suspend' modifier diff --git a/compiler/testData/cli/jvm/extraHelp.out b/compiler/testData/cli/jvm/extraHelp.out index 2af4834297b..a36ac403df3 100644 --- a/compiler/testData/cli/jvm/extraHelp.out +++ b/compiler/testData/cli/jvm/extraHelp.out @@ -20,6 +20,7 @@ where advanced options include: -Xplugin= Load plugins from the given classpath -Xmulti-platform Enable experimental language support for multi-platform projects -Xno-check-impl Do not check presence of 'impl' modifier in multi-platform projects + -Xintellij-plugin-root= Path to the kotlin-compiler.jar or directory where IntelliJ configuration files can be found -Xcoroutines={enable|warn|error} Enable coroutines or report warnings or errors on declarations and use sites of 'suspend' modifier