From 432d500c40560bfacf060a0e2346770e52569837 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Mon, 24 Jun 2019 19:54:00 +0200 Subject: [PATCH] Fix custom script definition cashing and script validity check: - reorder initialization logic, so that script definitions are requested only after plugins loading - clear definitions cache after adding explicit definitions or sources #KT-32206 fixed #KT-32169 fixed Note: any of these modification fix the problem alone, but the second may prevent other similar problems, while the first fixes actual logic of the script validity checks as well. --- .../plugin/JvmCliScriptEvaluationExtension.kt | 11 ++++++----- .../plugin/definitions/CliScriptDefinitionProvider.kt | 2 ++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/JvmCliScriptEvaluationExtension.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/JvmCliScriptEvaluationExtension.kt index e2fbc8f1b52..b88de350c08 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/JvmCliScriptEvaluationExtension.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/JvmCliScriptEvaluationExtension.kt @@ -40,6 +40,12 @@ class JvmCliScriptEvaluationExtension : ScriptEvaluationExtension { return COMPILATION_ERROR } val sourcePath = arguments.freeArgs.first() + + configuration.addKotlinSourceRoot(sourcePath) + configuration.put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true) + val coreEnvironment = + KotlinCoreEnvironment.createForProduction(projectEnvironment, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) + val scriptFile = File(sourcePath) if (scriptFile.isDirectory || !scriptDefinitionProvider.isScript(scriptFile.name)) { val extensionHint = @@ -48,14 +54,9 @@ class JvmCliScriptEvaluationExtension : ScriptEvaluationExtension { messageCollector.report(ERROR, "Specify path to the script file$extensionHint as the first argument") return COMPILATION_ERROR } - configuration.addKotlinSourceRoot(sourcePath) - configuration.put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true) val scriptArgs = arguments.freeArgs.subList(1, arguments.freeArgs.size) - val coreEnvironment = - KotlinCoreEnvironment.createForProduction(projectEnvironment, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) - return KotlinToJVMBytecodeCompiler.compileAndExecuteScript(coreEnvironment, scriptArgs) } } \ No newline at end of file diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/definitions/CliScriptDefinitionProvider.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/definitions/CliScriptDefinitionProvider.kt index 28b33009c47..bbeb37d7d21 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/definitions/CliScriptDefinitionProvider.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/definitions/CliScriptDefinitionProvider.kt @@ -28,6 +28,7 @@ open class CliScriptDefinitionProvider : LazyScriptDefinitionProvider() { definitions.addAll(withoutStdDef) // TODO: consider reporting an error when several default definitions are supplied defaultDefinition = stdDef.firstOrNull() + clearCache() } } @@ -37,6 +38,7 @@ open class CliScriptDefinitionProvider : LazyScriptDefinitionProvider() { for (it in newSources) { definitionsFromSources.add(it.definitions.constrainOnce()) } + clearCache() } }