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 c7c918080db..88a72c88ca9 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java
@@ -31,6 +31,8 @@ import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments;
import org.jetbrains.kotlin.cli.common.messages.*;
import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler;
import org.jetbrains.kotlin.cli.jvm.compiler.CompileEnvironmentException;
+import org.jetbrains.kotlin.cli.jvm.compiler.CompilerJarLocator;
+import org.jetbrains.kotlin.config.CompilerConfiguration;
import org.jetbrains.kotlin.config.Services;
import org.jetbrains.kotlin.progress.CompilationCanceledException;
import org.jetbrains.kotlin.progress.CompilationCanceledStatus;
@@ -166,6 +168,13 @@ public abstract class CLICompiler {
reportUnknownExtraFlags(messageCollector, arguments);
GroupingMessageCollector groupingCollector = new GroupingMessageCollector(messageCollector);
+
+ CompilerConfiguration configuration = new CompilerConfiguration();
+ configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, groupingCollector);
+
+ setupCommonArgumentsAndServices(configuration, arguments, services);
+ setupPlatformSpecificArgumentsAndServices(configuration, arguments, services);
+
try {
ExitCode exitCode = OK;
@@ -187,7 +196,7 @@ public abstract class CLICompiler {
}
Disposable rootDisposable = Disposer.newDisposable();
try {
- ExitCode code = doExecute(arguments, services, groupingCollector, rootDisposable);
+ ExitCode code = doExecute(arguments, configuration, rootDisposable);
exitCode = groupingCollector.hasErrors() ? COMPILATION_ERROR : code;
}
catch (CompilationCanceledException e) {
@@ -221,6 +230,19 @@ public abstract class CLICompiler {
}
}
+ private static void setupCommonArgumentsAndServices(
+ @NotNull CompilerConfiguration configuration, @NotNull CommonCompilerArguments arguments, @NotNull Services services
+ ) {
+ CompilerJarLocator locator = services.get(CompilerJarLocator.class);
+ if (locator != null) {
+ configuration.put(CLIConfigurationKeys.COMPILER_JAR_LOCATOR, locator);
+ }
+ }
+
+ protected abstract void setupPlatformSpecificArgumentsAndServices(
+ @NotNull CompilerConfiguration configuration, @NotNull A arguments, @NotNull Services services
+ );
+
private void reportUnknownExtraFlags(@NotNull MessageCollector collector, @NotNull A arguments) {
for (String flag : arguments.unknownExtraFlags) {
collector.report(
@@ -234,8 +256,7 @@ public abstract class CLICompiler {
@NotNull
protected abstract ExitCode doExecute(
@NotNull A arguments,
- @NotNull Services services,
- @NotNull MessageCollector messageCollector,
+ @NotNull CompilerConfiguration configuration,
@NotNull Disposable rootDisposable
);
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java
index 3ee78b5fef8..2aa1797f027 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java
@@ -40,7 +40,6 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation;
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity;
import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsKt;
-import org.jetbrains.kotlin.cli.jvm.compiler.CompilerJarLocator;
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.kotlin.config.CompilerConfiguration;
@@ -80,11 +79,10 @@ public class K2JSCompiler extends CLICompiler {
@NotNull
@Override
protected ExitCode doExecute(
- @NotNull K2JSCompilerArguments arguments,
- @NotNull Services services,
- @NotNull final MessageCollector messageCollector,
- @NotNull Disposable rootDisposable
+ @NotNull K2JSCompilerArguments arguments, @NotNull CompilerConfiguration configuration, @NotNull Disposable rootDisposable
) {
+ final MessageCollector messageCollector = configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY);
+
if (arguments.freeArgs.isEmpty()) {
if (arguments.version) {
return OK;
@@ -93,14 +91,6 @@ public class K2JSCompiler extends CLICompiler {
return COMPILATION_ERROR;
}
- CompilerConfiguration configuration = new CompilerConfiguration();
- configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector);
-
- CompilerJarLocator locator = services.get(CompilerJarLocator.class);
- if (locator != null) {
- configuration.put(CLIConfigurationKeys.COMPILER_JAR_LOCATOR, locator);
- }
-
ContentRootsKt.addKotlinSourceRoots(configuration, arguments.freeArgs);
KotlinCoreEnvironment environmentForJS =
KotlinCoreEnvironment.createForProduction(rootDisposable, configuration, EnvironmentConfigFiles.JS_CONFIG_FILES);
@@ -244,6 +234,13 @@ public class K2JSCompiler extends CLICompiler {
return analyzerWithCompilerReport;
}
+ @Override
+ protected void setupPlatformSpecificArgumentsAndServices(
+ @NotNull CompilerConfiguration configuration, @NotNull K2JSCompilerArguments arguments, @NotNull Services services
+ ) {
+ // No platform-specific arguments yet
+ }
+
@NotNull
private static Config getConfig(@NotNull K2JSCompilerArguments arguments, @NotNull Project project) {
if (arguments.target != null) {
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt
index ba449f0c8bd..31ceced209d 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt
@@ -24,7 +24,10 @@ import org.jetbrains.kotlin.cli.common.ExitCode
import org.jetbrains.kotlin.cli.common.ExitCode.*
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.cli.common.messages.*
-import org.jetbrains.kotlin.cli.jvm.compiler.*
+import org.jetbrains.kotlin.cli.jvm.compiler.CompileEnvironmentUtil
+import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
+import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
+import org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler
import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoot
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.cli.jvm.repl.ReplFromTerminal
@@ -46,7 +49,9 @@ import java.lang.management.ManagementFactory
import java.util.concurrent.TimeUnit
class K2JVMCompiler : CLICompiler() {
- override fun doExecute(arguments: K2JVMCompilerArguments, services: Services, messageCollector: MessageCollector, rootDisposable: Disposable): ExitCode {
+ override fun doExecute(arguments: K2JVMCompilerArguments, configuration: CompilerConfiguration, rootDisposable: Disposable): ExitCode {
+ val messageCollector = configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
+
val paths = if (arguments.kotlinHome != null)
KotlinPathsFromHomeDir(File(arguments.kotlinHome))
else
@@ -55,17 +60,6 @@ class K2JVMCompiler : CLICompiler() {
messageCollector.report(CompilerMessageSeverity.LOGGING, "Using Kotlin home directory " + paths.homePath, CompilerMessageLocation.NO_LOCATION)
PerformanceCounter.setTimeCounterEnabled(arguments.reportPerf)
- val configuration = CompilerConfiguration()
- configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
-
- if (IncrementalCompilation.isEnabled()) {
- val incrementalCompilationComponents = services.get(IncrementalCompilationComponents::class.java)
- configuration.put(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS, incrementalCompilationComponents)
- }
-
- val locator = services.get(CompilerJarLocator::class.java)
- configuration.put(CLIConfigurationKeys.COMPILER_JAR_LOCATOR, locator)
-
try {
if (!arguments.noJdk) {
configuration.addJvmClasspathRoots(PathUtil.getJdkClassesRoots())
@@ -223,6 +217,17 @@ class K2JVMCompiler : CLICompiler() {
return result
}
+ override fun setupPlatformSpecificArgumentsAndServices(
+ configuration: CompilerConfiguration, arguments: K2JVMCompilerArguments, services: Services
+ ) {
+ if (IncrementalCompilation.isEnabled()) {
+ configuration.put(
+ JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS,
+ services.get(IncrementalCompilationComponents::class.java)
+ )
+ }
+ }
+
/**
* Allow derived classes to add additional command line arguments
*/