From 5c8ca0ca9b2aaa714ec4be2ef63be36133e76b1e Mon Sep 17 00:00:00 2001 From: Victor Petukhov Date: Tue, 15 Feb 2022 16:27:21 +0300 Subject: [PATCH] [Compiler CLI] Use reading language version settings from environment only if the resource is presented or flag is set --- .../src/org/jetbrains/kotlin/cli/common/CLITool.kt | 11 ++++++++++- .../cli/src/org/jetbrains/kotlin/cli/common/utils.kt | 7 ++++++- .../kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt | 5 +---- .../org/jetbrains/kotlin/cli/AbstractCliTest.java | 1 + .../kotlin/config/LanguageVersionSettings.kt | 4 ++++ 5 files changed, 22 insertions(+), 6 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt index aa41ca0d447..f755fd1284f 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt @@ -26,7 +26,9 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.INFO import org.jetbrains.kotlin.cli.jvm.compiler.CompileEnvironmentException import org.jetbrains.kotlin.cli.jvm.compiler.setupIdeaStandaloneExecution import org.jetbrains.kotlin.config.KotlinCompilerVersion +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.Services +import org.jetbrains.kotlin.utils.PathUtil import java.io.PrintStream import java.net.URL import java.net.URLConnection @@ -48,7 +50,11 @@ abstract class CLITool { ): ExitCode { val arguments = createArguments() parseCommandLineArguments(args.asList(), arguments) - parseCommandLineArgumentsFromEnvironment(arguments) + + if (isReadingSettingsFromEnvironmentAllowed) { + parseCommandLineArgumentsFromEnvironment(arguments) + } + val collector = PrintingMessageCollector(errStream, messageRenderer, arguments.verbose) try { @@ -128,6 +134,9 @@ abstract class CLITool { abstract fun executableScriptFileName(): String + var isReadingSettingsFromEnvironmentAllowed: Boolean = + this::class.java.classLoader.getResource(LanguageVersionSettings.RESOURCE_NAME_TO_ALLOW_READING_FROM_ENVIRONMENT) != null + companion object { private fun defaultMessageRenderer(): MessageRenderer = when (System.getProperty(MessageRenderer.PROPERTY_KEY)) { diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/utils.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/utils.kt index c683bf731b9..2c1038ace2c 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/utils.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/utils.kt @@ -27,7 +27,11 @@ import org.jetbrains.kotlin.name.isSubpackageOf import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.util.Logger import org.jetbrains.kotlin.utils.KotlinPaths +import java.io.ByteArrayOutputStream import java.io.File +import java.util.zip.ZipEntry +import java.util.zip.ZipFile +import java.util.zip.ZipOutputStream import kotlin.system.exitProcess fun incrementalCompilationIsEnabled(arguments: CommonCompilerArguments): Boolean { @@ -97,4 +101,5 @@ fun MessageCollector.toLogger(): Logger = override fun log(message: String) { report(CompilerMessageSeverity.LOGGING, message) } - } \ No newline at end of file + } + 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 bcad1246632..183470a42eb 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 @@ -54,9 +54,7 @@ import org.jetbrains.kotlin.asJava.LightClassGenerationSupport import org.jetbrains.kotlin.asJava.classes.FacadeCache import org.jetbrains.kotlin.asJava.finder.JavaElementFinder import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension -import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys -import org.jetbrains.kotlin.cli.common.CliModuleVisibilityManagerImpl -import org.jetbrains.kotlin.cli.common.CompilerSystemProperties +import org.jetbrains.kotlin.cli.common.* import org.jetbrains.kotlin.cli.common.config.ContentRoot import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot import org.jetbrains.kotlin.cli.common.config.kotlinSourceRoots @@ -66,7 +64,6 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.STRONG_WARNING import org.jetbrains.kotlin.cli.common.messages.MessageCollector -import org.jetbrains.kotlin.cli.common.toBooleanLenient import org.jetbrains.kotlin.cli.jvm.compiler.jarfs.FastJarFileSystem import org.jetbrains.kotlin.cli.jvm.config.* import org.jetbrains.kotlin.cli.jvm.index.* diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/cli/AbstractCliTest.java b/compiler/tests-common/tests/org/jetbrains/kotlin/cli/AbstractCliTest.java index 944bbfc9091..0b6eb1b902c 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/cli/AbstractCliTest.java +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/cli/AbstractCliTest.java @@ -106,6 +106,7 @@ public abstract class AbstractCliTest extends TestCaseWithTmpdir { File environmentTestConfig = new File(fileName.replaceFirst("\\.args$", ".env")); if (environmentTestConfig.exists()) { + compiler.setReadingSettingsFromEnvironmentAllowed(true); CompilerSystemProperties.LANGUAGE_VERSION_SETTINGS.setValue(FilesKt.readText(environmentTestConfig, Charsets.UTF_8)); } diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index 1a576dee1e7..52322b92d71 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -464,6 +464,10 @@ interface LanguageVersionSettings { // Please do not use this to enable/disable specific features/checks. Instead add a new LanguageFeature entry and call supportsFeature val languageVersion: LanguageVersion + + companion object { + const val RESOURCE_NAME_TO_ALLOW_READING_FROM_ENVIRONMENT = "META-INF/allow-configuring-from-environment" + } } class LanguageVersionSettingsImpl @JvmOverloads constructor(