Rename ScriptingEnvironment to ScriptingHostConfiguration
This commit is contained in:
+6
-6
@@ -49,9 +49,9 @@ import kotlin.concurrent.write
|
|||||||
import kotlin.script.dependencies.Environment
|
import kotlin.script.dependencies.Environment
|
||||||
import kotlin.script.dependencies.ScriptContents
|
import kotlin.script.dependencies.ScriptContents
|
||||||
import kotlin.script.experimental.api.KotlinType
|
import kotlin.script.experimental.api.KotlinType
|
||||||
import kotlin.script.experimental.api.ScriptingEnvironment
|
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
||||||
import kotlin.script.experimental.api.configurationDependencies
|
import kotlin.script.experimental.host.configurationDependencies
|
||||||
import kotlin.script.experimental.configuration.createScriptCompilationConfigurationFromAnnotatedBaseClass
|
import kotlin.script.experimental.host.createScriptCompilationConfigurationFromAnnotatedBaseClass
|
||||||
import kotlin.script.experimental.dependencies.DependenciesResolver
|
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
|
||||||
@@ -208,7 +208,7 @@ fun loadDefinitionsFromTemplates(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
template.annotations.firstIsInstanceOrNull<kotlin.script.experimental.annotations.KotlinScript>() != null -> {
|
template.annotations.firstIsInstanceOrNull<kotlin.script.experimental.annotations.KotlinScript>() != null -> {
|
||||||
val hostEnvironment = ScriptingEnvironment {
|
val hostConfiguration = ScriptingHostConfiguration {
|
||||||
include(defaultJvmScriptingEnvironment)
|
include(defaultJvmScriptingEnvironment)
|
||||||
configurationDependencies(JvmDependency(classpath))
|
configurationDependencies(JvmDependency(classpath))
|
||||||
}
|
}
|
||||||
@@ -216,9 +216,9 @@ fun loadDefinitionsFromTemplates(
|
|||||||
createScriptCompilationConfigurationFromAnnotatedBaseClass(
|
createScriptCompilationConfigurationFromAnnotatedBaseClass(
|
||||||
KotlinType(
|
KotlinType(
|
||||||
template
|
template
|
||||||
), hostEnvironment, KotlinScriptDefinition::class
|
), hostConfiguration, KotlinScriptDefinition::class
|
||||||
),
|
),
|
||||||
hostEnvironment
|
hostConfiguration
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
|
|||||||
+4
-4
@@ -3,7 +3,7 @@
|
|||||||
* that can be found in the license/LICENSE.txt file.
|
* that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package kotlin.script.experimental.configuration
|
package kotlin.script.experimental.host
|
||||||
|
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
import kotlin.script.experimental.annotations.KotlinScript
|
import kotlin.script.experimental.annotations.KotlinScript
|
||||||
@@ -18,17 +18,17 @@ private const val ILLEGAL_CONFIG_ANN_ARG =
|
|||||||
|
|
||||||
fun createScriptCompilationConfigurationFromAnnotatedBaseClass(
|
fun createScriptCompilationConfigurationFromAnnotatedBaseClass(
|
||||||
baseClassType: KotlinType,
|
baseClassType: KotlinType,
|
||||||
environment: ScriptingEnvironment,
|
hostConfiguration: ScriptingHostConfiguration,
|
||||||
contextClass: KClass<*> = ScriptCompilationConfiguration::class,
|
contextClass: KClass<*> = ScriptCompilationConfiguration::class,
|
||||||
body: ScriptCompilationConfiguration.Builder.() -> Unit = {}
|
body: ScriptCompilationConfiguration.Builder.() -> Unit = {}
|
||||||
): ScriptCompilationConfiguration {
|
): ScriptCompilationConfiguration {
|
||||||
|
|
||||||
val getScriptingClass = environment[ScriptingEnvironment.getScriptingClass]
|
val getScriptingClass = hostConfiguration[ScriptingHostConfiguration.getScriptingClass]
|
||||||
?: throw IllegalArgumentException("${ERROR_MSG_PREFIX}Expecting 'getScriptingClass' parameter in the scripting environment")
|
?: throw IllegalArgumentException("${ERROR_MSG_PREFIX}Expecting 'getScriptingClass' parameter in the scripting environment")
|
||||||
|
|
||||||
val baseClass: KClass<*> =
|
val baseClass: KClass<*> =
|
||||||
try {
|
try {
|
||||||
getScriptingClass(baseClassType, contextClass, environment)
|
getScriptingClass(baseClassType, contextClass, hostConfiguration)
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
throw IllegalArgumentException("${ERROR_MSG_PREFIX}Unable to load base class $baseClassType", e)
|
throw IllegalArgumentException("${ERROR_MSG_PREFIX}Unable to load base class $baseClassType", e)
|
||||||
}
|
}
|
||||||
+17
-15
@@ -3,49 +3,51 @@
|
|||||||
* that can be found in the license/LICENSE.txt file.
|
* that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package kotlin.script.experimental.api
|
package kotlin.script.experimental.host
|
||||||
|
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
import kotlin.script.experimental.api.KotlinType
|
||||||
|
import kotlin.script.experimental.api.ScriptDependency
|
||||||
import kotlin.script.experimental.util.PropertiesCollection
|
import kotlin.script.experimental.util.PropertiesCollection
|
||||||
|
|
||||||
interface ScriptingEnvironmentKeys
|
interface ScriptingHostConfigurationKeys
|
||||||
|
|
||||||
class ScriptingEnvironment(baseScriptingEnvironments: Iterable<ScriptingEnvironment>, body: Builder.() -> Unit) :
|
class ScriptingHostConfiguration(baseScriptingEnvironments: Iterable<ScriptingHostConfiguration>, body: Builder.() -> Unit) :
|
||||||
PropertiesCollection(Builder(baseScriptingEnvironments).apply(body).data) {
|
PropertiesCollection(Builder(baseScriptingEnvironments).apply(body).data) {
|
||||||
|
|
||||||
constructor(body: Builder.() -> Unit = {}) : this(emptyList(), body)
|
constructor(body: Builder.() -> Unit = {}) : this(emptyList(), body)
|
||||||
constructor(
|
constructor(
|
||||||
vararg baseScriptingEnvironments: ScriptingEnvironment, body: Builder.() -> Unit = {}
|
vararg baseConfigurations: ScriptingHostConfiguration, body: Builder.() -> Unit = {}
|
||||||
) : this(baseScriptingEnvironments.asIterable(), body)
|
) : this(baseConfigurations.asIterable(), body)
|
||||||
|
|
||||||
class Builder internal constructor(baseScriptingEnvironments: Iterable<ScriptingEnvironment>) :
|
class Builder internal constructor(baseScriptingEnvironments: Iterable<ScriptingHostConfiguration>) :
|
||||||
ScriptingEnvironmentKeys,
|
ScriptingHostConfigurationKeys,
|
||||||
PropertiesCollection.Builder(baseScriptingEnvironments)
|
PropertiesCollection.Builder(baseScriptingEnvironments)
|
||||||
|
|
||||||
companion object : ScriptingEnvironmentKeys
|
companion object : ScriptingHostConfigurationKeys
|
||||||
}
|
}
|
||||||
|
|
||||||
// should contain all dependencies needed for baseClass and compilationConfigurator
|
// should contain all dependencies needed for baseClass and compilationConfigurator
|
||||||
val ScriptingEnvironmentKeys.configurationDependencies by PropertiesCollection.key<List<ScriptDependency>>()
|
val ScriptingHostConfigurationKeys.configurationDependencies by PropertiesCollection.key<List<ScriptDependency>>()
|
||||||
|
|
||||||
// do not use configurationDependencies as script dependencies, so only the dependencies defined by compilationConfigurator will be used
|
// do not use configurationDependencies as script dependencies, so only the dependencies defined by compilationConfigurator will be used
|
||||||
// (NOTE: in this case they should include the dependencies for the base class anyway, since this class is needed for script
|
// (NOTE: in this case they should include the dependencies for the base class anyway, since this class is needed for script
|
||||||
// compilation and instantiation, but compilationConfigurator could be excluded)
|
// compilation and instantiation, but compilationConfigurator could be excluded)
|
||||||
val ScriptingEnvironmentKeys.isolatedDependencies by PropertiesCollection.key<Boolean>(false)
|
val ScriptingHostConfigurationKeys.isolatedDependencies by PropertiesCollection.key<Boolean>(false)
|
||||||
|
|
||||||
// a "class loader" for KotlinTypes
|
// a "class loader" for KotlinTypes
|
||||||
val ScriptingEnvironmentKeys.getScriptingClass by PropertiesCollection.key<GetScriptingClass>()
|
val ScriptingHostConfigurationKeys.getScriptingClass by PropertiesCollection.key<GetScriptingClass>()
|
||||||
|
|
||||||
|
|
||||||
interface GetScriptingClass {
|
interface GetScriptingClass {
|
||||||
operator fun invoke(classType: KotlinType, contextClass: KClass<*>, environment: ScriptingEnvironment): KClass<*>
|
operator fun invoke(classType: KotlinType, contextClass: KClass<*>, hostConfiguration: ScriptingHostConfiguration): KClass<*>
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ScriptingEnvironment.getScriptingClass(type: KotlinType, contextClass: KClass<*>): KClass<*> {
|
fun ScriptingHostConfiguration.getScriptingClass(type: KotlinType, contextClass: KClass<*>): KClass<*> {
|
||||||
val getClass = get(ScriptingEnvironment.getScriptingClass)
|
val getClass = get(ScriptingHostConfiguration.getScriptingClass)
|
||||||
?: throw IllegalArgumentException("Expecting 'getScriptingClass' property in the scripting environment: unable to load scripting class $type")
|
?: throw IllegalArgumentException("Expecting 'getScriptingClass' property in the scripting environment: unable to load scripting class $type")
|
||||||
return getClass(type, contextClass, this)
|
return getClass(type, contextClass, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ScriptingEnvironment.getScriptingClass(type: KotlinType, context: Any): KClass<*> = getScriptingClass(type, context::class)
|
fun ScriptingHostConfiguration.getScriptingClass(type: KotlinType, context: Any): KClass<*> = getScriptingClass(type, context::class)
|
||||||
|
|
||||||
+6
-6
@@ -8,24 +8,24 @@ package kotlin.script.experimental.jvmhost
|
|||||||
import kotlin.script.experimental.api.KotlinType
|
import kotlin.script.experimental.api.KotlinType
|
||||||
import kotlin.script.experimental.api.ScriptCompilationConfiguration
|
import kotlin.script.experimental.api.ScriptCompilationConfiguration
|
||||||
import kotlin.script.experimental.api.ScriptEvaluator
|
import kotlin.script.experimental.api.ScriptEvaluator
|
||||||
import kotlin.script.experimental.api.ScriptingEnvironment
|
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
||||||
import kotlin.script.experimental.configuration.createScriptCompilationConfigurationFromAnnotatedBaseClass
|
import kotlin.script.experimental.host.createScriptCompilationConfigurationFromAnnotatedBaseClass
|
||||||
import kotlin.script.experimental.host.BasicScriptingHost
|
import kotlin.script.experimental.host.BasicScriptingHost
|
||||||
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
|
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
|
||||||
|
|
||||||
open class BasicJvmScriptingHost(
|
open class BasicJvmScriptingHost(
|
||||||
hostEnvironment: ScriptingEnvironment = defaultJvmScriptingEnvironment,
|
hostConfiguration: ScriptingHostConfiguration = defaultJvmScriptingEnvironment,
|
||||||
compiler: JvmScriptCompiler = JvmScriptCompiler(hostEnvironment),
|
compiler: JvmScriptCompiler = JvmScriptCompiler(hostConfiguration),
|
||||||
evaluator: ScriptEvaluator = BasicJvmScriptEvaluator()
|
evaluator: ScriptEvaluator = BasicJvmScriptEvaluator()
|
||||||
) : BasicScriptingHost(compiler, evaluator)
|
) : BasicScriptingHost(compiler, evaluator)
|
||||||
|
|
||||||
|
|
||||||
inline fun <reified T : Any> createBasicScriptCompilationConfigurationFromAnnotatedBaseClass(
|
inline fun <reified T : Any> createBasicScriptCompilationConfigurationFromAnnotatedBaseClass(
|
||||||
hostEnvironment: ScriptingEnvironment = defaultJvmScriptingEnvironment,
|
hostConfiguration: ScriptingHostConfiguration = defaultJvmScriptingEnvironment,
|
||||||
noinline body: ScriptCompilationConfiguration.Builder.() -> Unit = {}
|
noinline body: ScriptCompilationConfiguration.Builder.() -> Unit = {}
|
||||||
): ScriptCompilationConfiguration = createScriptCompilationConfigurationFromAnnotatedBaseClass(
|
): ScriptCompilationConfiguration = createScriptCompilationConfigurationFromAnnotatedBaseClass(
|
||||||
KotlinType(T::class),
|
KotlinType(T::class),
|
||||||
hostEnvironment,
|
hostConfiguration,
|
||||||
ScriptCompilationConfiguration::class,
|
ScriptCompilationConfiguration::class,
|
||||||
body
|
body
|
||||||
)
|
)
|
||||||
|
|||||||
+7
-5
@@ -38,7 +38,9 @@ import java.io.File
|
|||||||
import java.net.URLClassLoader
|
import java.net.URLClassLoader
|
||||||
import kotlin.script.experimental.api.*
|
import kotlin.script.experimental.api.*
|
||||||
import kotlin.script.experimental.dependencies.DependenciesResolver
|
import kotlin.script.experimental.dependencies.DependenciesResolver
|
||||||
|
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
||||||
import kotlin.script.experimental.host.getMergedScriptText
|
import kotlin.script.experimental.host.getMergedScriptText
|
||||||
|
import kotlin.script.experimental.host.getScriptingClass
|
||||||
import kotlin.script.experimental.jvm.JvmDependency
|
import kotlin.script.experimental.jvm.JvmDependency
|
||||||
import kotlin.script.experimental.jvm.impl.BridgeDependenciesResolver
|
import kotlin.script.experimental.jvm.impl.BridgeDependenciesResolver
|
||||||
import kotlin.script.experimental.jvm.javaHome
|
import kotlin.script.experimental.jvm.javaHome
|
||||||
@@ -74,7 +76,7 @@ class KJvmCompiledScript<out ScriptBase : Any>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class KJvmCompilerImpl(val hostEnvironment: ScriptingEnvironment) : KJvmCompilerProxy {
|
class KJvmCompilerImpl(val hostConfiguration: ScriptingHostConfiguration) : KJvmCompilerProxy {
|
||||||
|
|
||||||
override fun compile(
|
override fun compile(
|
||||||
script: ScriptSource,
|
script: ScriptSource,
|
||||||
@@ -104,13 +106,13 @@ class KJvmCompilerImpl(val hostEnvironment: ScriptingEnvironment) : KJvmCompiler
|
|||||||
val kotlinCompilerConfiguration = org.jetbrains.kotlin.config.CompilerConfiguration().apply {
|
val kotlinCompilerConfiguration = org.jetbrains.kotlin.config.CompilerConfiguration().apply {
|
||||||
add(
|
add(
|
||||||
JVMConfigurationKeys.SCRIPT_DEFINITIONS,
|
JVMConfigurationKeys.SCRIPT_DEFINITIONS,
|
||||||
BridgeScriptDefinition(scriptCompilationConfiguration, hostEnvironment, ::updateClasspath)
|
BridgeScriptDefinition(scriptCompilationConfiguration, hostConfiguration, ::updateClasspath)
|
||||||
)
|
)
|
||||||
put<MessageCollector>(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
|
put<MessageCollector>(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
|
||||||
put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true)
|
put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true)
|
||||||
|
|
||||||
var isModularJava = false
|
var isModularJava = false
|
||||||
getFirstFromChainOrNull(ScriptCompilationConfiguration.jvm.javaHome, updatedConfiguration, hostEnvironment)?.let {
|
getFirstFromChainOrNull(ScriptCompilationConfiguration.jvm.javaHome, updatedConfiguration, hostConfiguration)?.let {
|
||||||
put(JVMConfigurationKeys.JDK_HOME, it)
|
put(JVMConfigurationKeys.JDK_HOME, it)
|
||||||
isModularJava = CoreJrtFileSystem.isModularJdk(it)
|
isModularJava = CoreJrtFileSystem.isModularJdk(it)
|
||||||
}
|
}
|
||||||
@@ -238,10 +240,10 @@ class ScriptDiagnosticsMessageCollector : MessageCollector {
|
|||||||
|
|
||||||
internal class BridgeScriptDefinition(
|
internal class BridgeScriptDefinition(
|
||||||
scriptCompilationConfiguration: ScriptCompilationConfiguration,
|
scriptCompilationConfiguration: ScriptCompilationConfiguration,
|
||||||
hostEnvironment: ScriptingEnvironment,
|
hostConfiguration: ScriptingHostConfiguration,
|
||||||
updateClasspath: (List<File>) -> Unit
|
updateClasspath: (List<File>) -> Unit
|
||||||
) : KotlinScriptDefinition(
|
) : KotlinScriptDefinition(
|
||||||
hostEnvironment.getScriptingClass(
|
hostConfiguration.getScriptingClass(
|
||||||
scriptCompilationConfiguration.getOrError(ScriptCompilationConfiguration.baseClass),
|
scriptCompilationConfiguration.getOrError(ScriptCompilationConfiguration.baseClass),
|
||||||
BridgeScriptDefinition::class
|
BridgeScriptDefinition::class
|
||||||
)
|
)
|
||||||
|
|||||||
+3
-3
@@ -5,14 +5,14 @@
|
|||||||
|
|
||||||
package kotlin.script.experimental.jvmhost.impl
|
package kotlin.script.experimental.jvmhost.impl
|
||||||
|
|
||||||
import kotlin.script.experimental.api.ScriptingEnvironment
|
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
||||||
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
|
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
|
||||||
|
|
||||||
fun ScriptingEnvironment.withDefaults(): ScriptingEnvironment =
|
fun ScriptingHostConfiguration.withDefaults(): ScriptingHostConfiguration =
|
||||||
if (this == defaultJvmScriptingEnvironment || defaultJvmScriptingEnvironment.properties.all {
|
if (this == defaultJvmScriptingEnvironment || defaultJvmScriptingEnvironment.properties.all {
|
||||||
this.properties.containsKey(it.key)
|
this.properties.containsKey(it.key)
|
||||||
}) {
|
}) {
|
||||||
this
|
this
|
||||||
} else {
|
} else {
|
||||||
ScriptingEnvironment(defaultJvmScriptingEnvironment, this)
|
ScriptingHostConfiguration(defaultJvmScriptingEnvironment, this)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -8,6 +8,7 @@
|
|||||||
package kotlin.script.experimental.jvmhost
|
package kotlin.script.experimental.jvmhost
|
||||||
|
|
||||||
import kotlin.script.experimental.api.*
|
import kotlin.script.experimental.api.*
|
||||||
|
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
||||||
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
|
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
|
||||||
import kotlin.script.experimental.jvmhost.impl.KJvmCompilerImpl
|
import kotlin.script.experimental.jvmhost.impl.KJvmCompilerImpl
|
||||||
import kotlin.script.experimental.jvmhost.impl.withDefaults
|
import kotlin.script.experimental.jvmhost.impl.withDefaults
|
||||||
@@ -29,8 +30,8 @@ interface CompiledJvmScriptsCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
open class JvmScriptCompiler(
|
open class JvmScriptCompiler(
|
||||||
hostEnvironment: ScriptingEnvironment = defaultJvmScriptingEnvironment,
|
hostConfiguration: ScriptingHostConfiguration = defaultJvmScriptingEnvironment,
|
||||||
val compilerProxy: KJvmCompilerProxy = KJvmCompilerImpl(hostEnvironment.withDefaults()),
|
val compilerProxy: KJvmCompilerProxy = KJvmCompilerImpl(hostConfiguration.withDefaults()),
|
||||||
val cache: CompiledJvmScriptsCache = CompiledJvmScriptsCache.NoCache
|
val cache: CompiledJvmScriptsCache = CompiledJvmScriptsCache.NoCache
|
||||||
) : ScriptCompiler {
|
) : ScriptCompiler {
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ package kotlin.script.experimental.jvm
|
|||||||
import org.jetbrains.kotlin.script.util.scriptCompilationClasspathFromContext
|
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.host.ScriptingHostConfiguration
|
||||||
import kotlin.script.experimental.util.PropertiesCollection
|
import kotlin.script.experimental.util.PropertiesCollection
|
||||||
|
|
||||||
data class JvmDependency(val classpath: List<File>) : ScriptDependency {
|
data class JvmDependency(val classpath: List<File>) : ScriptDependency {
|
||||||
@@ -37,7 +38,7 @@ fun JvmScriptCompilationConfigurationBuilder.dependenciesFromClassloader(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val JvmScriptCompilationConfigurationKeys.javaHome by PropertiesCollection.keyCopy(ScriptingEnvironment.jvm.javaHome)
|
val JvmScriptCompilationConfigurationKeys.javaHome by PropertiesCollection.keyCopy(ScriptingHostConfiguration.jvm.javaHome)
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
val ScriptCompilationConfigurationKeys.jvm
|
val ScriptCompilationConfigurationKeys.jvm
|
||||||
|
|||||||
+11
-10
@@ -9,24 +9,25 @@ import java.io.File
|
|||||||
import java.net.URLClassLoader
|
import java.net.URLClassLoader
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
import kotlin.script.experimental.api.*
|
import kotlin.script.experimental.api.*
|
||||||
|
import kotlin.script.experimental.host.*
|
||||||
import kotlin.script.experimental.util.PropertiesCollection
|
import kotlin.script.experimental.util.PropertiesCollection
|
||||||
|
|
||||||
interface JvmScriptingEnvironmentKeys
|
interface JvmScriptingHostConfigurationKeys
|
||||||
|
|
||||||
open class JvmScriptingEnvironmentBuilder : JvmScriptingEnvironmentKeys, PropertiesCollection.Builder() {
|
open class JvmScriptingHostConfigurationBuilder : JvmScriptingHostConfigurationKeys, PropertiesCollection.Builder() {
|
||||||
|
|
||||||
companion object : PropertiesCollection.Builder.BuilderExtension<JvmScriptingEnvironmentBuilder>, JvmScriptingEnvironmentKeys {
|
companion object : PropertiesCollection.Builder.BuilderExtension<JvmScriptingHostConfigurationBuilder>, JvmScriptingHostConfigurationKeys {
|
||||||
override fun get() = JvmScriptingEnvironmentBuilder()
|
override fun get() = JvmScriptingHostConfigurationBuilder()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val JvmScriptingEnvironmentKeys.javaHome by PropertiesCollection.key<File>(File(System.getProperty("java.home")))
|
val JvmScriptingHostConfigurationKeys.javaHome by PropertiesCollection.key<File>(File(System.getProperty("java.home")))
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
val ScriptingEnvironmentKeys.jvm
|
val ScriptingHostConfigurationKeys.jvm
|
||||||
get() = JvmScriptingEnvironmentBuilder
|
get() = JvmScriptingHostConfigurationBuilder
|
||||||
|
|
||||||
val defaultJvmScriptingEnvironment = ScriptingEnvironment {
|
val defaultJvmScriptingEnvironment = ScriptingHostConfiguration {
|
||||||
getScriptingClass(JvmGetScriptingClass())
|
getScriptingClass(JvmGetScriptingClass())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +39,7 @@ class JvmGetScriptingClass : GetScriptingClass {
|
|||||||
private var baseClassLoader: ClassLoader? = null
|
private var baseClassLoader: ClassLoader? = null
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
override fun invoke(classType: KotlinType, contextClass: KClass<*>, environment: ScriptingEnvironment): KClass<*> {
|
override fun invoke(classType: KotlinType, contextClass: KClass<*>, hostConfiguration: ScriptingHostConfiguration): KClass<*> {
|
||||||
|
|
||||||
// checking if class already loaded in the same context
|
// checking if class already loaded in the same context
|
||||||
val contextClassloader = contextClass.java.classLoader
|
val contextClassloader = contextClass.java.classLoader
|
||||||
@@ -49,7 +50,7 @@ class JvmGetScriptingClass : GetScriptingClass {
|
|||||||
if (actualClassLoadersChain.any { it == fromClass.java.classLoader }) return fromClass
|
if (actualClassLoadersChain.any { it == fromClass.java.classLoader }) return fromClass
|
||||||
}
|
}
|
||||||
|
|
||||||
val newDeps = environment[ScriptingEnvironment.configurationDependencies]
|
val newDeps = hostConfiguration[ScriptingHostConfiguration.configurationDependencies]
|
||||||
if (dependencies == null) {
|
if (dependencies == null) {
|
||||||
dependencies = newDeps
|
dependencies = newDeps
|
||||||
} else {
|
} else {
|
||||||
+6
-4
@@ -16,6 +16,8 @@ import kotlin.reflect.KType
|
|||||||
import kotlin.reflect.full.starProjectedType
|
import kotlin.reflect.full.starProjectedType
|
||||||
import kotlin.script.experimental.api.*
|
import kotlin.script.experimental.api.*
|
||||||
import kotlin.script.experimental.dependencies.DependenciesResolver
|
import kotlin.script.experimental.dependencies.DependenciesResolver
|
||||||
|
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
||||||
|
import kotlin.script.experimental.host.getScriptingClass
|
||||||
import kotlin.script.experimental.jvm.impl.BridgeDependenciesResolver
|
import kotlin.script.experimental.jvm.impl.BridgeDependenciesResolver
|
||||||
import kotlin.script.experimental.location.ScriptExpectedLocation
|
import kotlin.script.experimental.location.ScriptExpectedLocation
|
||||||
import kotlin.script.experimental.util.getOrError
|
import kotlin.script.experimental.util.getOrError
|
||||||
@@ -25,7 +27,7 @@ abstract class KotlinScriptDefinitionAdapterFromNewAPIBase : KotlinScriptDefinit
|
|||||||
|
|
||||||
protected abstract val scriptCompilationConfiguration: ScriptCompilationConfiguration
|
protected abstract val scriptCompilationConfiguration: ScriptCompilationConfiguration
|
||||||
|
|
||||||
protected abstract val hostEnvironment: ScriptingEnvironment
|
protected abstract val hostConfiguration: ScriptingHostConfiguration
|
||||||
|
|
||||||
abstract val scriptFileExtensionWithDot: String
|
abstract val scriptFileExtensionWithDot: String
|
||||||
|
|
||||||
@@ -83,7 +85,7 @@ abstract class KotlinScriptDefinitionAdapterFromNewAPIBase : KotlinScriptDefinit
|
|||||||
)
|
)
|
||||||
|
|
||||||
private val scriptingClassGetter by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
private val scriptingClassGetter by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||||
hostEnvironment[ScriptingEnvironment.getScriptingClass]
|
hostConfiguration[ScriptingHostConfiguration.getScriptingClass]
|
||||||
?: throw IllegalArgumentException("Expecting 'getScriptingClass' property in the scripting environment")
|
?: throw IllegalArgumentException("Expecting 'getScriptingClass' property in the scripting environment")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,14 +93,14 @@ abstract class KotlinScriptDefinitionAdapterFromNewAPIBase : KotlinScriptDefinit
|
|||||||
scriptingClassGetter(
|
scriptingClassGetter(
|
||||||
type,
|
type,
|
||||||
KotlinScriptDefinition::class, // Assuming that the KotlinScriptDefinition class is loaded in the proper classloader
|
KotlinScriptDefinition::class, // Assuming that the KotlinScriptDefinition class is loaded in the proper classloader
|
||||||
hostEnvironment
|
hostConfiguration
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class KotlinScriptDefinitionAdapterFromNewAPI(
|
class KotlinScriptDefinitionAdapterFromNewAPI(
|
||||||
override val scriptCompilationConfiguration: ScriptCompilationConfiguration,
|
override val scriptCompilationConfiguration: ScriptCompilationConfiguration,
|
||||||
override val hostEnvironment: ScriptingEnvironment
|
override val hostConfiguration: ScriptingHostConfiguration
|
||||||
) : KotlinScriptDefinitionAdapterFromNewAPIBase() {
|
) : KotlinScriptDefinitionAdapterFromNewAPIBase() {
|
||||||
|
|
||||||
override val name: String get() = scriptCompilationConfiguration[ScriptCompilationConfiguration.displayName] ?: super.name
|
override val name: String get() = scriptCompilationConfiguration[ScriptCompilationConfiguration.displayName] ?: super.name
|
||||||
|
|||||||
+6
-4
@@ -16,7 +16,9 @@ import java.io.File
|
|||||||
import kotlin.script.experimental.annotations.KotlinScript
|
import kotlin.script.experimental.annotations.KotlinScript
|
||||||
import kotlin.script.experimental.annotations.KotlinScriptFileExtension
|
import kotlin.script.experimental.annotations.KotlinScriptFileExtension
|
||||||
import kotlin.script.experimental.api.*
|
import kotlin.script.experimental.api.*
|
||||||
import kotlin.script.experimental.configuration.createScriptCompilationConfigurationFromAnnotatedBaseClass
|
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
||||||
|
import kotlin.script.experimental.host.configurationDependencies
|
||||||
|
import kotlin.script.experimental.host.createScriptCompilationConfigurationFromAnnotatedBaseClass
|
||||||
import kotlin.script.experimental.jvm.JvmDependency
|
import kotlin.script.experimental.jvm.JvmDependency
|
||||||
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
|
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
|
||||||
|
|
||||||
@@ -34,8 +36,8 @@ class LazyScriptDefinitionFromDiscoveredClass internal constructor(
|
|||||||
messageCollector: MessageCollector
|
messageCollector: MessageCollector
|
||||||
) : this(loadAnnotationsFromClass(classBytes), className, classpath, messageCollector)
|
) : this(loadAnnotationsFromClass(classBytes), className, classpath, messageCollector)
|
||||||
|
|
||||||
override val hostEnvironment: ScriptingEnvironment by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
override val hostConfiguration: ScriptingHostConfiguration by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||||
ScriptingEnvironment {
|
ScriptingHostConfiguration {
|
||||||
include(defaultJvmScriptingEnvironment)
|
include(defaultJvmScriptingEnvironment)
|
||||||
configurationDependencies(JvmDependency(classpath))
|
configurationDependencies(JvmDependency(classpath))
|
||||||
}
|
}
|
||||||
@@ -49,7 +51,7 @@ class LazyScriptDefinitionFromDiscoveredClass internal constructor(
|
|||||||
try {
|
try {
|
||||||
createScriptCompilationConfigurationFromAnnotatedBaseClass(
|
createScriptCompilationConfigurationFromAnnotatedBaseClass(
|
||||||
KotlinType(className),
|
KotlinType(className),
|
||||||
hostEnvironment,
|
hostConfiguration,
|
||||||
LazyScriptDefinitionFromDiscoveredClass::class
|
LazyScriptDefinitionFromDiscoveredClass::class
|
||||||
)
|
)
|
||||||
} catch (ex: ClassNotFoundException) {
|
} catch (ex: ClassNotFoundException) {
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ 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.configuration.createScriptCompilationConfigurationFromAnnotatedBaseClass
|
import kotlin.script.experimental.host.createScriptCompilationConfigurationFromAnnotatedBaseClass
|
||||||
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
|
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
|
||||||
import kotlin.script.templates.ScriptTemplateDefinition
|
import kotlin.script.templates.ScriptTemplateDefinition
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user