From 01eca8bac8cc34eb6a91dc1e253c22e72165c0cc Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Tue, 21 Aug 2018 15:26:39 +0300 Subject: [PATCH] Clean up properties collection --- .../AbstractCustomScriptCodegenTest.kt | 2 +- .../core/script/ScriptDefinitionsManager.kt | 3 +- .../examples/jvm/resolve/maven/scriptDef.kt | 15 +++-- .../script/examples/jvm/simple/scriptDef.kt | 4 +- .../annotations/scriptAnnotations.kt | 11 ---- .../experimental/api/scriptCompilation.kt | 3 +- .../host/configurationFromTemplate.kt | 23 ++++---- .../experimental/util/propertiesCollection.kt | 58 ++++--------------- .../jvmhost/impl/KJVMCompilerImpl.kt | 37 ++++++------ .../experimental/jvmhost/impl/jvmHostUtil.kt | 4 +- .../experimental/jvm/jvmScriptCompilation.kt | 6 +- .../jvm/jvmScriptingHostConfiguration.kt | 6 +- ...LazyScriptDefinitionFromDiscoveredClass.kt | 12 ++-- .../definitions/TestScriptWithReceivers.kt | 6 +- .../TestScriptWithSimpleEnvVars.kt | 4 +- 15 files changed, 66 insertions(+), 128 deletions(-) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/AbstractCustomScriptCodegenTest.kt b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractCustomScriptCodegenTest.kt index 160855ec81e..4eec87c821d 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/AbstractCustomScriptCodegenTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractCustomScriptCodegenTest.kt @@ -123,7 +123,7 @@ abstract class AbstractCustomScriptCodegenTest : CodegenTestCase() { object TestScriptWithReceiversConfiguration : ScriptCompilationConfiguration( { - implicitReceivers() + implicitReceivers(String::class) }) @Suppress("unused") diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt index dd68f1693e1..5e7ec6cb7ad 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt @@ -208,8 +208,7 @@ fun loadDefinitionsFromTemplates( ) } template.annotations.firstIsInstanceOrNull() != null -> { - val hostConfiguration = ScriptingHostConfiguration { - include(defaultJvmScriptingEnvironment) + val hostConfiguration = ScriptingHostConfiguration(defaultJvmScriptingEnvironment) { configurationDependencies(JvmDependency(classpath)) } KotlinScriptDefinitionAdapterFromNewAPI( diff --git a/libraries/examples/scripting/jvm-maven-deps/script/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/scriptDef.kt b/libraries/examples/scripting/jvm-maven-deps/script/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/scriptDef.kt index f2cc057e062..522bba38c3e 100644 --- a/libraries/examples/scripting/jvm-maven-deps/script/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/scriptDef.kt +++ b/libraries/examples/scripting/jvm-maven-deps/script/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/scriptDef.kt @@ -29,8 +29,7 @@ abstract class MyScriptWithMavenDeps { object MyScriptCompilationConfiguration : ScriptCompilationConfiguration( { - defaultImports() - defaultImports(Repository::class) + defaultImports(DependsOn::class, Repository::class) jvm { dependenciesFromCurrentContext( "scripting-jvm-maven-deps", // script library jar name @@ -49,9 +48,9 @@ object MyScriptCompilationConfiguration : ScriptCompilationConfiguration( private val resolver = FilesAndMavenResolver() -fun myConfigureOnAnnotations(script: ScriptConfigurationRefinementContext): ResultWithDiagnostics { - val annotations = script.collectedData?.get(ScriptCollectedData.foundAnnotations)?.takeIf { it.isNotEmpty() } - ?: return null.asSuccess() +fun myConfigureOnAnnotations(context: ScriptConfigurationRefinementContext): ResultWithDiagnostics { + val annotations = context.collectedData?.get(ScriptCollectedData.foundAnnotations)?.takeIf { it.isNotEmpty() } + ?: return context.compilationConfiguration.asSuccess() val scriptContents = object : ScriptContents { override val annotations: Iterable = annotations override val file: File? = null @@ -63,10 +62,10 @@ fun myConfigureOnAnnotations(script: ScriptConfigurationRefinementContext): Resu } return try { val newDepsFromResolver = resolver.resolve(scriptContents, emptyMap(), ::report, null).get() - ?: return null.asSuccess(diagnostics) + ?: return context.compilationConfiguration.asSuccess(diagnostics) val resolvedClasspath = newDepsFromResolver.classpath.toList().takeIf { it.isNotEmpty() } - ?: return null.asSuccess(diagnostics) - ScriptCompilationConfiguration(script.compilationConfiguration) { + ?: return context.compilationConfiguration.asSuccess(diagnostics) + ScriptCompilationConfiguration(context.compilationConfiguration) { dependencies.append(JvmDependency(resolvedClasspath)) }.asSuccess(diagnostics) } catch (e: Throwable) { diff --git a/libraries/examples/scripting/jvm-simple-script/script/src/org/jetbrains/kotlin/script/examples/jvm/simple/scriptDef.kt b/libraries/examples/scripting/jvm-simple-script/script/src/org/jetbrains/kotlin/script/examples/jvm/simple/scriptDef.kt index f321356d5d7..52ce9413476 100644 --- a/libraries/examples/scripting/jvm-simple-script/script/src/org/jetbrains/kotlin/script/examples/jvm/simple/scriptDef.kt +++ b/libraries/examples/scripting/jvm-simple-script/script/src/org/jetbrains/kotlin/script/examples/jvm/simple/scriptDef.kt @@ -6,10 +6,8 @@ package org.jetbrains.kotlin.script.examples.jvm.simple import kotlin.script.experimental.annotations.KotlinScript -import kotlin.script.experimental.annotations.KotlinScriptFileExtension -@KotlinScript -@KotlinScriptFileExtension("simplescript.kts") +@KotlinScript(extension = "simplescript.kts") abstract class MyScript { // abstract fun body(vararg args: String): Int } diff --git a/libraries/scripting/common/src/kotlin/script/experimental/annotations/scriptAnnotations.kt b/libraries/scripting/common/src/kotlin/script/experimental/annotations/scriptAnnotations.kt index 7b4c689a6f4..cf458c87f13 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/annotations/scriptAnnotations.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/annotations/scriptAnnotations.kt @@ -23,14 +23,3 @@ annotation class KotlinScript( val compilationConfiguration: KClass = ScriptCompilationConfiguration.Default::class // object or class filled in 0-ary constructor ) -@Target(AnnotationTarget.CLASS) -@Retention(AnnotationRetention.RUNTIME) -annotation class KotlinScriptFileExtension( - val extension: String -) - -@Target(AnnotationTarget.CLASS) -@Retention(AnnotationRetention.RUNTIME) -annotation class KotlinScriptProperties( - val compilationConfiguration: KClass // object or class filled in 0-ary constructor -) diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt index 920c9cf4b1a..0cb25502ad6 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt @@ -98,7 +98,8 @@ class RefineConfigurationBuilder : PropertiesCollection.Builder() { } } -typealias RefineScriptCompilationConfigurationHandler = (ScriptConfigurationRefinementContext) -> ResultWithDiagnostics +typealias RefineScriptCompilationConfigurationHandler = + (ScriptConfigurationRefinementContext) -> ResultWithDiagnostics // to make it "hasheable" for cashing class RefineConfigurationBeforeParsingData( diff --git a/libraries/scripting/common/src/kotlin/script/experimental/host/configurationFromTemplate.kt b/libraries/scripting/common/src/kotlin/script/experimental/host/configurationFromTemplate.kt index 1789d70b3fd..2d6fe931d29 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/host/configurationFromTemplate.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/host/configurationFromTemplate.kt @@ -7,8 +7,6 @@ package kotlin.script.experimental.host import kotlin.reflect.KClass import kotlin.script.experimental.annotations.KotlinScript -import kotlin.script.experimental.annotations.KotlinScriptFileExtension -import kotlin.script.experimental.annotations.KotlinScriptProperties import kotlin.script.experimental.api.* private const val ERROR_MSG_PREFIX = "Unable to construct script definition: " @@ -37,22 +35,23 @@ fun createScriptCompilationConfigurationFromAnnotatedBaseClass( val mainAnnotation = baseClass.findAnnotation() ?: throw IllegalArgumentException("${ERROR_MSG_PREFIX}Expecting KotlinScript annotation on the $baseClass") - fun scriptingPropsInstance(kclass: KClass): ScriptCompilationConfiguration = try { + fun scriptConfigInstance(kclass: KClass): ScriptCompilationConfiguration = try { kclass.objectInstance ?: kclass.createInstance() } catch (e: Throwable) { throw IllegalArgumentException(ILLEGAL_CONFIG_ANN_ARG, e) } - return ScriptCompilationConfiguration { - baseClass(loadedBaseClassType) - fileExtension(baseClass.findAnnotation()?.extension ?: mainAnnotation.extension) - displayName(mainAnnotation.name) - - include(scriptingPropsInstance(mainAnnotation.compilationConfiguration)) - - baseClass.java.annotations.filterIsInstance(KotlinScriptProperties::class.java).forEach { ann -> - include(scriptingPropsInstance(ann.compilationConfiguration)) + return ScriptCompilationConfiguration(scriptConfigInstance(mainAnnotation.compilationConfiguration)) { + if (baseClass() == null) { + baseClass(loadedBaseClassType) } + if (fileExtension() == null) { + fileExtension(mainAnnotation.extension) + } + if (displayName() == null) { + displayName(mainAnnotation.name) + } + body() } } diff --git a/libraries/scripting/common/src/kotlin/script/experimental/util/propertiesCollection.kt b/libraries/scripting/common/src/kotlin/script/experimental/util/propertiesCollection.kt index 8d9a92a2b22..f8caf33c318 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/util/propertiesCollection.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/util/propertiesCollection.kt @@ -10,7 +10,7 @@ import kotlin.reflect.KProperty import kotlin.reflect.KType import kotlin.script.experimental.api.KotlinType -open class PropertiesCollection(val properties: Map, Any> = emptyMap()) { +open class PropertiesCollection(private val properties: Map, Any> = emptyMap()) { data class Key(val name: String, val defaultValue: T? = null) @@ -27,6 +27,9 @@ open class PropertiesCollection(val properties: Map, Any> = emptyMap()) { operator fun get(key: PropertiesCollection.Key): T? = properties[key]?.let { it as T } ?: key.defaultValue + @Suppress("UNCHECKED_CAST") + fun getNoDefault(key: PropertiesCollection.Key): T? = + properties[key]?.let { it as T } companion object { fun key(defaultValue: T? = null) = PropertyKeyDelegate(defaultValue) @@ -41,7 +44,8 @@ open class PropertiesCollection(val properties: Map, Any> = emptyMap()) { baseProperties.forEach { putAll(it.properties) } } - // generic builder for all properties + // generic for all properties + operator fun PropertiesCollection.Key.invoke(v: T) { data[this] = v } @@ -49,7 +53,7 @@ open class PropertiesCollection(val properties: Map, Any> = emptyMap()) { // generic for lists operator fun PropertiesCollection.Key>.invoke(vararg vals: T) { - append(vals.asIterable()) + data[this] = vals.toList() } // generic for maps: @@ -60,21 +64,11 @@ open class PropertiesCollection(val properties: Map, Any> = emptyMap()) { // for strings and list of strings that could be converted from other types - @JvmName("invoke_string_fqn_from_generic") - inline operator fun PropertiesCollection.Key.invoke() { - data[this] = K::class.java.name - } - @JvmName("invoke_string_fqn_from_reflected_class") operator fun PropertiesCollection.Key.invoke(kclass: KClass<*>) { data[this] = kclass.java.name } - @JvmName("invoke_string_list_fqn_from_generic") - inline operator fun PropertiesCollection.Key>.invoke() { - append(K::class.java.name) - } - @JvmName("invoke_string_list_fqn_from_reflected_class") operator fun PropertiesCollection.Key>.invoke(vararg kclasses: KClass<*>) { append(kclasses.map { it.java.name }) @@ -82,10 +76,6 @@ open class PropertiesCollection(val properties: Map, Any> = emptyMap()) { // for KotlinType: - inline operator fun PropertiesCollection.Key.invoke() { - data[this] = KotlinType(K::class) - } - operator fun PropertiesCollection.Key.invoke(kclass: KClass<*>) { data[this] = KotlinType(kclass) } @@ -100,11 +90,6 @@ open class PropertiesCollection(val properties: Map, Any> = emptyMap()) { // for list of KotlinTypes - @JvmName("invoke_kotlintype_list_from_generic") - inline operator fun PropertiesCollection.Key>.invoke() { - append(KotlinType(K::class)) - } - operator fun PropertiesCollection.Key>.invoke(vararg classes: KClass<*>) { append(classes.map { KotlinType(it) }) } @@ -141,7 +126,9 @@ open class PropertiesCollection(val properties: Map, Any> = emptyMap()) { } @Suppress("UNCHECKED_CAST") - private operator fun get(key: PropertiesCollection.Key): T? = data[key]?.let { it as T } + operator fun get(key: PropertiesCollection.Key): T? = data[key]?.let { it as T } + + operator fun PropertiesCollection.Key.invoke(): T? = get(this) // appenders to list and map properties @@ -167,39 +154,14 @@ open class PropertiesCollection(val properties: Map, Any> = emptyMap()) { data[this] = newValues } - // include other properties - fun include(other: PropertiesCollection?) { - other?.properties?.let { data.putAll(it) } - } - // include another builder operator fun T.invoke(body: T.() -> Unit) { this.body() this@Builder.data.putAll(this.data) } - - // a class for extending properties - interface BuilderExtension { - fun get(): T - } - - // include another builder extension - operator fun BuilderExtension.invoke(body: T.() -> Unit) { - val builder = this.get().apply(body) - this@Builder.data.putAll(builder.data) - } } } fun PropertiesCollection.getOrError(key: PropertiesCollection.Key): T = get(key) ?: throw IllegalArgumentException("Unknown key $key") -@Suppress("UNCHECKED_CAST") -fun getFirstFromChainOrNull(key: PropertiesCollection.Key, vararg propertyCollections: PropertiesCollection?): T? { - for (collection in propertyCollections) { - val value = collection?.properties?.get(key) - if (value != null) return value as T - } - return key.defaultValue -} - diff --git a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJVMCompilerImpl.kt b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJVMCompilerImpl.kt index b2a05197691..fdef3fb9a6e 100644 --- a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJVMCompilerImpl.kt +++ b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJVMCompilerImpl.kt @@ -48,7 +48,6 @@ import kotlin.script.experimental.jvm.jvm import kotlin.script.experimental.jvmhost.JvmScriptEvaluationEnvironment import kotlin.script.experimental.jvmhost.KJvmCompilerProxy import kotlin.script.experimental.jvmhost.baseClassLoader -import kotlin.script.experimental.util.getFirstFromChainOrNull import kotlin.script.experimental.util.getOrError class KJvmCompiledScript( @@ -57,23 +56,24 @@ class KJvmCompiledScript( private val scriptClassFQName: String ) : CompiledScript { - override suspend fun instantiate(scriptEvaluationConfiguration: ScriptEvaluationConfiguration?): ResultWithDiagnostics = try { - val baseClassLoader = scriptEvaluationConfiguration?.get(JvmScriptEvaluationEnvironment.baseClassLoader) - ?: Thread.currentThread().contextClassLoader - val dependencies = compilationConfiguration[ScriptCompilationConfiguration.dependencies] - ?.flatMap { (it as? JvmDependency)?.classpath?.map { it.toURI().toURL() } ?: emptyList() } - // TODO: previous dependencies and classloaders should be taken into account here - val classLoaderWithDeps = - if (dependencies == null) baseClassLoader - else URLClassLoader(dependencies.toTypedArray(), baseClassLoader) - val classLoader = GeneratedClassLoader(generationState.factory, classLoaderWithDeps) + override suspend fun instantiate(scriptEvaluationConfiguration: ScriptEvaluationConfiguration?): ResultWithDiagnostics = + try { + val baseClassLoader = scriptEvaluationConfiguration?.get(JvmScriptEvaluationEnvironment.baseClassLoader) + ?: Thread.currentThread().contextClassLoader + val dependencies = compilationConfiguration[ScriptCompilationConfiguration.dependencies] + ?.flatMap { (it as? JvmDependency)?.classpath?.map { it.toURI().toURL() } ?: emptyList() } + // TODO: previous dependencies and classloaders should be taken into account here + val classLoaderWithDeps = + if (dependencies == null) baseClassLoader + else URLClassLoader(dependencies.toTypedArray(), baseClassLoader) + val classLoader = GeneratedClassLoader(generationState.factory, classLoaderWithDeps) - val clazz = classLoader.loadClass(scriptClassFQName) - (clazz as? ScriptBase)?.asSuccess() - ?: ResultWithDiagnostics.Failure("Compiled class expected to be a subclass of the , but got ${clazz.javaClass.name}".asErrorDiagnostics()) - } catch (e: Throwable) { - ResultWithDiagnostics.Failure(ScriptDiagnostic("Unable to instantiate class $scriptClassFQName", exception = e)) - } + val clazz = classLoader.loadClass(scriptClassFQName) + (clazz as? ScriptBase)?.asSuccess() + ?: ResultWithDiagnostics.Failure("Compiled class expected to be a subclass of the , but got ${clazz.javaClass.name}".asErrorDiagnostics()) + } catch (e: Throwable) { + ResultWithDiagnostics.Failure(ScriptDiagnostic("Unable to instantiate class $scriptClassFQName", exception = e)) + } } class KJvmCompilerImpl(val hostConfiguration: ScriptingHostConfiguration) : KJvmCompilerProxy { @@ -112,7 +112,8 @@ class KJvmCompilerImpl(val hostConfiguration: ScriptingHostConfiguration) : KJvm put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true) var isModularJava = false - getFirstFromChainOrNull(ScriptCompilationConfiguration.jvm.javaHome, updatedConfiguration, hostConfiguration)?.let { + (updatedConfiguration.getNoDefault(ScriptCompilationConfiguration.jvm.javaHome) + ?: hostConfiguration[ScriptingHostConfiguration.jvm.javaHome])?.let { put(JVMConfigurationKeys.JDK_HOME, it) isModularJava = CoreJrtFileSystem.isModularJdk(it) } diff --git a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/jvmHostUtil.kt b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/jvmHostUtil.kt index c70368a8faf..abfb251cd7d 100644 --- a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/jvmHostUtil.kt +++ b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/jvmHostUtil.kt @@ -9,9 +9,7 @@ import kotlin.script.experimental.host.ScriptingHostConfiguration import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment fun ScriptingHostConfiguration.withDefaults(): ScriptingHostConfiguration = - if (this == defaultJvmScriptingEnvironment || defaultJvmScriptingEnvironment.properties.all { - this.properties.containsKey(it.key) - }) { + if (this == defaultJvmScriptingEnvironment) { this } else { ScriptingHostConfiguration(defaultJvmScriptingEnvironment, this) diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptCompilation.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptCompilation.kt index 1f3dc275fec..15a8537722d 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptCompilation.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptCompilation.kt @@ -19,9 +19,7 @@ data class JvmDependency(val classpath: List) : ScriptDependency { interface JvmScriptCompilationConfigurationKeys open class JvmScriptCompilationConfigurationBuilder : PropertiesCollection.Builder(), JvmScriptCompilationConfigurationKeys { - companion object : PropertiesCollection.Builder.BuilderExtension, JvmScriptCompilationConfigurationKeys { - override fun get() = JvmScriptCompilationConfigurationBuilder() - } + companion object : JvmScriptCompilationConfigurationKeys } fun JvmScriptCompilationConfigurationBuilder.dependenciesFromCurrentContext(vararg libraries: String, wholeClasspath: Boolean = false) { @@ -42,5 +40,5 @@ val JvmScriptCompilationConfigurationKeys.javaHome by PropertiesCollection.keyCo @Suppress("unused") val ScriptCompilationConfigurationKeys.jvm - get() = JvmScriptCompilationConfigurationBuilder + get() = JvmScriptCompilationConfigurationBuilder() diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptingHostConfiguration.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptingHostConfiguration.kt index dfb57baa630..4ddc53488b2 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptingHostConfiguration.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptingHostConfiguration.kt @@ -16,16 +16,14 @@ interface JvmScriptingHostConfigurationKeys open class JvmScriptingHostConfigurationBuilder : JvmScriptingHostConfigurationKeys, PropertiesCollection.Builder() { - companion object : PropertiesCollection.Builder.BuilderExtension, JvmScriptingHostConfigurationKeys { - override fun get() = JvmScriptingHostConfigurationBuilder() - } + companion object : JvmScriptingHostConfigurationKeys } val JvmScriptingHostConfigurationKeys.javaHome by PropertiesCollection.key(File(System.getProperty("java.home"))) @Suppress("unused") val ScriptingHostConfigurationKeys.jvm - get() = JvmScriptingHostConfigurationBuilder + get() = JvmScriptingHostConfigurationBuilder() val defaultJvmScriptingEnvironment = ScriptingHostConfiguration { getScriptingClass(JvmGetScriptingClass()) diff --git a/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/LazyScriptDefinitionFromDiscoveredClass.kt b/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/LazyScriptDefinitionFromDiscoveredClass.kt index 69fcc87bc29..e399e388ac0 100644 --- a/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/LazyScriptDefinitionFromDiscoveredClass.kt +++ b/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/LazyScriptDefinitionFromDiscoveredClass.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.MessageCollector import java.io.File import kotlin.script.experimental.annotations.KotlinScript -import kotlin.script.experimental.annotations.KotlinScriptFileExtension import kotlin.script.experimental.api.* import kotlin.script.experimental.host.ScriptingHostConfiguration import kotlin.script.experimental.host.configurationDependencies @@ -37,9 +36,8 @@ class LazyScriptDefinitionFromDiscoveredClass internal constructor( ) : this(loadAnnotationsFromClass(classBytes), className, classpath, messageCollector) override val hostConfiguration: ScriptingHostConfiguration by lazy(LazyThreadSafetyMode.PUBLICATION) { - ScriptingHostConfiguration { - include(defaultJvmScriptingEnvironment) - configurationDependencies(JvmDependency(classpath)) + ScriptingHostConfiguration(defaultJvmScriptingEnvironment) { + configurationDependencies.append(JvmDependency(classpath)) } } @@ -67,10 +65,8 @@ class LazyScriptDefinitionFromDiscoveredClass internal constructor( } override val scriptFileExtensionWithDot: String by lazy(LazyThreadSafetyMode.PUBLICATION) { - val extFromAnn = ( - annotationsFromAsm.find { it.name == KotlinScriptFileExtension::class.simpleName!! }?.args - ?: annotationsFromAsm.find { it.name == KotlinScript::class.simpleName }?.args - )?.find { it.name == "extension" }?.value + val extFromAnn = annotationsFromAsm.find { it.name == KotlinScript::class.simpleName }?.args + ?.find { it.name == "extension" }?.value val ext = extFromAnn ?: scriptCompilationConfiguration.let { it[ScriptCompilationConfiguration.fileExtension] ?: "kts" diff --git a/plugins/scripting/scripting-cli/testData/lazyDefinitions/definitions/TestScriptWithReceivers.kt b/plugins/scripting/scripting-cli/testData/lazyDefinitions/definitions/TestScriptWithReceivers.kt index d69779d3433..24f2267c73f 100644 --- a/plugins/scripting/scripting-cli/testData/lazyDefinitions/definitions/TestScriptWithReceivers.kt +++ b/plugins/scripting/scripting-cli/testData/lazyDefinitions/definitions/TestScriptWithReceivers.kt @@ -3,10 +3,10 @@ import kotlin.script.experimental.annotations.* import kotlin.script.experimental.api.* import kotlin.script.experimental.util.* -object TestScriptWithReceiversDefinition : ScriptDefinition( +object TestScriptWithReceiversDefinition : ScriptCompilationConfiguration( { - implicitReceivers() + implicitReceivers(String::class) }) -@KotlinScript(extension = "1.kts", definition = TestScriptWithReceiversDefinition::class) +@KotlinScript(extension = "1.kts", compilationConfiguration = TestScriptWithReceiversDefinition::class) abstract class TestScriptWithReceivers diff --git a/plugins/scripting/scripting-cli/testData/lazyDefinitions/definitions/TestScriptWithSimpleEnvVars.kt b/plugins/scripting/scripting-cli/testData/lazyDefinitions/definitions/TestScriptWithSimpleEnvVars.kt index 630cf53bb5d..ab2b1d9c4b3 100644 --- a/plugins/scripting/scripting-cli/testData/lazyDefinitions/definitions/TestScriptWithSimpleEnvVars.kt +++ b/plugins/scripting/scripting-cli/testData/lazyDefinitions/definitions/TestScriptWithSimpleEnvVars.kt @@ -3,11 +3,11 @@ import kotlin.script.experimental.annotations.* import kotlin.script.experimental.api.* import kotlin.script.experimental.util.* -object TestScriptWithSimpleEnvVarsDefinition : ScriptDefinition( +object TestScriptWithSimpleEnvVarsDefinition : ScriptCompilationConfiguration( { providedProperties("stringVar1" to String::class) }) -@KotlinScript(extension = "2.kts", definition = TestScriptWithSimpleEnvVarsDefinition::class) +@KotlinScript(extension = "2.kts", compilationConfiguration = TestScriptWithSimpleEnvVarsDefinition::class) abstract class TestScriptWithSimpleEnvVars