Rename ScriptDefinition to ScriptCompileConfiguration
This commit is contained in:
+3
-3
@@ -13,14 +13,14 @@
|
||||
package kotlin.script.experimental.annotations
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.script.experimental.api.ScriptDefinition
|
||||
import kotlin.script.experimental.api.ScriptCompilationConfiguration
|
||||
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
annotation class KotlinScript(
|
||||
val name: String = "Kotlin script",
|
||||
val extension: String = "kts",
|
||||
val definition: KClass<out ScriptDefinition> = ScriptDefinition.Default::class // object or class filled in 0-ary constructor
|
||||
val compilationConfiguration: KClass<out ScriptCompilationConfiguration> = ScriptCompilationConfiguration.Default::class // object or class filled in 0-ary constructor
|
||||
)
|
||||
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@@ -32,5 +32,5 @@ annotation class KotlinScriptFileExtension(
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
annotation class KotlinScriptProperties(
|
||||
val definition: KClass<out ScriptDefinition> // object or class filled in 0-ary constructor
|
||||
val compilationConfiguration: KClass<out ScriptCompilationConfiguration> // object or class filled in 0-ary constructor
|
||||
)
|
||||
|
||||
@@ -9,14 +9,14 @@ interface ScriptCompiler {
|
||||
|
||||
suspend operator fun invoke(
|
||||
script: ScriptSource,
|
||||
scriptDefinition: ScriptDefinition
|
||||
scriptCompilationConfiguration: ScriptCompilationConfiguration
|
||||
): ResultWithDiagnostics<CompiledScript<*>>
|
||||
}
|
||||
|
||||
|
||||
interface CompiledScript<out ScriptBase : Any> {
|
||||
|
||||
val definition: ScriptDefinition
|
||||
val compilationConfiguration: ScriptCompilationConfiguration
|
||||
|
||||
suspend fun instantiate(scriptEvaluationEnvironment: ScriptEvaluationEnvironment?): ResultWithDiagnostics<ScriptBase>
|
||||
}
|
||||
|
||||
+2
-2
@@ -23,11 +23,11 @@ val ScriptCollectedDataKeys.foundFragments by PropertiesCollection.key<List<Scri
|
||||
|
||||
class ScriptDataFacade(
|
||||
val source: ScriptSource,
|
||||
val definition: ScriptDefinition,
|
||||
val compilationConfiguration: ScriptCompilationConfiguration,
|
||||
val collectedData: ScriptCollectedData? = null
|
||||
)
|
||||
|
||||
typealias RefineScriptCompilationConfigurationHandler = (ScriptDataFacade) -> ResultWithDiagnostics<ScriptDefinition?>
|
||||
typealias RefineScriptCompilationConfigurationHandler = (ScriptDataFacade) -> ResultWithDiagnostics<ScriptCompilationConfiguration?>
|
||||
|
||||
// to make it "hasheable" for cashing
|
||||
class RefineConfigurationBeforeParsingData(
|
||||
|
||||
@@ -10,65 +10,67 @@ package kotlin.script.experimental.api
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.script.experimental.util.PropertiesCollection
|
||||
|
||||
interface ScriptDefinitionKeys
|
||||
interface ScriptCompilationConfigurationKeys
|
||||
|
||||
open class ScriptDefinition(baseDefinitions: Iterable<ScriptDefinition>, body: Builder.() -> Unit) :
|
||||
PropertiesCollection(Builder(baseDefinitions).apply(body).data) {
|
||||
open class ScriptCompilationConfiguration(baseConfigurations: Iterable<ScriptCompilationConfiguration>, body: Builder.() -> Unit) :
|
||||
PropertiesCollection(Builder(baseConfigurations).apply(body).data) {
|
||||
|
||||
constructor(body: Builder.() -> Unit = {}) : this(emptyList(), body)
|
||||
constructor(vararg baseDefinitions: ScriptDefinition, body: Builder.() -> Unit = {}) : this(baseDefinitions.asIterable(), body)
|
||||
constructor(
|
||||
vararg baseConfigurations: ScriptCompilationConfiguration, body: Builder.() -> Unit = {}
|
||||
) : this(baseConfigurations.asIterable(), body)
|
||||
|
||||
class Builder internal constructor(baseDefinitions: Iterable<ScriptDefinition>) :
|
||||
ScriptDefinitionKeys,
|
||||
PropertiesCollection.Builder(baseDefinitions)
|
||||
class Builder internal constructor(baseConfigurations: Iterable<ScriptCompilationConfiguration>) :
|
||||
ScriptCompilationConfigurationKeys,
|
||||
PropertiesCollection.Builder(baseConfigurations)
|
||||
|
||||
// inherited from script definition for using as a keys anchor
|
||||
companion object : ScriptDefinitionKeys
|
||||
// inherited from script compilationConfiguration for using as a keys anchor
|
||||
companion object : ScriptCompilationConfigurationKeys
|
||||
|
||||
object Default : ScriptDefinition()
|
||||
object Default : ScriptCompilationConfiguration()
|
||||
}
|
||||
|
||||
val ScriptDefinitionKeys.displayName by PropertiesCollection.key<String>("Kotlin script") // Name of the script type
|
||||
val ScriptCompilationConfigurationKeys.displayName by PropertiesCollection.key<String>("Kotlin script") // Name of the script type
|
||||
|
||||
val ScriptDefinitionKeys.fileExtension by PropertiesCollection.key<String>("kts") // file extension
|
||||
val ScriptCompilationConfigurationKeys.fileExtension by PropertiesCollection.key<String>("kts") // file extension
|
||||
|
||||
val ScriptDefinitionKeys.baseClass by PropertiesCollection.key<KotlinType>() // script base class
|
||||
val ScriptCompilationConfigurationKeys.baseClass by PropertiesCollection.key<KotlinType>() // script base class
|
||||
|
||||
val ScriptDefinitionKeys.scriptBodyTarget by PropertiesCollection.key<ScriptBodyTarget>(ScriptBodyTarget.Constructor)
|
||||
val ScriptCompilationConfigurationKeys.scriptBodyTarget by PropertiesCollection.key<ScriptBodyTarget>(ScriptBodyTarget.Constructor)
|
||||
|
||||
val ScriptDefinitionKeys.implicitReceivers by PropertiesCollection.key<List<KotlinType>>() // in the order from outer to inner scope
|
||||
val ScriptCompilationConfigurationKeys.implicitReceivers by PropertiesCollection.key<List<KotlinType>>() // in the order from outer to inner scope
|
||||
|
||||
val ScriptDefinitionKeys.providedProperties by PropertiesCollection.key<Map<String, KotlinType>>() // external variables
|
||||
val ScriptCompilationConfigurationKeys.providedProperties by PropertiesCollection.key<Map<String, KotlinType>>() // external variables
|
||||
|
||||
val ScriptDefinitionKeys.defaultImports by PropertiesCollection.key<List<String>>()
|
||||
val ScriptCompilationConfigurationKeys.defaultImports by PropertiesCollection.key<List<String>>()
|
||||
|
||||
val ScriptDefinitionKeys.dependencies by PropertiesCollection.key<List<ScriptDependency>>()
|
||||
val ScriptCompilationConfigurationKeys.dependencies by PropertiesCollection.key<List<ScriptDependency>>()
|
||||
|
||||
val ScriptDefinitionKeys.copyAnnotationsFrom by PropertiesCollection.key<List<KotlinType>>()
|
||||
val ScriptCompilationConfigurationKeys.copyAnnotationsFrom by PropertiesCollection.key<List<KotlinType>>()
|
||||
|
||||
val ScriptDefinitionKeys.compilerOptions by PropertiesCollection.key<List<String>>() // Q: CommonCompilerOptions instead?
|
||||
val ScriptCompilationConfigurationKeys.compilerOptions by PropertiesCollection.key<List<String>>() // Q: CommonCompilerOptions instead?
|
||||
|
||||
val ScriptDefinitionKeys.refineConfigurationBeforeParsing by PropertiesCollection.key<RefineConfigurationBeforeParsingData>()
|
||||
val ScriptCompilationConfigurationKeys.refineConfigurationBeforeParsing by PropertiesCollection.key<RefineConfigurationBeforeParsingData>()
|
||||
|
||||
val ScriptDefinitionKeys.refineConfigurationOnAnnotations by PropertiesCollection.key<RefineConfigurationOnAnnotationsData>()
|
||||
val ScriptCompilationConfigurationKeys.refineConfigurationOnAnnotations by PropertiesCollection.key<RefineConfigurationOnAnnotationsData>()
|
||||
|
||||
val ScriptDefinitionKeys.refineConfigurationOnSections by PropertiesCollection.key<RefineConfigurationOnSectionsData>()
|
||||
val ScriptCompilationConfigurationKeys.refineConfigurationOnSections by PropertiesCollection.key<RefineConfigurationOnSectionsData>()
|
||||
|
||||
val ScriptDefinitionKeys.sourceFragments by PropertiesCollection.key<List<ScriptSourceNamedFragment>>()
|
||||
val ScriptCompilationConfigurationKeys.sourceFragments by PropertiesCollection.key<List<ScriptSourceNamedFragment>>()
|
||||
|
||||
// DSL:
|
||||
|
||||
val ScriptDefinition.Builder.refineConfiguration get() = RefineConfigurationBuilder()
|
||||
val ScriptCompilationConfiguration.Builder.refineConfiguration get() = RefineConfigurationBuilder()
|
||||
|
||||
|
||||
class RefineConfigurationBuilder : PropertiesCollection.Builder() {
|
||||
|
||||
fun beforeParsing(handler: RefineScriptCompilationConfigurationHandler) {
|
||||
set(ScriptDefinition.refineConfigurationBeforeParsing, RefineConfigurationBeforeParsingData(handler))
|
||||
set(ScriptCompilationConfiguration.refineConfigurationBeforeParsing, RefineConfigurationBeforeParsingData(handler))
|
||||
}
|
||||
|
||||
fun onAnnotations(annotations: List<KotlinType>, handler: RefineScriptCompilationConfigurationHandler) {
|
||||
set(ScriptDefinition.refineConfigurationOnAnnotations, RefineConfigurationOnAnnotationsData(annotations, handler))
|
||||
set(ScriptCompilationConfiguration.refineConfigurationOnAnnotations, RefineConfigurationOnAnnotationsData(annotations, handler))
|
||||
}
|
||||
|
||||
fun onAnnotations(vararg annotations: KotlinType, handler: RefineScriptCompilationConfigurationHandler) {
|
||||
@@ -88,7 +90,7 @@ class RefineConfigurationBuilder : PropertiesCollection.Builder() {
|
||||
}
|
||||
|
||||
fun onSections(sections: List<String>, handler: RefineScriptCompilationConfigurationHandler) {
|
||||
set(ScriptDefinition.refineConfigurationOnSections, RefineConfigurationOnSectionsData(sections, handler))
|
||||
set(ScriptCompilationConfiguration.refineConfigurationOnSections, RefineConfigurationOnSectionsData(sections, handler))
|
||||
}
|
||||
|
||||
fun onSections(vararg sections: String, handler: RefineScriptCompilationConfigurationHandler) {
|
||||
|
||||
@@ -20,7 +20,7 @@ class ScriptEvaluationEnvironment(baseEvaluationEnvironments: Iterable<ScriptEva
|
||||
) : this(baseEvaluationEnvironments.asIterable(), body)
|
||||
|
||||
class Builder internal constructor(baseEvaluationEnvironments: Iterable<ScriptEvaluationEnvironment>) :
|
||||
ScriptDefinitionKeys,
|
||||
ScriptCompilationConfigurationKeys,
|
||||
PropertiesCollection.Builder(baseEvaluationEnvironments)
|
||||
|
||||
companion object : ScriptEvaluationEnvironmentKeys
|
||||
|
||||
+11
-11
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* 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.definitions
|
||||
package kotlin.script.experimental.configuration
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.script.experimental.annotations.KotlinScript
|
||||
@@ -14,14 +14,14 @@ import kotlin.script.experimental.api.*
|
||||
private const val ERROR_MSG_PREFIX = "Unable to construct script definition: "
|
||||
|
||||
private const val ILLEGAL_CONFIG_ANN_ARG =
|
||||
"Illegal argument to KotlinScriptDefaultCompilationConfiguration annotation: expecting List-derived object or default-constructed class of configuration parameters"
|
||||
"Illegal argument compilationConfiguration of the KotlinScript annotation: expecting an object or default-constructed class derived from ScriptCompilationConfiguration"
|
||||
|
||||
fun createScriptDefinitionFromAnnotatedBaseClass(
|
||||
fun createScriptCompilationConfigurationFromAnnotatedBaseClass(
|
||||
baseClassType: KotlinType,
|
||||
environment: ScriptingEnvironment,
|
||||
contextClass: KClass<*> = ScriptDefinition::class,
|
||||
body: ScriptDefinition.Builder.() -> Unit = {}
|
||||
): ScriptDefinition {
|
||||
contextClass: KClass<*> = ScriptCompilationConfiguration::class,
|
||||
body: ScriptCompilationConfiguration.Builder.() -> Unit = {}
|
||||
): ScriptCompilationConfiguration {
|
||||
|
||||
val getScriptingClass = environment[ScriptingEnvironment.getScriptingClass]
|
||||
?: throw IllegalArgumentException("${ERROR_MSG_PREFIX}Expecting 'getScriptingClass' parameter in the scripting environment")
|
||||
@@ -37,21 +37,21 @@ fun createScriptDefinitionFromAnnotatedBaseClass(
|
||||
val mainAnnotation = baseClass.findAnnotation<KotlinScript>()
|
||||
?: throw IllegalArgumentException("${ERROR_MSG_PREFIX}Expecting KotlinScript annotation on the $baseClass")
|
||||
|
||||
fun scriptingPropsInstance(kclass: KClass<out ScriptDefinition>): ScriptDefinition = try {
|
||||
fun scriptingPropsInstance(kclass: KClass<out ScriptCompilationConfiguration>): ScriptCompilationConfiguration = try {
|
||||
kclass.objectInstance ?: kclass.createInstance()
|
||||
} catch (e: Throwable) {
|
||||
throw IllegalArgumentException(ILLEGAL_CONFIG_ANN_ARG, e)
|
||||
}
|
||||
|
||||
return ScriptDefinition {
|
||||
return ScriptCompilationConfiguration {
|
||||
baseClass(loadedBaseClassType)
|
||||
fileExtension(baseClass.findAnnotation<KotlinScriptFileExtension>()?.extension ?: mainAnnotation.extension)
|
||||
displayName(mainAnnotation.name)
|
||||
|
||||
include(scriptingPropsInstance(mainAnnotation.definition))
|
||||
include(scriptingPropsInstance(mainAnnotation.compilationConfiguration))
|
||||
|
||||
baseClass.java.annotations.filterIsInstance(KotlinScriptProperties::class.java).forEach { ann ->
|
||||
include(scriptingPropsInstance(ann.definition))
|
||||
include(scriptingPropsInstance(ann.compilationConfiguration))
|
||||
}
|
||||
body()
|
||||
}
|
||||
+2
-2
@@ -30,11 +30,11 @@ abstract class BasicScriptingHost(
|
||||
|
||||
open fun eval(
|
||||
script: ScriptSource,
|
||||
scriptDefinition: ScriptDefinition,
|
||||
scriptCompilationConfiguration: ScriptCompilationConfiguration,
|
||||
environment: ScriptEvaluationEnvironment?
|
||||
): ResultWithDiagnostics<EvaluationResult> =
|
||||
runInCoroutineContext {
|
||||
compiler(script, scriptDefinition).onSuccess {
|
||||
compiler(script, scriptCompilationConfiguration).onSuccess {
|
||||
evaluator(it, environment)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,9 @@ fun ScriptSource.getScriptText(): String = when {
|
||||
else -> throw RuntimeException("unable to get text from null script")
|
||||
}
|
||||
|
||||
fun getMergedScriptText(script: ScriptSource, configuration: ScriptDefinition?): String {
|
||||
fun getMergedScriptText(script: ScriptSource, configuration: ScriptCompilationConfiguration?): String {
|
||||
val originalScriptText = script.getScriptText()
|
||||
val sourceFragments = configuration?.get(ScriptDefinition.sourceFragments)
|
||||
val sourceFragments = configuration?.get(ScriptCompilationConfiguration.sourceFragments)
|
||||
return if (sourceFragments == null || sourceFragments.isEmpty()) {
|
||||
originalScriptText
|
||||
} else {
|
||||
|
||||
@@ -12,7 +12,7 @@ interface ReplSnippetChecker {
|
||||
suspend operator fun invoke(
|
||||
snippet: ReplSnippetSource,
|
||||
state: ReplStageState<*>,
|
||||
scriptDefinition: ScriptDefinition
|
||||
compilationConfiguration: ScriptCompilationConfiguration
|
||||
): ResultWithDiagnostics<Unit>
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ interface ReplSnippetCompiler {
|
||||
suspend operator fun invoke(
|
||||
snippet: ReplSnippetSource,
|
||||
state: ReplStageState<*>,
|
||||
scriptDefinition: ScriptDefinition
|
||||
compilationConfiguration: ScriptCompilationConfiguration
|
||||
): ResultWithDiagnostics<CompiledReplSnippet<*>>
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import kotlinx.coroutines.experimental.CoroutineScope
|
||||
import kotlinx.coroutines.experimental.runBlocking
|
||||
import kotlin.script.experimental.api.EvaluationResult
|
||||
import kotlin.script.experimental.api.ResultWithDiagnostics
|
||||
import kotlin.script.experimental.api.ScriptDefinition
|
||||
import kotlin.script.experimental.api.ScriptCompilationConfiguration
|
||||
import kotlin.script.experimental.util.PropertiesCollection
|
||||
|
||||
interface ReplCommandProcessor {
|
||||
@@ -51,7 +51,7 @@ abstract class ReplHost(
|
||||
abstract fun eval(
|
||||
snippet: ReplSnippetSource,
|
||||
state: ReplStageState<*>,
|
||||
scriptDefinition: ScriptDefinition,
|
||||
scriptCompilationConfiguration: ScriptCompilationConfiguration,
|
||||
replEvaluationEnvironment: ReplEvaluationEnvironment
|
||||
): ResultWithDiagnostics<EvaluationResult>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user