Compiler jar locator
This commit is contained in:
@@ -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.CompilerMessageSeverity;
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
|
||||||
import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsPackage;
|
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.CompileEnvironmentUtil;
|
||||||
|
import org.jetbrains.kotlin.cli.jvm.compiler.CompilerJarLocator;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.JetCoreEnvironment;
|
import org.jetbrains.kotlin.cli.jvm.compiler.JetCoreEnvironment;
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
@@ -96,6 +98,11 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
|
|||||||
CompilerConfiguration configuration = new CompilerConfiguration();
|
CompilerConfiguration configuration = new CompilerConfiguration();
|
||||||
configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector);
|
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);
|
CompileEnvironmentUtil.addSourceFilesCheckingForDuplicates(configuration, arguments.freeArgs);
|
||||||
JetCoreEnvironment environmentForJS =
|
JetCoreEnvironment environmentForJS =
|
||||||
JetCoreEnvironment.createForProduction(rootDisposable, configuration, EnvironmentConfigFiles.JS_CONFIG_FILES);
|
JetCoreEnvironment.createForProduction(rootDisposable, configuration, EnvironmentConfigFiles.JS_CONFIG_FILES);
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.cli.jvm;
|
package org.jetbrains.kotlin.cli.jvm;
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.cli.jvm.compiler.CompilerJarLocator;
|
||||||
import org.jetbrains.kotlin.config.CompilerConfigurationKey;
|
import org.jetbrains.kotlin.config.CompilerConfigurationKey;
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.cache.IncrementalCacheProvider;
|
import org.jetbrains.kotlin.load.kotlin.incremental.cache.IncrementalCacheProvider;
|
||||||
import org.jetbrains.kotlin.resolve.AnalyzerScriptParameter;
|
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>> CLASSPATH_KEY = CompilerConfigurationKey.create("classpath");
|
||||||
public static final CompilerConfigurationKey<List<File>> ANNOTATIONS_PATH_KEY = CompilerConfigurationKey.create("annotations path");
|
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 =
|
public static final CompilerConfigurationKey<Boolean> DISABLE_CALL_ASSERTIONS =
|
||||||
CompilerConfigurationKey.create("disable not-null call assertions");
|
CompilerConfigurationKey.create("disable not-null call assertions");
|
||||||
@@ -44,6 +46,9 @@ public class JVMConfigurationKeys {
|
|||||||
public static final CompilerConfigurationKey<IncrementalCacheProvider> INCREMENTAL_CACHE_PROVIDER =
|
public static final CompilerConfigurationKey<IncrementalCacheProvider> INCREMENTAL_CACHE_PROVIDER =
|
||||||
CompilerConfigurationKey.create("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 =
|
public static final CompilerConfigurationKey<List<String>> MODULE_IDS =
|
||||||
CompilerConfigurationKey.create("module id strings");
|
CompilerConfigurationKey.create("module id strings");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,6 +75,11 @@ public class K2JVMCompiler extends CLICompiler<K2JVMCompilerArguments> {
|
|||||||
configuration.put(JVMConfigurationKeys.INCREMENTAL_CACHE_PROVIDER, incrementalCacheProvider);
|
configuration.put(JVMConfigurationKeys.INCREMENTAL_CACHE_PROVIDER, incrementalCacheProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CompilerJarLocator locator = services.get(CompilerJarLocator.class);
|
||||||
|
if (locator != null) {
|
||||||
|
configuration.put(JVMConfigurationKeys.COMPILER_JAR_LOCATOR, locator);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
configuration.addAll(JVMConfigurationKeys.CLASSPATH_KEY, getClasspath(paths, arguments));
|
configuration.addAll(JVMConfigurationKeys.CLASSPATH_KEY, getClasspath(paths, arguments));
|
||||||
configuration.addAll(JVMConfigurationKeys.ANNOTATIONS_PATH_KEY, getAnnotationsPath(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 =
|
JetCoreEnvironment environment =
|
||||||
new JetCoreEnvironment(parentDisposable, getOrCreateApplicationEnvironmentForProduction(configFilePaths), configuration);
|
new JetCoreEnvironment(parentDisposable, getOrCreateApplicationEnvironmentForProduction(configuration, configFilePaths), configuration);
|
||||||
|
|
||||||
synchronized (APPLICATION_LOCK) {
|
synchronized (APPLICATION_LOCK) {
|
||||||
ourProjectCount++;
|
ourProjectCount++;
|
||||||
@@ -111,16 +111,18 @@ public class JetCoreEnvironment {
|
|||||||
@NotNull List<String> extensionConfigs
|
@NotNull List<String> extensionConfigs
|
||||||
) {
|
) {
|
||||||
// Tests are supposed to create a single project and dispose it right after use
|
// 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
|
@NotNull
|
||||||
private static JavaCoreApplicationEnvironment getOrCreateApplicationEnvironmentForProduction(@NotNull List<String> configFilePaths) {
|
private static JavaCoreApplicationEnvironment getOrCreateApplicationEnvironmentForProduction(
|
||||||
|
@NotNull CompilerConfiguration configuration,
|
||||||
|
@NotNull List<String> configFilePaths) {
|
||||||
synchronized (APPLICATION_LOCK) {
|
synchronized (APPLICATION_LOCK) {
|
||||||
if (ourApplicationEnvironment != null) return ourApplicationEnvironment;
|
if (ourApplicationEnvironment != null) return ourApplicationEnvironment;
|
||||||
|
|
||||||
Disposable parentDisposable = Disposer.newDisposable();
|
Disposable parentDisposable = Disposer.newDisposable();
|
||||||
ourApplicationEnvironment = createApplicationEnvironment(parentDisposable, configFilePaths);
|
ourApplicationEnvironment = createApplicationEnvironment(parentDisposable, configuration, configFilePaths);
|
||||||
ourProjectCount = 0;
|
ourProjectCount = 0;
|
||||||
Disposer.register(parentDisposable, new Disposable() {
|
Disposer.register(parentDisposable, new Disposable() {
|
||||||
@Override
|
@Override
|
||||||
@@ -146,12 +148,13 @@ public class JetCoreEnvironment {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private static JavaCoreApplicationEnvironment createApplicationEnvironment(
|
private static JavaCoreApplicationEnvironment createApplicationEnvironment(
|
||||||
@NotNull Disposable parentDisposable,
|
@NotNull Disposable parentDisposable,
|
||||||
|
@NotNull CompilerConfiguration configuration,
|
||||||
@NotNull List<String> configFilePaths
|
@NotNull List<String> configFilePaths
|
||||||
) {
|
) {
|
||||||
JavaCoreApplicationEnvironment applicationEnvironment = new JavaCoreApplicationEnvironment(parentDisposable);
|
JavaCoreApplicationEnvironment applicationEnvironment = new JavaCoreApplicationEnvironment(parentDisposable);
|
||||||
|
|
||||||
for (String config : configFilePaths) {
|
for (String configPath : configFilePaths) {
|
||||||
registerApplicationExtensionPointsAndExtensionsFrom(config);
|
registerApplicationExtensionPointsAndExtensionsFrom(configuration, configPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
registerApplicationServicesForCLI(applicationEnvironment);
|
registerApplicationServicesForCLI(applicationEnvironment);
|
||||||
@@ -160,9 +163,10 @@ public class JetCoreEnvironment {
|
|||||||
return applicationEnvironment;
|
return applicationEnvironment;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void registerApplicationExtensionPointsAndExtensionsFrom(String configFilePath) {
|
private static void registerApplicationExtensionPointsAndExtensionsFrom(@NotNull CompilerConfiguration configuration, @NotNull String configFilePath) {
|
||||||
IdeaPluginDescriptorImpl descriptor;
|
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()) {
|
if (jar.isFile()) {
|
||||||
descriptor = PluginManagerCoreProxy.loadDescriptorFromJar(jar, configFilePath);
|
descriptor = PluginManagerCoreProxy.loadDescriptorFromJar(jar, configFilePath);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user