Sorting default jvm props and basic implementations

This commit is contained in:
Ilya Chernikov
2018-07-23 13:42:39 +02:00
parent fe2a11142e
commit 70ec004aaa
19 changed files with 110 additions and 133 deletions
@@ -56,7 +56,7 @@ import kotlin.script.experimental.dependencies.DependenciesResolver
import kotlin.script.experimental.dependencies.ScriptDependencies import kotlin.script.experimental.dependencies.ScriptDependencies
import kotlin.script.experimental.dependencies.asSuccess import kotlin.script.experimental.dependencies.asSuccess
import kotlin.script.experimental.jvm.JvmDependency 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.experimental.location.ScriptExpectedLocation
import kotlin.script.templates.standard.ScriptTemplateWithArgs import kotlin.script.templates.standard.ScriptTemplateWithArgs
@@ -209,8 +209,8 @@ fun loadDefinitionsFromTemplates(
} }
template.annotations.firstIsInstanceOrNull<kotlin.script.experimental.annotations.KotlinScript>() != null -> { template.annotations.firstIsInstanceOrNull<kotlin.script.experimental.annotations.KotlinScript>() != null -> {
val hostEnvironment = ScriptingEnvironment( val hostEnvironment = ScriptingEnvironment(
ScriptingEnvironmentProperties.configurationDependencies to listOf(JvmDependency(classpath)), defaultJvmScriptingEnvironment,
ScriptingEnvironmentProperties.getScriptingClass to JvmGetScriptingClass() ScriptingEnvironmentProperties.configurationDependencies to listOf(JvmDependency(classpath))
) )
KotlinScriptDefinitionAdapterFromNewAPI( KotlinScriptDefinitionAdapterFromNewAPI(
createScriptDefinitionFromAnnotatedBaseClass(KotlinType(template), hostEnvironment, KotlinScriptDefinition::class), createScriptDefinitionFromAnnotatedBaseClass(KotlinType(template), hostEnvironment, KotlinScriptDefinition::class),
@@ -10,25 +10,16 @@ import java.io.File
import kotlin.script.experimental.api.* import kotlin.script.experimental.api.*
import kotlin.script.experimental.definitions.createScriptDefinitionFromAnnotatedBaseClass import kotlin.script.experimental.definitions.createScriptDefinitionFromAnnotatedBaseClass
import kotlin.script.experimental.host.toScriptSource import kotlin.script.experimental.host.toScriptSource
import kotlin.script.experimental.jvm.DummyCompiledJvmScriptCache import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
import kotlin.script.experimental.jvm.JvmBasicScriptingHost import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost
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
fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> { fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> {
val environment = ScriptingEnvironment(
ScriptingEnvironmentProperties.getScriptingClass(JvmGetScriptingClass())
)
val scriptCompiler = JvmScriptCompiler(KJVMCompilerImpl(environment), DummyCompiledJvmScriptCache())
val scriptDefinition = createScriptDefinitionFromAnnotatedBaseClass( val scriptDefinition = createScriptDefinitionFromAnnotatedBaseClass(
KotlinType(MyScriptWithMavenDeps::class), KotlinType(MyScriptWithMavenDeps::class),
environment defaultJvmScriptingEnvironment
) )
val host = JvmBasicScriptingHost(scriptCompiler, BasicJvmScriptEvaluator()) val host = BasicJvmScriptingHost()
return host.eval( return host.eval(
scriptFile.toScriptSource(), scriptDefinition, ScriptCompileConfiguration(), ScriptEvaluationEnvironment() scriptFile.toScriptSource(), scriptDefinition, ScriptCompileConfiguration(), ScriptEvaluationEnvironment()
@@ -13,7 +13,10 @@ import kotlin.script.dependencies.ScriptContents
import kotlin.script.dependencies.ScriptDependenciesResolver import kotlin.script.dependencies.ScriptDependenciesResolver
import kotlin.script.experimental.annotations.KotlinScript import kotlin.script.experimental.annotations.KotlinScript
import kotlin.script.experimental.api.* 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 import kotlin.script.experimental.misc.invoke
@KotlinScript( @KotlinScript(
@@ -26,7 +29,6 @@ abstract class MyScriptWithMavenDeps {
object MyScriptProperties : ScriptingProperties() { object MyScriptProperties : ScriptingProperties() {
override fun setup() { override fun setup() {
include(jvmJavaHomeScriptingProperties)
scriptDefinition { scriptDefinition {
defaultImports<DependsOn>() defaultImports<DependsOn>()
defaultImports(Repository::class) defaultImports(Repository::class)
@@ -6,36 +6,29 @@
package org.jetbrains.kotlin.script.examples.jvm.simple.host package org.jetbrains.kotlin.script.examples.jvm.simple.host
import org.jetbrains.kotlin.script.examples.jvm.simple.MyScript import org.jetbrains.kotlin.script.examples.jvm.simple.MyScript
import org.jetbrains.kotlin.script.util.scriptCompilationClasspathFromContext
import java.io.File import java.io.File
import kotlin.script.experimental.api.* import kotlin.script.experimental.api.*
import kotlin.script.experimental.definitions.createScriptDefinitionFromAnnotatedBaseClass import kotlin.script.experimental.definitions.createScriptDefinitionFromAnnotatedBaseClass
import kotlin.script.experimental.host.toScriptSource import kotlin.script.experimental.host.toScriptSource
import kotlin.script.experimental.jvm.* import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
import kotlin.script.experimental.jvm.runners.BasicJvmScriptEvaluator import kotlin.script.experimental.jvm.jvmDependenciesFromCurrentContext
import kotlin.script.experimental.jvmhost.impl.KJVMCompilerImpl import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost
import kotlin.script.experimental.misc.invoke
val myJvmConfigParams = jvmJavaHomeParams + with(ScriptDefinitionProperties) {
listOf(
dependencies(JvmDependency(scriptCompilationClasspathFromContext("scripting-jvm-simple-script" /* script library jar name */)))
)
}
fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> { fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> {
val environment = ScriptingEnvironment(
ScriptingEnvironmentProperties.getScriptingClass(JvmGetScriptingClass())
)
val scriptCompiler = JvmScriptCompiler(KJVMCompilerImpl(environment), DummyCompiledJvmScriptCache())
val scriptDefinition = createScriptDefinitionFromAnnotatedBaseClass( val scriptDefinition = createScriptDefinitionFromAnnotatedBaseClass(
KotlinType(MyScript::class), 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( return host.eval(
scriptFile.toScriptSource(), scriptDefinition, ScriptCompileConfiguration(myJvmConfigParams), ScriptEvaluationEnvironment() scriptFile.toScriptSource(), scriptDefinition, additionalCompilationProperties, ScriptEvaluationEnvironment()
) )
} }
@@ -22,6 +22,8 @@ class PropertiesBuilderDelegate<T: PropertiesBuilder>(val kclass: KClass<T>) {
inline fun <reified T : PropertiesBuilder> propertiesBuilder() = PropertiesBuilderDelegate(T::class) inline fun <reified T : PropertiesBuilder> propertiesBuilder() = PropertiesBuilderDelegate(T::class)
fun buildScriptingProperties(body: ScriptingProperties.() -> Unit): ChainedPropertyBag =
ScriptingProperties(body).build()
open class ScriptingProperties(body: ScriptingProperties.() -> Unit = {}) { open class ScriptingProperties(body: ScriptingProperties.() -> Unit = {}) {
@@ -31,12 +33,13 @@ open class ScriptingProperties(body: ScriptingProperties.() -> Unit = {}) {
init { init {
body() body()
setup() // TODO: does it work?
} }
open fun setup() {} open fun setup() {}
internal fun makePropertyBag(): ChainedPropertyBag = fun build(): ChainedPropertyBag =
ChainedPropertyBag.createOptimized(parentPropertiesBag ?: parentPropertiesBuilder?.makePropertyBag(), data) ChainedPropertyBag.createOptimized(parentPropertiesBag ?: parentPropertiesBuilder?.build(), data)
// -------------------------- // --------------------------
// DSL: // DSL:
@@ -75,6 +78,7 @@ open class ScriptingProperties(body: ScriptingProperties.() -> Unit = {}) {
// inclusion: // inclusion:
fun include(props: ScriptingProperties) { fun include(props: ScriptingProperties) {
props.setup()
data.putAll(props.data) data.putAll(props.data)
} }
@@ -26,6 +26,7 @@ open class ChainedPropertyBag internal constructor(private val parent: ChainedPr
constructor(vararg pairs: Pair<TypedKey<*>, Any?>) : this(null, pairs.asIterable()) constructor(vararg pairs: Pair<TypedKey<*>, Any?>) : this(null, pairs.asIterable())
fun cloneWithNewParent(newParent: ChainedPropertyBag?): ChainedPropertyBag = when { fun cloneWithNewParent(newParent: ChainedPropertyBag?): ChainedPropertyBag = when {
this == newParent -> this
newParent == null -> this newParent == null -> this
parent == null -> createOptimized(newParent, data) parent == null -> createOptimized(newParent, data)
else -> createOptimized(parent.cloneWithNewParent(newParent), data) else -> createOptimized(parent.cloneWithNewParent(newParent), data)
@@ -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)
@@ -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. * that can be found in the license/LICENSE.txt file.
*/ */
package kotlin.script.experimental.jvmhost.impl 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.host.getMergedScriptText
import kotlin.script.experimental.jvm.JvmDependency import kotlin.script.experimental.jvm.JvmDependency
import kotlin.script.experimental.jvm.JvmScriptCompileConfigurationProperties 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.jvm.impl.BridgeDependenciesResolver
import kotlin.script.experimental.jvmhost.JvmScriptEvaluationEnvironmentProperties
import kotlin.script.experimental.jvmhost.KJvmCompilerProxy
import kotlin.script.experimental.util.chainPropertyBags import kotlin.script.experimental.util.chainPropertyBags
class KJVMCompiledScript<out ScriptBase : Any>( class KJvmCompiledScript<out ScriptBase : Any>(
override val configuration: ScriptCompileConfiguration, override val configuration: ScriptCompileConfiguration,
val generationState: GenerationState, val generationState: GenerationState,
val scriptClassFQName: String val scriptClassFQName: String
@@ -70,7 +70,7 @@ class KJVMCompiledScript<out ScriptBase : Any>(
} }
} }
class KJVMCompilerImpl(val hostEnvironment: ScriptingEnvironment) : KJVMCompilerProxy { class KJvmCompilerImpl(val hostEnvironment: ScriptingEnvironment) : KJvmCompilerProxy {
override fun compile( override fun compile(
script: ScriptSource, script: ScriptSource,
@@ -192,7 +192,7 @@ class KJVMCompilerImpl(val hostEnvironment: ScriptingEnvironment) : KJVMCompiler
org.jetbrains.kotlin.codegen.CompilationErrorHandler.THROW_EXCEPTION org.jetbrains.kotlin.codegen.CompilationErrorHandler.THROW_EXCEPTION
) )
val res = KJVMCompiledScript<Any>(updatedScriptCompileConfiguration, generationState, scriptFileName.capitalize()) val res = KJvmCompiledScript<Any>(updatedScriptCompileConfiguration, generationState, scriptFileName.capitalize())
return ResultWithDiagnostics.Success(res, messageCollector.diagnostics) return ResultWithDiagnostics.Success(res, messageCollector.diagnostics)
} catch (ex: Throwable) { } catch (ex: Throwable) {
@@ -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. * that can be found in the license/LICENSE.txt file.
*/ */
@file:Suppress("unused") @file:Suppress("unused")
package kotlin.script.experimental.jvm package kotlin.script.experimental.jvmhost
import kotlin.script.experimental.api.* import kotlin.script.experimental.api.*
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
import kotlin.script.experimental.jvmhost.impl.KJvmCompilerImpl
import kotlin.script.experimental.util.chainPropertyBags 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( open class JvmScriptCompiler(
val compilerProxy: KJVMCompilerProxy, hostEnvironment: ScriptingEnvironment = defaultJvmScriptingEnvironment,
val cache: CompiledJvmScriptsCache val compilerProxy: KJvmCompilerProxy = KJvmCompilerImpl(hostEnvironment.cloneWithNewParent(defaultJvmScriptingEnvironment)),
val cache: CompiledJvmScriptsCache = CompiledJvmScriptsCache.NoCache
) : ScriptCompiler { ) : ScriptCompiler {
override suspend operator fun invoke( override suspend operator fun invoke(
@@ -48,12 +61,7 @@ open class JvmScriptCompiler(
} }
} }
interface CompiledJvmScriptsCache { interface KJvmCompilerProxy {
fun get(script: ScriptSource, configuration: ScriptCompileConfiguration): CompiledScript<*>?
fun store(compiledScript: CompiledScript<*>, configuration: ScriptCompileConfiguration)
}
interface KJVMCompilerProxy {
fun compile( fun compile(
script: ScriptSource, script: ScriptSource,
scriptDefinition: ScriptDefinition, scriptDefinition: ScriptDefinition,
@@ -61,8 +69,3 @@ interface KJVMCompilerProxy {
): ResultWithDiagnostics<CompiledScript<*>> ): ResultWithDiagnostics<CompiledScript<*>>
} }
class DummyCompiledJvmScriptCache : CompiledJvmScriptsCache {
override fun get(script: ScriptSource, configuration: ScriptCompileConfiguration): CompiledScript<*>? = null
override fun store(compiledScript: CompiledScript<*>, configuration: ScriptCompileConfiguration) {}
}
@@ -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. * 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.api.*
import kotlin.script.experimental.util.typedKey
open class BasicJvmScriptEvaluator() : ScriptEvaluator { object JvmScriptEvaluationEnvironmentProperties {
val baseClassLoader by typedKey<ClassLoader?>(Thread.currentThread().contextClassLoader)
}
open class BasicJvmScriptEvaluator : ScriptEvaluator {
override suspend operator fun invoke( override suspend operator fun invoke(
compiledScript: CompiledScript<*>, compiledScript: CompiledScript<*>,
@@ -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. * that can be found in the license/LICENSE.txt file.
*/ */
@file:Suppress("unused") @file:Suppress("unused")
package kotlin.script.experimental.jvm package kotlin.script.experimental.jvm.compat
import kotlin.script.dependencies.ScriptContents import kotlin.script.dependencies.ScriptContents
import kotlin.script.dependencies.ScriptDependenciesResolver import kotlin.script.dependencies.ScriptDependenciesResolver
@@ -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. * 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.dependencies.ScriptReport
import kotlin.script.experimental.host.toScriptSource import kotlin.script.experimental.host.toScriptSource
import kotlin.script.experimental.jvm.JvmDependency import kotlin.script.experimental.jvm.JvmDependency
import kotlin.script.experimental.jvm.mapToLegacyScriptReportPosition import kotlin.script.experimental.jvm.compat.mapToLegacyScriptReportPosition
import kotlin.script.experimental.jvm.mapToLegacyScriptReportSeverity import kotlin.script.experimental.jvm.compat.mapToLegacyScriptReportSeverity
class BridgeDependenciesResolver( class BridgeDependenciesResolver(
val scriptDefinition: ScriptDefinition, val scriptDefinition: ScriptDefinition,
@@ -6,10 +6,16 @@
package kotlin.script.experimental.jvm package kotlin.script.experimental.jvm
import org.jetbrains.kotlin.script.util.scriptCompilationClasspathFromContext import org.jetbrains.kotlin.script.util.scriptCompilationClasspathFromContext
import java.io.File
import kotlin.script.experimental.api.ScriptDefinitionProperties import kotlin.script.experimental.api.ScriptDefinitionProperties
import kotlin.script.experimental.api.ScriptDependency
import kotlin.script.experimental.api.ScriptingProperties import kotlin.script.experimental.api.ScriptingProperties
import kotlin.script.experimental.api.addToListProperty import kotlin.script.experimental.api.addToListProperty
class JvmDependency(val classpath: List<File>) : ScriptDependency {
constructor(vararg classpathEntries: File) : this(classpathEntries.asList())
}
fun ScriptingProperties.jvmDependenciesFromCurrentContext(vararg libraries: String, wholeClasspath: Boolean = false) { fun ScriptingProperties.jvmDependenciesFromCurrentContext(vararg libraries: String, wholeClasspath: Boolean = false) {
jvmDependenciesFromClassloader(*libraries, wholeClasspath = wholeClasspath) jvmDependenciesFromClassloader(*libraries, wholeClasspath = wholeClasspath)
} }
@@ -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. * that can be found in the license/LICENSE.txt file.
*/ */
@file:Suppress("unused")
package kotlin.script.experimental.jvm package kotlin.script.experimental.jvm
import java.io.File import java.io.File
import kotlin.script.experimental.api.PropertiesGroup
import kotlin.script.experimental.api.ScriptingProperties import kotlin.script.experimental.api.ScriptingProperties
import kotlin.script.experimental.util.typedKey
val jvmJavaHomeParams = with(JvmScriptCompileConfigurationProperties) { object JvmScriptCompileConfigurationProperties : PropertiesGroup {
listOf(javaHomeDir to File(System.getProperty("java.home"))) val javaHomeDir by typedKey<File>(File(System.getProperty("java.home")))
} }
object JvmJavaHomeScriptingProperties : ScriptingProperties( val ScriptingProperties.jvmCompileConfiguration get() = JvmScriptCompileConfigurationProperties
{
JvmScriptCompileConfigurationProperties.javaHomeDir(File(System.getProperty("java.home")))
})
val jvmJavaHomeScriptingProperties = JvmJavaHomeScriptingProperties
@@ -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<File>()
}
val ScriptingProperties.jvmCompileConfiguration get() = JvmScriptCompileConfigurationProperties
class JvmDependency(val classpath: List<File>) : ScriptDependency {
constructor(vararg classpathEntries: File) : this(classpathEntries.asList())
}
@@ -9,6 +9,15 @@ import java.net.URLClassLoader
import kotlin.reflect.KClass import kotlin.reflect.KClass
import kotlin.script.experimental.api.* import kotlin.script.experimental.api.*
private object DefaultJvmScriptingEnvironmentPropertiesBuilder : ScriptingProperties() {
init {
ScriptingEnvironmentProperties.getScriptingClass(JvmGetScriptingClass())
}
}
val defaultJvmScriptingEnvironment = DefaultJvmScriptingEnvironmentPropertiesBuilder.build()
class JvmGetScriptingClass : GetScriptingClass { class JvmGetScriptingClass : GetScriptingClass {
private var dependencies: List<ScriptDependency>? = null private var dependencies: List<ScriptDependency>? = 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<ClassLoader?>()
}
@@ -18,7 +18,7 @@ import kotlin.script.experimental.annotations.KotlinScriptFileExtension
import kotlin.script.experimental.api.* import kotlin.script.experimental.api.*
import kotlin.script.experimental.definitions.createScriptDefinitionFromAnnotatedBaseClass import kotlin.script.experimental.definitions.createScriptDefinitionFromAnnotatedBaseClass
import kotlin.script.experimental.jvm.JvmDependency import kotlin.script.experimental.jvm.JvmDependency
import kotlin.script.experimental.jvm.JvmGetScriptingClass import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
class LazyScriptDefinitionFromDiscoveredClass internal constructor( class LazyScriptDefinitionFromDiscoveredClass internal constructor(
private val annotationsFromAsm: ArrayList<BinAnnData>, private val annotationsFromAsm: ArrayList<BinAnnData>,
@@ -36,8 +36,8 @@ class LazyScriptDefinitionFromDiscoveredClass internal constructor(
override val hostEnvironment: ScriptingEnvironment by lazy(LazyThreadSafetyMode.PUBLICATION) { override val hostEnvironment: ScriptingEnvironment by lazy(LazyThreadSafetyMode.PUBLICATION) {
ScriptingEnvironment( ScriptingEnvironment(
ScriptingEnvironmentProperties.configurationDependencies to listOf(JvmDependency(classpath)), defaultJvmScriptingEnvironment,
ScriptingEnvironmentProperties.getScriptingClass to JvmGetScriptingClass() ScriptingEnvironmentProperties.configurationDependencies to listOf(JvmDependency(classpath))
) )
} }
@@ -18,10 +18,8 @@ import java.util.jar.JarFile
import kotlin.coroutines.experimental.buildSequence import kotlin.coroutines.experimental.buildSequence
import kotlin.script.experimental.annotations.KotlinScript import kotlin.script.experimental.annotations.KotlinScript
import kotlin.script.experimental.api.KotlinType 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.definitions.createScriptDefinitionFromAnnotatedBaseClass
import kotlin.script.experimental.jvm.JvmGetScriptingClass import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
import kotlin.script.templates.ScriptTemplateDefinition import kotlin.script.templates.ScriptTemplateDefinition
internal const val SCRIPT_DEFINITION_MARKERS_PATH = "META-INF/kotlin/script/templates/" 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 cls = classLoader.loadClass(template)
val def = val def =
if (cls.annotations.firstIsInstanceOrNull<KotlinScript>() != null) { if (cls.annotations.firstIsInstanceOrNull<KotlinScript>() != null) {
val environment = ScriptingEnvironment( val environment = defaultJvmScriptingEnvironment
ScriptingEnvironmentProperties.getScriptingClass to JvmGetScriptingClass()
)
KotlinScriptDefinitionAdapterFromNewAPI( KotlinScriptDefinitionAdapterFromNewAPI(
createScriptDefinitionFromAnnotatedBaseClass( createScriptDefinitionFromAnnotatedBaseClass(
KotlinType(cls.kotlin), KotlinType(cls.kotlin),