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 019d8866423..651b59a4afd 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 @@ -56,7 +56,7 @@ import kotlin.script.experimental.dependencies.DependenciesResolver import kotlin.script.experimental.dependencies.ScriptDependencies import kotlin.script.experimental.dependencies.asSuccess import kotlin.script.experimental.jvm.JvmDependency -import kotlin.script.experimental.jvm.JvmGetScriptingClass +import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment import kotlin.script.experimental.location.ScriptExpectedLocation import kotlin.script.templates.standard.ScriptTemplateWithArgs @@ -209,8 +209,8 @@ fun loadDefinitionsFromTemplates( } template.annotations.firstIsInstanceOrNull() != null -> { val hostEnvironment = ScriptingEnvironment( - ScriptingEnvironmentProperties.configurationDependencies to listOf(JvmDependency(classpath)), - ScriptingEnvironmentProperties.getScriptingClass to JvmGetScriptingClass() + defaultJvmScriptingEnvironment, + ScriptingEnvironmentProperties.configurationDependencies to listOf(JvmDependency(classpath)) ) KotlinScriptDefinitionAdapterFromNewAPI( createScriptDefinitionFromAnnotatedBaseClass(KotlinType(template), hostEnvironment, KotlinScriptDefinition::class), diff --git a/libraries/examples/scripting/jvm-maven-deps/host/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/host/host.kt b/libraries/examples/scripting/jvm-maven-deps/host/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/host/host.kt index 0e43115e990..6073dde7783 100644 --- a/libraries/examples/scripting/jvm-maven-deps/host/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/host/host.kt +++ b/libraries/examples/scripting/jvm-maven-deps/host/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/host/host.kt @@ -10,25 +10,16 @@ import java.io.File import kotlin.script.experimental.api.* import kotlin.script.experimental.definitions.createScriptDefinitionFromAnnotatedBaseClass import kotlin.script.experimental.host.toScriptSource -import kotlin.script.experimental.jvm.DummyCompiledJvmScriptCache -import kotlin.script.experimental.jvm.JvmBasicScriptingHost -import kotlin.script.experimental.jvm.JvmGetScriptingClass -import kotlin.script.experimental.jvm.JvmScriptCompiler -import kotlin.script.experimental.jvm.runners.BasicJvmScriptEvaluator -import kotlin.script.experimental.jvmhost.impl.KJVMCompilerImpl -import kotlin.script.experimental.misc.invoke +import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment +import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost fun evalFile(scriptFile: File): ResultWithDiagnostics { - val environment = ScriptingEnvironment( - ScriptingEnvironmentProperties.getScriptingClass(JvmGetScriptingClass()) - ) - val scriptCompiler = JvmScriptCompiler(KJVMCompilerImpl(environment), DummyCompiledJvmScriptCache()) val scriptDefinition = createScriptDefinitionFromAnnotatedBaseClass( KotlinType(MyScriptWithMavenDeps::class), - environment + defaultJvmScriptingEnvironment ) - val host = JvmBasicScriptingHost(scriptCompiler, BasicJvmScriptEvaluator()) + val host = BasicJvmScriptingHost() return host.eval( scriptFile.toScriptSource(), scriptDefinition, ScriptCompileConfiguration(), ScriptEvaluationEnvironment() 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 a7ba20ed8e4..906c4da99ca 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 @@ -13,7 +13,10 @@ import kotlin.script.dependencies.ScriptContents import kotlin.script.dependencies.ScriptDependenciesResolver import kotlin.script.experimental.annotations.KotlinScript import kotlin.script.experimental.api.* -import kotlin.script.experimental.jvm.* +import kotlin.script.experimental.jvm.JvmDependency +import kotlin.script.experimental.jvm.compat.mapLegacyDiagnosticSeverity +import kotlin.script.experimental.jvm.compat.mapLegacyScriptPosition +import kotlin.script.experimental.jvm.jvmDependenciesFromCurrentContext import kotlin.script.experimental.misc.invoke @KotlinScript( @@ -26,7 +29,6 @@ abstract class MyScriptWithMavenDeps { object MyScriptProperties : ScriptingProperties() { override fun setup() { - include(jvmJavaHomeScriptingProperties) scriptDefinition { defaultImports() defaultImports(Repository::class) diff --git a/libraries/examples/scripting/jvm-simple-script/host/src/org/jetbrains/kotlin/script/examples/jvm/simple/host/host.kt b/libraries/examples/scripting/jvm-simple-script/host/src/org/jetbrains/kotlin/script/examples/jvm/simple/host/host.kt index a55e7e4ec45..a6b99ed522d 100644 --- a/libraries/examples/scripting/jvm-simple-script/host/src/org/jetbrains/kotlin/script/examples/jvm/simple/host/host.kt +++ b/libraries/examples/scripting/jvm-simple-script/host/src/org/jetbrains/kotlin/script/examples/jvm/simple/host/host.kt @@ -6,36 +6,29 @@ package org.jetbrains.kotlin.script.examples.jvm.simple.host import org.jetbrains.kotlin.script.examples.jvm.simple.MyScript -import org.jetbrains.kotlin.script.util.scriptCompilationClasspathFromContext import java.io.File import kotlin.script.experimental.api.* import kotlin.script.experimental.definitions.createScriptDefinitionFromAnnotatedBaseClass import kotlin.script.experimental.host.toScriptSource -import kotlin.script.experimental.jvm.* -import kotlin.script.experimental.jvm.runners.BasicJvmScriptEvaluator -import kotlin.script.experimental.jvmhost.impl.KJVMCompilerImpl -import kotlin.script.experimental.misc.invoke - -val myJvmConfigParams = jvmJavaHomeParams + with(ScriptDefinitionProperties) { - listOf( - dependencies(JvmDependency(scriptCompilationClasspathFromContext("scripting-jvm-simple-script" /* script library jar name */))) - ) -} +import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment +import kotlin.script.experimental.jvm.jvmDependenciesFromCurrentContext +import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost fun evalFile(scriptFile: File): ResultWithDiagnostics { - val environment = ScriptingEnvironment( - ScriptingEnvironmentProperties.getScriptingClass(JvmGetScriptingClass()) - ) - val scriptCompiler = JvmScriptCompiler(KJVMCompilerImpl(environment), DummyCompiledJvmScriptCache()) val scriptDefinition = createScriptDefinitionFromAnnotatedBaseClass( KotlinType(MyScript::class), - environment + defaultJvmScriptingEnvironment ) + val additionalCompilationProperties = buildScriptingProperties { + jvmDependenciesFromCurrentContext( + "scripting-jvm-simple-script" /* script library jar name */ + ) + } - val host = JvmBasicScriptingHost(scriptCompiler, BasicJvmScriptEvaluator()) + val host = BasicJvmScriptingHost() return host.eval( - scriptFile.toScriptSource(), scriptDefinition, ScriptCompileConfiguration(myJvmConfigParams), ScriptEvaluationEnvironment() + scriptFile.toScriptSource(), scriptDefinition, additionalCompilationProperties, ScriptEvaluationEnvironment() ) } diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/propertiesDsl.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/propertiesDsl.kt index 660f0fe2b3d..5ced4a76186 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/propertiesDsl.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/propertiesDsl.kt @@ -22,6 +22,8 @@ class PropertiesBuilderDelegate(val kclass: KClass) { inline fun propertiesBuilder() = PropertiesBuilderDelegate(T::class) +fun buildScriptingProperties(body: ScriptingProperties.() -> Unit): ChainedPropertyBag = + ScriptingProperties(body).build() open class ScriptingProperties(body: ScriptingProperties.() -> Unit = {}) { @@ -31,12 +33,13 @@ open class ScriptingProperties(body: ScriptingProperties.() -> Unit = {}) { init { body() + setup() // TODO: does it work? } open fun setup() {} - internal fun makePropertyBag(): ChainedPropertyBag = - ChainedPropertyBag.createOptimized(parentPropertiesBag ?: parentPropertiesBuilder?.makePropertyBag(), data) + fun build(): ChainedPropertyBag = + ChainedPropertyBag.createOptimized(parentPropertiesBag ?: parentPropertiesBuilder?.build(), data) // -------------------------- // DSL: @@ -75,6 +78,7 @@ open class ScriptingProperties(body: ScriptingProperties.() -> Unit = {}) { // inclusion: fun include(props: ScriptingProperties) { + props.setup() data.putAll(props.data) } diff --git a/libraries/scripting/common/src/kotlin/script/experimental/util/propertyBag.kt b/libraries/scripting/common/src/kotlin/script/experimental/util/propertyBag.kt index b5cc112d2fa..91de6a1ba51 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/util/propertyBag.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/util/propertyBag.kt @@ -26,6 +26,7 @@ open class ChainedPropertyBag internal constructor(private val parent: ChainedPr constructor(vararg pairs: Pair, Any?>) : this(null, pairs.asIterable()) fun cloneWithNewParent(newParent: ChainedPropertyBag?): ChainedPropertyBag = when { + this == newParent -> this newParent == null -> this parent == null -> createOptimized(newParent, data) else -> createOptimized(parent.cloneWithNewParent(newParent), data) diff --git a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/BasicJvmScriptingHost.kt b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/BasicJvmScriptingHost.kt new file mode 100644 index 00000000000..5e5454535e5 --- /dev/null +++ b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/BasicJvmScriptingHost.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package kotlin.script.experimental.jvmhost + +import kotlin.script.experimental.api.ScriptEvaluator +import kotlin.script.experimental.host.BasicScriptingHost + +open class BasicJvmScriptingHost( + compiler: JvmScriptCompiler = JvmScriptCompiler(), + evaluator: ScriptEvaluator = BasicJvmScriptEvaluator() +) : BasicScriptingHost(compiler, evaluator) 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 80a43450d29..b9d814c2b2f 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 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license * that can be found in the license/LICENSE.txt file. */ package kotlin.script.experimental.jvmhost.impl @@ -41,12 +41,12 @@ import kotlin.script.experimental.dependencies.DependenciesResolver import kotlin.script.experimental.host.getMergedScriptText import kotlin.script.experimental.jvm.JvmDependency import kotlin.script.experimental.jvm.JvmScriptCompileConfigurationProperties -import kotlin.script.experimental.jvm.JvmScriptEvaluationEnvironmentProperties -import kotlin.script.experimental.jvm.KJVMCompilerProxy import kotlin.script.experimental.jvm.impl.BridgeDependenciesResolver +import kotlin.script.experimental.jvmhost.JvmScriptEvaluationEnvironmentProperties +import kotlin.script.experimental.jvmhost.KJvmCompilerProxy import kotlin.script.experimental.util.chainPropertyBags -class KJVMCompiledScript( +class KJvmCompiledScript( override val configuration: ScriptCompileConfiguration, val generationState: GenerationState, val scriptClassFQName: String @@ -70,7 +70,7 @@ class KJVMCompiledScript( } } -class KJVMCompilerImpl(val hostEnvironment: ScriptingEnvironment) : KJVMCompilerProxy { +class KJvmCompilerImpl(val hostEnvironment: ScriptingEnvironment) : KJvmCompilerProxy { override fun compile( script: ScriptSource, @@ -192,7 +192,7 @@ class KJVMCompilerImpl(val hostEnvironment: ScriptingEnvironment) : KJVMCompiler org.jetbrains.kotlin.codegen.CompilationErrorHandler.THROW_EXCEPTION ) - val res = KJVMCompiledScript(updatedScriptCompileConfiguration, generationState, scriptFileName.capitalize()) + val res = KJvmCompiledScript(updatedScriptCompileConfiguration, generationState, scriptFileName.capitalize()) return ResultWithDiagnostics.Success(res, messageCollector.diagnostics) } catch (ex: Throwable) { diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptCompilation.kt b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptCompilation.kt similarity index 72% rename from libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptCompilation.kt rename to libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptCompilation.kt index 08b445eb50e..7955d8db9d1 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptCompilation.kt +++ b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptCompilation.kt @@ -1,18 +1,31 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license * that can be found in the license/LICENSE.txt file. */ @file:Suppress("unused") -package kotlin.script.experimental.jvm +package kotlin.script.experimental.jvmhost import kotlin.script.experimental.api.* +import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment +import kotlin.script.experimental.jvmhost.impl.KJvmCompilerImpl import kotlin.script.experimental.util.chainPropertyBags +interface CompiledJvmScriptsCache { + fun get(script: ScriptSource, configuration: ScriptCompileConfiguration): CompiledScript<*>? + fun store(compiledScript: CompiledScript<*>, configuration: ScriptCompileConfiguration) + + object NoCache : CompiledJvmScriptsCache { + override fun get(script: ScriptSource, configuration: ScriptCompileConfiguration): CompiledScript<*>? = null + override fun store(compiledScript: CompiledScript<*>, configuration: ScriptCompileConfiguration) {} + } +} + open class JvmScriptCompiler( - val compilerProxy: KJVMCompilerProxy, - val cache: CompiledJvmScriptsCache + hostEnvironment: ScriptingEnvironment = defaultJvmScriptingEnvironment, + val compilerProxy: KJvmCompilerProxy = KJvmCompilerImpl(hostEnvironment.cloneWithNewParent(defaultJvmScriptingEnvironment)), + val cache: CompiledJvmScriptsCache = CompiledJvmScriptsCache.NoCache ) : ScriptCompiler { override suspend operator fun invoke( @@ -48,12 +61,7 @@ open class JvmScriptCompiler( } } -interface CompiledJvmScriptsCache { - fun get(script: ScriptSource, configuration: ScriptCompileConfiguration): CompiledScript<*>? - fun store(compiledScript: CompiledScript<*>, configuration: ScriptCompileConfiguration) -} - -interface KJVMCompilerProxy { +interface KJvmCompilerProxy { fun compile( script: ScriptSource, scriptDefinition: ScriptDefinition, @@ -61,8 +69,3 @@ interface KJVMCompilerProxy { ): ResultWithDiagnostics> } -class DummyCompiledJvmScriptCache : CompiledJvmScriptsCache { - override fun get(script: ScriptSource, configuration: ScriptCompileConfiguration): CompiledScript<*>? = null - override fun store(compiledScript: CompiledScript<*>, configuration: ScriptCompileConfiguration) {} -} - diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/runners/BasicJvmScriptEvaluator.kt b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptEvaluation.kt similarity index 82% rename from libraries/scripting/jvm/src/kotlin/script/experimental/jvm/runners/BasicJvmScriptEvaluator.kt rename to libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptEvaluation.kt index 42b56be75dd..290ffcba1c6 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/runners/BasicJvmScriptEvaluator.kt +++ b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptEvaluation.kt @@ -1,13 +1,20 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license * that can be found in the license/LICENSE.txt file. */ -package kotlin.script.experimental.jvm.runners +@file:Suppress("unused") + +package kotlin.script.experimental.jvmhost import kotlin.script.experimental.api.* +import kotlin.script.experimental.util.typedKey -open class BasicJvmScriptEvaluator() : ScriptEvaluator { +object JvmScriptEvaluationEnvironmentProperties { + val baseClassLoader by typedKey(Thread.currentThread().contextClassLoader) +} + +open class BasicJvmScriptEvaluator : ScriptEvaluator { override suspend operator fun invoke( compiledScript: CompiledScript<*>, diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptUtil.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/compat/diagnosticsUtil.kt similarity index 94% rename from libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptUtil.kt rename to libraries/scripting/jvm/src/kotlin/script/experimental/jvm/compat/diagnosticsUtil.kt index d5c005851f1..f427d5ab3d1 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptUtil.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/compat/diagnosticsUtil.kt @@ -1,11 +1,10 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license * that can be found in the license/LICENSE.txt file. */ - @file:Suppress("unused") -package kotlin.script.experimental.jvm +package kotlin.script.experimental.jvm.compat import kotlin.script.dependencies.ScriptContents import kotlin.script.dependencies.ScriptDependenciesResolver diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt index a10c4a0849e..d0167c00922 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license * that can be found in the license/LICENSE.txt file. */ @@ -16,8 +16,8 @@ import kotlin.script.experimental.dependencies.ScriptDependencies import kotlin.script.experimental.dependencies.ScriptReport import kotlin.script.experimental.host.toScriptSource import kotlin.script.experimental.jvm.JvmDependency -import kotlin.script.experimental.jvm.mapToLegacyScriptReportPosition -import kotlin.script.experimental.jvm.mapToLegacyScriptReportSeverity +import kotlin.script.experimental.jvm.compat.mapToLegacyScriptReportPosition +import kotlin.script.experimental.jvm.compat.mapToLegacyScriptReportSeverity class BridgeDependenciesResolver( val scriptDefinition: ScriptDefinition, diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmDependencies.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmDependencies.kt index 0135241d7ad..e2faa0270c7 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmDependencies.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmDependencies.kt @@ -6,10 +6,16 @@ package kotlin.script.experimental.jvm import org.jetbrains.kotlin.script.util.scriptCompilationClasspathFromContext +import java.io.File import kotlin.script.experimental.api.ScriptDefinitionProperties +import kotlin.script.experimental.api.ScriptDependency import kotlin.script.experimental.api.ScriptingProperties import kotlin.script.experimental.api.addToListProperty +class JvmDependency(val classpath: List) : ScriptDependency { + constructor(vararg classpathEntries: File) : this(classpathEntries.asList()) +} + fun ScriptingProperties.jvmDependenciesFromCurrentContext(vararg libraries: String, wholeClasspath: Boolean = false) { jvmDependenciesFromClassloader(*libraries, wholeClasspath = wholeClasspath) } diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptConfiguration.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptConfiguration.kt index 1ea5696fbc4..e22548638e7 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptConfiguration.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptConfiguration.kt @@ -1,21 +1,19 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license * that can be found in the license/LICENSE.txt file. */ +@file:Suppress("unused") + package kotlin.script.experimental.jvm import java.io.File +import kotlin.script.experimental.api.PropertiesGroup import kotlin.script.experimental.api.ScriptingProperties +import kotlin.script.experimental.util.typedKey -val jvmJavaHomeParams = with(JvmScriptCompileConfigurationProperties) { - listOf(javaHomeDir to File(System.getProperty("java.home"))) +object JvmScriptCompileConfigurationProperties : PropertiesGroup { + val javaHomeDir by typedKey(File(System.getProperty("java.home"))) } -object JvmJavaHomeScriptingProperties : ScriptingProperties( - { - JvmScriptCompileConfigurationProperties.javaHomeDir(File(System.getProperty("java.home"))) - }) - -val jvmJavaHomeScriptingProperties = JvmJavaHomeScriptingProperties - +val ScriptingProperties.jvmCompileConfiguration get() = JvmScriptCompileConfigurationProperties diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptData.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptData.kt deleted file mode 100644 index 6ba1b0e06f6..00000000000 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptData.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the license/LICENSE.txt file. - */ - -@file:Suppress("unused") - -package kotlin.script.experimental.jvm - -import java.io.File -import kotlin.script.experimental.api.PropertiesGroup -import kotlin.script.experimental.api.ScriptDependency -import kotlin.script.experimental.api.ScriptingProperties -import kotlin.script.experimental.util.typedKey - -object JvmScriptCompileConfigurationProperties : PropertiesGroup { - val javaHomeDir by typedKey() -} - -val ScriptingProperties.jvmCompileConfiguration get() = JvmScriptCompileConfigurationProperties - -class JvmDependency(val classpath: List) : ScriptDependency { - constructor(vararg classpathEntries: File) : this(classpathEntries.asList()) -} - diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptEnvironment.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptEnvironment.kt index 7fc0d2820ac..fb9734273e3 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptEnvironment.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptEnvironment.kt @@ -9,6 +9,15 @@ import java.net.URLClassLoader import kotlin.reflect.KClass import kotlin.script.experimental.api.* +private object DefaultJvmScriptingEnvironmentPropertiesBuilder : ScriptingProperties() { + init { + ScriptingEnvironmentProperties.getScriptingClass(JvmGetScriptingClass()) + } +} + +val defaultJvmScriptingEnvironment = DefaultJvmScriptingEnvironmentPropertiesBuilder.build() + + class JvmGetScriptingClass : GetScriptingClass { private var dependencies: List? = null diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptEvaluation.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptEvaluation.kt deleted file mode 100644 index ec35f01cbf8..00000000000 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptEvaluation.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the license/LICENSE.txt file. - */ - -@file:Suppress("unused") - -package kotlin.script.experimental.jvm - -import kotlin.script.experimental.api.ScriptEvaluator -import kotlin.script.experimental.host.BasicScriptingHost -import kotlin.script.experimental.util.typedKey - -open class JvmBasicScriptingHost( - compiler: JvmScriptCompiler, - evaluator: ScriptEvaluator -) : BasicScriptingHost(compiler, evaluator) - -object JvmScriptEvaluationEnvironmentProperties { - val baseClassLoader by typedKey() -} 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 7e97edd7907..30942be9fc6 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 @@ -18,7 +18,7 @@ import kotlin.script.experimental.annotations.KotlinScriptFileExtension import kotlin.script.experimental.api.* import kotlin.script.experimental.definitions.createScriptDefinitionFromAnnotatedBaseClass import kotlin.script.experimental.jvm.JvmDependency -import kotlin.script.experimental.jvm.JvmGetScriptingClass +import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment class LazyScriptDefinitionFromDiscoveredClass internal constructor( private val annotationsFromAsm: ArrayList, @@ -36,8 +36,8 @@ class LazyScriptDefinitionFromDiscoveredClass internal constructor( override val hostEnvironment: ScriptingEnvironment by lazy(LazyThreadSafetyMode.PUBLICATION) { ScriptingEnvironment( - ScriptingEnvironmentProperties.configurationDependencies to listOf(JvmDependency(classpath)), - ScriptingEnvironmentProperties.getScriptingClass to JvmGetScriptingClass() + defaultJvmScriptingEnvironment, + ScriptingEnvironmentProperties.configurationDependencies to listOf(JvmDependency(classpath)) ) } diff --git a/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptiDefinitionsFromClasspathDiscoverySource.kt b/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptiDefinitionsFromClasspathDiscoverySource.kt index 849fc2c9343..1dec6015c6f 100644 --- a/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptiDefinitionsFromClasspathDiscoverySource.kt +++ b/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptiDefinitionsFromClasspathDiscoverySource.kt @@ -18,10 +18,8 @@ import java.util.jar.JarFile import kotlin.coroutines.experimental.buildSequence import kotlin.script.experimental.annotations.KotlinScript import kotlin.script.experimental.api.KotlinType -import kotlin.script.experimental.api.ScriptingEnvironment -import kotlin.script.experimental.api.ScriptingEnvironmentProperties import kotlin.script.experimental.definitions.createScriptDefinitionFromAnnotatedBaseClass -import kotlin.script.experimental.jvm.JvmGetScriptingClass +import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment import kotlin.script.templates.ScriptTemplateDefinition internal const val SCRIPT_DEFINITION_MARKERS_PATH = "META-INF/kotlin/script/templates/" @@ -274,9 +272,7 @@ private fun loadScriptDefinition( val cls = classLoader.loadClass(template) val def = if (cls.annotations.firstIsInstanceOrNull() != null) { - val environment = ScriptingEnvironment( - ScriptingEnvironmentProperties.getScriptingClass to JvmGetScriptingClass() - ) + val environment = defaultJvmScriptingEnvironment KotlinScriptDefinitionAdapterFromNewAPI( createScriptDefinitionFromAnnotatedBaseClass( KotlinType(cls.kotlin),