Compiler jar locator

This commit is contained in:
Nikolay Krasko
2015-01-22 16:13:13 +03:00
parent 6ffe49f1d2
commit 234f56a3c4
5 changed files with 56 additions and 9 deletions
@@ -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<K2JSCompilerArguments> {
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);
@@ -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<List<File>> CLASSPATH_KEY = CompilerConfigurationKey.create("classpath");
public static final CompilerConfigurationKey<List<File>> ANNOTATIONS_PATH_KEY = CompilerConfigurationKey.create("annotations path");
public static final CompilerConfigurationKey<List<AnalyzerScriptParameter>> SCRIPT_PARAMETERS = CompilerConfigurationKey.create("script");
public static final CompilerConfigurationKey<List<AnalyzerScriptParameter>> SCRIPT_PARAMETERS =
CompilerConfigurationKey.create("script");
public static final CompilerConfigurationKey<Boolean> DISABLE_CALL_ASSERTIONS =
CompilerConfigurationKey.create("disable not-null call assertions");
@@ -44,6 +46,9 @@ public class JVMConfigurationKeys {
public static final CompilerConfigurationKey<IncrementalCacheProvider> INCREMENTAL_CACHE_PROVIDER =
CompilerConfigurationKey.create("incremental cache provider");
public static final CompilerConfigurationKey<CompilerJarLocator> COMPILER_JAR_LOCATOR =
CompilerConfigurationKey.create("Compiler jar locator");
public static final CompilerConfigurationKey<List<String>> MODULE_IDS =
CompilerConfigurationKey.create("module id strings");
}
@@ -75,6 +75,11 @@ public class K2JVMCompiler extends CLICompiler<K2JVMCompilerArguments> {
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));
@@ -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();
}
@@ -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<String> 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<String> configFilePaths) {
private static JavaCoreApplicationEnvironment getOrCreateApplicationEnvironmentForProduction(
@NotNull CompilerConfiguration configuration,
@NotNull List<String> 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<String> 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);
}