Clean and fix new scripting API

This commit is contained in:
Ilya Chernikov
2018-07-13 19:05:37 +02:00
parent f2a8e5c248
commit a54675abe7
20 changed files with 111 additions and 95 deletions
@@ -18,6 +18,7 @@ import kotlin.script.experimental.api.*
import kotlin.script.experimental.dependencies.DependenciesResolver
import kotlin.script.experimental.jvm.impl.BridgeDependenciesResolver
import kotlin.script.experimental.location.ScriptExpectedLocation
import kotlin.script.experimental.util.chainPropertyBags
// temporary trick with passing Any as a template and overwriting it below, TODO: fix after introducing new script definitions hierarchy
abstract class KotlinScriptDefinitionAdapterFromNewAPIBase : KotlinScriptDefinition(Any::class) {
@@ -26,8 +27,12 @@ abstract class KotlinScriptDefinitionAdapterFromNewAPIBase : KotlinScriptDefinit
abstract val scriptFileExtensionWithDot: String
protected val baseCompilationConfiguration by lazy(LazyThreadSafetyMode.PUBLICATION) {
chainPropertyBags(scriptDefinition.compilationConfigurator?.defaultConfiguration, scriptDefinition.properties)
}
open val baseClass: KClass<*> by lazy(LazyThreadSafetyMode.PUBLICATION) {
getScriptingClass(scriptDefinition.compilationConfigurator.defaultConfiguration[ScriptingEnvironmentProperties.baseClass])
getScriptingClass(baseCompilationConfiguration[ScriptDefinitionProperties.baseClass])
}
override val template: KClass<*> get() = baseClass
@@ -49,28 +54,28 @@ abstract class KotlinScriptDefinitionAdapterFromNewAPIBase : KotlinScriptDefinit
get() = emptyList()
override val dependencyResolver: DependenciesResolver by lazy(LazyThreadSafetyMode.PUBLICATION) {
BridgeDependenciesResolver(scriptDefinition.compilationConfigurator)
BridgeDependenciesResolver(scriptDefinition, baseCompilationConfiguration)
}
override val acceptedAnnotations: List<KClass<out Annotation>> by lazy(LazyThreadSafetyMode.PUBLICATION) {
scriptDefinition.compilationConfigurator.defaultConfiguration.getOrNull(ScriptCompileConfigurationProperties.refineConfigurationOnAnnotations)
baseCompilationConfiguration.getOrNull(ScriptCompileConfigurationProperties.refineConfigurationOnAnnotations)
.orEmpty()
.map { getScriptingClass(it) as KClass<out Annotation> }
}
override val implicitReceivers: List<KType> by lazy(LazyThreadSafetyMode.PUBLICATION) {
scriptDefinition.compilationConfigurator.defaultConfiguration.getOrNull(ScriptCompileConfigurationProperties.scriptImplicitReceivers)
baseCompilationConfiguration.getOrNull(ScriptCompileConfigurationProperties.scriptImplicitReceivers)
.orEmpty()
.map { getScriptingClass(it).starProjectedType }
}
override val environmentVariables: List<Pair<String, KType>> by lazy(LazyThreadSafetyMode.PUBLICATION) {
scriptDefinition.compilationConfigurator.defaultConfiguration.getOrNull(ScriptCompileConfigurationProperties.contextVariables)
baseCompilationConfiguration.getOrNull(ScriptCompileConfigurationProperties.contextVariables)
?.map { (k, v) -> k to getScriptingClass(v).starProjectedType }.orEmpty()
}
override val additionalCompilerArguments: List<String>
get() = scriptDefinition.compilationConfigurator.defaultConfiguration.getOrNull(ScriptCompileConfigurationProperties.compilerOptions)
get() = baseCompilationConfiguration.getOrNull(ScriptCompileConfigurationProperties.compilerOptions)
.orEmpty()
override val scriptExpectedLocations: List<ScriptExpectedLocation> =
@@ -80,11 +85,11 @@ abstract class KotlinScriptDefinitionAdapterFromNewAPIBase : KotlinScriptDefinit
)
override val targetClassAnnotations: List<Annotation>
get() = scriptDefinition.compilationConfigurator.defaultConfiguration.getOrNull(ScriptCompileConfigurationProperties.generatedClassAnnotations)
get() = baseCompilationConfiguration.getOrNull(ScriptCompileConfigurationProperties.generatedClassAnnotations)
.orEmpty()
override val targetMethodAnnotations: List<Annotation>
get() = scriptDefinition.compilationConfigurator.defaultConfiguration.getOrNull(ScriptCompileConfigurationProperties.generatedMethodAnnotations)
get() = baseCompilationConfiguration.getOrNull(ScriptCompileConfigurationProperties.generatedMethodAnnotations)
.orEmpty()
private val scriptingClassGetter by lazy(LazyThreadSafetyMode.PUBLICATION) {
@@ -41,8 +41,8 @@ class LazyScriptDefinitionFromDiscoveredClass internal constructor(
)
try {
ScriptDefinitionFromAnnotatedBaseClass(
KotlinType(className),
ScriptingEnvironment(
ScriptingEnvironmentProperties.baseClass to KotlinType(className),
ScriptingEnvironmentProperties.configurationDependencies to listOf(JvmDependency(classpath)),
ScriptingEnvironmentProperties.getScriptingClass to JvmGetScriptingClass()
)
@@ -276,8 +276,8 @@ private fun loadScriptDefinition(
if (cls.annotations.firstIsInstanceOrNull<KotlinScript>() != null) {
KotlinScriptDefinitionAdapterFromNewAPI(
ScriptDefinitionFromAnnotatedBaseClass(
KotlinType(cls.kotlin),
ScriptingEnvironment(
ScriptingEnvironmentProperties.baseClass to KotlinType(cls.kotlin),
ScriptingEnvironmentProperties.getScriptingClass to JvmGetScriptingClass()
)
)