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 */