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 5913e97decb..1854d6f0030 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java @@ -44,7 +44,9 @@ 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.OutputUtilsPackage; +import org.jetbrains.kotlin.cli.jvm.JVMConfigurationKeys; import org.jetbrains.kotlin.cli.jvm.compiler.CompileEnvironmentUtil; +import org.jetbrains.kotlin.cli.jvm.compiler.CompilerJarLocator; import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles; import org.jetbrains.kotlin.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.kotlin.config.CompilerConfiguration; @@ -96,6 +98,11 @@ public class K2JSCompiler extends CLICompiler { CompilerConfiguration configuration = new CompilerConfiguration(); configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector); + CompilerJarLocator locator = services.get(CompilerJarLocator.class); + if (locator != null) { + configuration.put(JVMConfigurationKeys.COMPILER_JAR_LOCATOR, locator); + } + CompileEnvironmentUtil.addSourceFilesCheckingForDuplicates(configuration, arguments.freeArgs); JetCoreEnvironment environmentForJS = JetCoreEnvironment.createForProduction(rootDisposable, configuration, EnvironmentConfigFiles.JS_CONFIG_FILES); diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/JVMConfigurationKeys.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/JVMConfigurationKeys.java index 48d43c83588..30a4c1ca94d 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/JVMConfigurationKeys.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/JVMConfigurationKeys.java @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.cli.jvm; +import org.jetbrains.kotlin.cli.jvm.compiler.CompilerJarLocator; import org.jetbrains.kotlin.config.CompilerConfigurationKey; import org.jetbrains.kotlin.load.kotlin.incremental.cache.IncrementalCacheProvider; import org.jetbrains.kotlin.resolve.AnalyzerScriptParameter; @@ -30,7 +31,8 @@ public class JVMConfigurationKeys { public static final CompilerConfigurationKey> CLASSPATH_KEY = CompilerConfigurationKey.create("classpath"); public static final CompilerConfigurationKey> ANNOTATIONS_PATH_KEY = CompilerConfigurationKey.create("annotations path"); - public static final CompilerConfigurationKey> SCRIPT_PARAMETERS = CompilerConfigurationKey.create("script"); + public static final CompilerConfigurationKey> SCRIPT_PARAMETERS = + CompilerConfigurationKey.create("script"); public static final CompilerConfigurationKey DISABLE_CALL_ASSERTIONS = CompilerConfigurationKey.create("disable not-null call assertions"); @@ -44,6 +46,9 @@ public class JVMConfigurationKeys { public static final CompilerConfigurationKey INCREMENTAL_CACHE_PROVIDER = CompilerConfigurationKey.create("incremental cache provider"); + public static final CompilerConfigurationKey COMPILER_JAR_LOCATOR = + CompilerConfigurationKey.create("Compiler jar locator"); + public static final CompilerConfigurationKey> MODULE_IDS = CompilerConfigurationKey.create("module id strings"); } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java index f127e98d823..ef8e59ade68 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java @@ -75,6 +75,11 @@ public class K2JVMCompiler extends CLICompiler { configuration.put(JVMConfigurationKeys.INCREMENTAL_CACHE_PROVIDER, incrementalCacheProvider); } + CompilerJarLocator locator = services.get(CompilerJarLocator.class); + if (locator != null) { + configuration.put(JVMConfigurationKeys.COMPILER_JAR_LOCATOR, locator); + } + try { configuration.addAll(JVMConfigurationKeys.CLASSPATH_KEY, getClasspath(paths, arguments)); configuration.addAll(JVMConfigurationKeys.ANNOTATIONS_PATH_KEY, getAnnotationsPath(paths, arguments)); 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 new file mode 100644 index 00000000000..cccbe0c9360 --- /dev/null +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CompilerJarLocator.java @@ -0,0 +1,26 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.cli.jvm.compiler; + +import org.jetbrains.annotations.NotNull; + +import java.io.File; + +public interface CompilerJarLocator { + @NotNull + File getCompilerJar(); +} diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JetCoreEnvironment.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JetCoreEnvironment.java index a31ab3f9707..6a2c116d9a8 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JetCoreEnvironment.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JetCoreEnvironment.java @@ -95,7 +95,7 @@ public class JetCoreEnvironment { } }); JetCoreEnvironment environment = - new JetCoreEnvironment(parentDisposable, getOrCreateApplicationEnvironmentForProduction(configFilePaths), configuration); + new JetCoreEnvironment(parentDisposable, getOrCreateApplicationEnvironmentForProduction(configuration, configFilePaths), configuration); synchronized (APPLICATION_LOCK) { ourProjectCount++; @@ -111,16 +111,18 @@ public class JetCoreEnvironment { @NotNull List extensionConfigs ) { // Tests are supposed to create a single project and dispose it right after use - return new JetCoreEnvironment(parentDisposable, createApplicationEnvironment(parentDisposable, extensionConfigs), configuration); + return new JetCoreEnvironment(parentDisposable, createApplicationEnvironment(parentDisposable, configuration, extensionConfigs), configuration); } @NotNull - private static JavaCoreApplicationEnvironment getOrCreateApplicationEnvironmentForProduction(@NotNull List configFilePaths) { + private static JavaCoreApplicationEnvironment getOrCreateApplicationEnvironmentForProduction( + @NotNull CompilerConfiguration configuration, + @NotNull List configFilePaths) { synchronized (APPLICATION_LOCK) { if (ourApplicationEnvironment != null) return ourApplicationEnvironment; Disposable parentDisposable = Disposer.newDisposable(); - ourApplicationEnvironment = createApplicationEnvironment(parentDisposable, configFilePaths); + ourApplicationEnvironment = createApplicationEnvironment(parentDisposable, configuration, configFilePaths); ourProjectCount = 0; Disposer.register(parentDisposable, new Disposable() { @Override @@ -146,12 +148,13 @@ public class JetCoreEnvironment { @NotNull private static JavaCoreApplicationEnvironment createApplicationEnvironment( @NotNull Disposable parentDisposable, + @NotNull CompilerConfiguration configuration, @NotNull List configFilePaths ) { JavaCoreApplicationEnvironment applicationEnvironment = new JavaCoreApplicationEnvironment(parentDisposable); - for (String config : configFilePaths) { - registerApplicationExtensionPointsAndExtensionsFrom(config); + for (String configPath : configFilePaths) { + registerApplicationExtensionPointsAndExtensionsFrom(configuration, configPath); } registerApplicationServicesForCLI(applicationEnvironment); @@ -160,9 +163,10 @@ public class JetCoreEnvironment { return applicationEnvironment; } - private static void registerApplicationExtensionPointsAndExtensionsFrom(String configFilePath) { + private static void registerApplicationExtensionPointsAndExtensionsFrom(@NotNull CompilerConfiguration configuration, @NotNull String configFilePath) { IdeaPluginDescriptorImpl descriptor; - File jar = PathUtil.getPathUtilJar(); + CompilerJarLocator locator = configuration.get(JVMConfigurationKeys.COMPILER_JAR_LOCATOR); + File jar = locator == null ? PathUtil.getPathUtilJar() : locator.getCompilerJar(); if (jar.isFile()) { descriptor = PluginManagerCoreProxy.loadDescriptorFromJar(jar, configFilePath); }