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 04926cb3d11..4a0c58824f8 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. + * 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. @@ -19,8 +19,8 @@ package org.jetbrains.kotlin.cli.js; import com.intellij.openapi.Disposable; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtilCore; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ExceptionUtil; import com.intellij.util.SmartList; @@ -46,8 +46,6 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser; import org.jetbrains.kotlin.config.*; import org.jetbrains.kotlin.incremental.components.LookupTracker; -import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider; -import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumer; import org.jetbrains.kotlin.incremental.js.TranslationResultValue; import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS; import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult; @@ -58,9 +56,11 @@ import org.jetbrains.kotlin.js.config.SourceMapSourceEmbedding; import org.jetbrains.kotlin.js.facade.K2JSTranslator; import org.jetbrains.kotlin.js.facade.MainCallParameters; import org.jetbrains.kotlin.js.facade.TranslationResult; +import org.jetbrains.kotlin.js.sourceMap.SourceFilePathResolver; import org.jetbrains.kotlin.js.facade.TranslationUnit; import org.jetbrains.kotlin.js.facade.exceptions.TranslationException; -import org.jetbrains.kotlin.js.sourceMap.SourceFilePathResolver; +import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider; +import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumer; import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus; import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.serialization.js.ModuleKind; @@ -71,6 +71,7 @@ import org.jetbrains.kotlin.utils.StringsKt; import java.io.File; import java.io.IOException; +import java.util.Arrays; import java.util.*; import java.util.stream.Collectors; 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 415f5e0c7fb..311bfacc133 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. + * Copyright 2010-2016 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. @@ -24,23 +24,20 @@ import org.jetbrains.kotlin.cli.common.CLITool 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.common.messages.CompilerMessageSeverity.* -import org.jetbrains.kotlin.cli.common.messages.FilteringMessageCollector -import org.jetbrains.kotlin.cli.common.messages.MessageCollector -import org.jetbrains.kotlin.cli.common.messages.MessageUtil -import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil 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.JvmClasspathRoot -import org.jetbrains.kotlin.cli.jvm.config.JvmModulePathRoot -import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoot -import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots +import org.jetbrains.kotlin.cli.jvm.config.* import org.jetbrains.kotlin.cli.jvm.modules.CoreJrtFileSystem import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser import org.jetbrains.kotlin.cli.jvm.repl.ReplFromTerminal import org.jetbrains.kotlin.codegen.CompilationException +import org.jetbrains.kotlin.compiler.plugin.CliOptionProcessingException +import org.jetbrains.kotlin.compiler.plugin.PluginCliOptionProcessingException +import org.jetbrains.kotlin.compiler.plugin.cliPluginUsageString import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.javac.JavacWrapper @@ -68,8 +65,7 @@ class K2JVMCompiler : CLICompiler() { PerformanceCounter.setTimeCounterEnabled(arguments.reportPerf) val messageCollector = configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) - - configureJdkHome(arguments, configuration, messageCollector).let { + setupJdkClasspathRoots(arguments, configuration, messageCollector).let { if (it != OK) return it } @@ -402,31 +398,42 @@ class K2JVMCompiler : CLICompiler() { } } - private fun configureJdkHome(arguments: K2JVMCompilerArguments, configuration: CompilerConfiguration, messageCollector: MessageCollector): ExitCode { - if (arguments.noJdk) { - configuration.put(JVMConfigurationKeys.NO_JDK, true) - - if (arguments.jdkHome != null) { - messageCollector.report(STRONG_WARNING, "The '-jdk-home' option is ignored because '-no-jdk' is specified") - } - return OK - } - - if (arguments.jdkHome != null) { - val jdkHome = File(arguments.jdkHome) - if (!jdkHome.exists()) { - messageCollector.report(ERROR, "JDK home directory does not exist: $jdkHome") - return COMPILATION_ERROR + private fun setupJdkClasspathRoots(arguments: K2JVMCompilerArguments, configuration: CompilerConfiguration, messageCollector: MessageCollector): ExitCode { + try { + if (arguments.noJdk) { + if (arguments.jdkHome != null) { + messageCollector.report(STRONG_WARNING, "The '-jdk-home' option is ignored because '-no-jdk' is specified") + } + return OK } - messageCollector.report(LOGGING, "Using JDK home directory $jdkHome") + val (jdkHome, classesRoots) = if (arguments.jdkHome != null) { + val jdkHome = File(arguments.jdkHome) + if (!jdkHome.exists()) { + messageCollector.report(ERROR, "JDK home directory does not exist: $jdkHome") + return COMPILATION_ERROR + } + messageCollector.report(LOGGING, "Using JDK home directory $jdkHome") + jdkHome to PathUtil.getJdkClassesRoots(jdkHome) + } + else { + File(System.getProperty("java.home")) to PathUtil.getJdkClassesRootsFromCurrentJre() + } configuration.put(JVMConfigurationKeys.JDK_HOME, jdkHome) - } - else { - configuration.put(JVMConfigurationKeys.JDK_HOME, PathUtil.getJavaHome()) - } + if (!CoreJrtFileSystem.isModularJdk(jdkHome)) { + configuration.addJvmClasspathRoots(classesRoots) + if (classesRoots.isEmpty()) { + messageCollector.report(ERROR, "No class roots are found in the JDK path: $jdkHome") + return COMPILATION_ERROR + } + } + } + catch (t: Throwable) { + MessageCollectorUtil.reportException(messageCollector, t) + return INTERNAL_ERROR + } return OK } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/EnvironmentConfigFiles.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/EnvironmentConfigFiles.java index 0f995a59f1b..137a5705d39 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/EnvironmentConfigFiles.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/EnvironmentConfigFiles.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. + * 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. @@ -23,7 +23,6 @@ public enum EnvironmentConfigFiles { JVM_CONFIG_FILES("extensions/common.xml", "extensions/kotlin2jvm.xml"), JS_CONFIG_FILES("extensions/common.xml", "extensions/kotlin2js.xml"), NATIVE_CONFIG_FILES("extensions/common.xml"), - METADATA_CONFIG_FILES("extensions/common.xml"), EMPTY(); private final List files; diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt index 7fdf4605aa8..0d08b2263f5 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt @@ -151,7 +151,7 @@ class KotlinCoreEnvironment private constructor( private val classpathRootsResolver: ClasspathRootsResolver private val initialRoots: List - val configuration: CompilerConfiguration = configuration.apply { setupJdkClasspathRoots(configFiles) }.copy() + val configuration: CompilerConfiguration = configuration.copy() init { PersistentFSConstants.setMaxIntellisenseFileSize(FileUtilRt.LARGE_FOR_CONTENT_LOADING) @@ -176,7 +176,6 @@ class KotlinCoreEnvironment private constructor( project.registerService(ModuleVisibilityManager::class.java, CliModuleVisibilityManagerImpl(configFiles == EnvironmentConfigFiles.JVM_CONFIG_FILES)) registerProjectServicesForCLI(projectEnvironment) - val messageCollector = configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) registerProjectServices(projectEnvironment, messageCollector) @@ -547,32 +546,5 @@ class KotlinCoreEnvironment private constructor( */ } - - private fun CompilerConfiguration.setupJdkClasspathRoots(configFiles: EnvironmentConfigFiles) { - if (getBoolean(JVMConfigurationKeys.NO_JDK)) return - - val jvmTarget = configFiles == EnvironmentConfigFiles.JVM_CONFIG_FILES - if (!jvmTarget) return - - val jdkHome = get(JVMConfigurationKeys.JDK_HOME) - val (javaRoot, classesRoots) = if (jdkHome == null) { - val javaHome = PathUtil.getJavaHome() - put(JVMConfigurationKeys.JDK_HOME, javaHome) - - javaHome to PathUtil.getJdkClassesRootsFromCurrentJre() - } - else { - jdkHome to PathUtil.getJdkClassesRoots(jdkHome) - } - - if (!CoreJrtFileSystem.isModularJdk(javaRoot)) { - addJvmClasspathRoots(classesRoots) - if (classesRoots.isEmpty()) { - val messageCollector = get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) - messageCollector?.report(ERROR, "No class roots are found in the JDK path: $jdkHome") - } - } - } - } } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataCompiler.kt index 54db1c42c20..38838c261bd 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataCompiler.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. + * Copyright 2010-2016 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. @@ -71,7 +71,7 @@ class K2MetadataCompiler : CLICompiler() { configuration.put(CLIConfigurationKeys.METADATA_DESTINATION_DIRECTORY, File(destination)) } - val environment = KotlinCoreEnvironment.createForProduction(rootDisposable, configuration, EnvironmentConfigFiles.METADATA_CONFIG_FILES) + val environment = KotlinCoreEnvironment.createForProduction(rootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) if (environment.getSourceFiles().isEmpty()) { if (arguments.version) { diff --git a/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt b/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt index ff82866b3c4..00e6bda7f99 100644 --- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt +++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt @@ -50,6 +50,7 @@ open class KotlinJvmReplService( ) : ReplCompileAction, ReplCheckAction, CreateReplStageStateAction { protected val configuration = CompilerConfiguration().apply { + addJvmClasspathRoots(PathUtil.getJdkClassesRootsFromCurrentJre()) addJvmClasspathRoots(PathUtil.kotlinPathsForCompiler.let { listOf(it.stdlibPath, it.reflectPath, it.scriptRuntimePath) }) addJvmClasspathRoots(templateClasspath) put(CommonConfigurationKeys.MODULE_NAME, "kotlin-script") diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java b/compiler/frontend.java/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java index 614762c1e42..9ed993297e8 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. + * Copyright 2010-2016 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. @@ -42,9 +42,6 @@ public class JVMConfigurationKeys { public static final CompilerConfigurationKey JDK_HOME = CompilerConfigurationKey.create("jdk home"); - public static final CompilerConfigurationKey NO_JDK = - CompilerConfigurationKey.create("no jdk"); - public static final CompilerConfigurationKey> SCRIPT_DEFINITIONS = CompilerConfigurationKey.create("script definitions"); diff --git a/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestUtils.java b/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestUtils.java index f5adc89da02..05a3c78c064 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestUtils.java +++ b/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. + * 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. @@ -488,20 +488,17 @@ public class KotlinTestUtils { JvmContentRootsKt.addJavaSourceRoots(configuration, javaSource); if (jdkKind == TestJdkKind.MOCK_JDK) { JvmContentRootsKt.addJvmClasspathRoot(configuration, findMockJdkRtJar()); - configuration.put(JVMConfigurationKeys.NO_JDK, true); } else if (jdkKind == TestJdkKind.MODIFIED_MOCK_JDK) { JvmContentRootsKt.addJvmClasspathRoot(configuration, findMockJdkRtModified()); - configuration.put(JVMConfigurationKeys.NO_JDK, true); } else if (jdkKind == TestJdkKind.ANDROID_API) { JvmContentRootsKt.addJvmClasspathRoot(configuration, findAndroidApiJar()); - configuration.put(JVMConfigurationKeys.NO_JDK, true); } else if (jdkKind == TestJdkKind.FULL_JDK_6) { String jdk6 = System.getenv("JDK_16"); assert jdk6 != null : "Environment variable JDK_16 is not set"; - configuration.put(JVMConfigurationKeys.JDK_HOME, new File(jdk6)); + JvmContentRootsKt.addJvmClasspathRoots(configuration, PathUtil.getJdkClassesRootsFromJre(getJreHome(jdk6))); } else if (jdkKind == TestJdkKind.FULL_JDK_9) { File home = getJdk9HomeIfPossible(); @@ -512,6 +509,9 @@ public class KotlinTestUtils { else if (SystemInfo.IS_AT_LEAST_JAVA9) { configuration.put(JVMConfigurationKeys.JDK_HOME, new File(System.getProperty("java.home"))); } + else { + JvmContentRootsKt.addJvmClasspathRoots(configuration, PathUtil.getJdkClassesRootsFromCurrentJre()); + } if (configurationKind.getWithRuntime()) { JvmContentRootsKt.addJvmClasspathRoot(configuration, ForTestCompileRuntime.runtimeJarForTests()); diff --git a/compiler/util/src/org/jetbrains/kotlin/utils/PathUtil.kt b/compiler/util/src/org/jetbrains/kotlin/utils/PathUtil.kt index cc523e0c73c..a19987e5b4c 100644 --- a/compiler/util/src/org/jetbrains/kotlin/utils/PathUtil.kt +++ b/compiler/util/src/org/jetbrains/kotlin/utils/PathUtil.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. + * Copyright 2010-2016 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. @@ -121,8 +121,4 @@ object PathUtil { @JvmStatic fun getJdkClassesRoots(jdkHome: File): List = JavaSdkUtil.getJdkClassesRoots(jdkHome, false) - - @JvmStatic - fun getJavaHome(): File = - File(System.getProperty("java.home")) }