Remove ScriptCompileConfiguration as separate entity, refactor pieces accordingly
This commit is contained in:
@@ -9,8 +9,7 @@ interface ScriptCompiler {
|
||||
|
||||
suspend operator fun invoke(
|
||||
script: ScriptSource,
|
||||
scriptDefinition: ScriptDefinition,
|
||||
additionalConfiguration: ScriptCompileConfiguration? = null // overrides properties from definition and configurator.defaultConfiguration
|
||||
scriptDefinition: ScriptDefinition
|
||||
): ResultWithDiagnostics<CompiledScript<*>>
|
||||
}
|
||||
|
||||
@@ -18,7 +17,6 @@ interface ScriptCompiler {
|
||||
interface CompiledScript<out ScriptBase : Any> {
|
||||
|
||||
val definition: ScriptDefinition
|
||||
val additionalConfiguration: ScriptCompileConfiguration?
|
||||
|
||||
suspend fun instantiate(scriptEvaluationEnvironment: ScriptEvaluationEnvironment?): ResultWithDiagnostics<ScriptBase>
|
||||
}
|
||||
|
||||
+6
-33
@@ -9,37 +9,6 @@ package kotlin.script.experimental.api
|
||||
|
||||
import kotlin.script.experimental.util.PropertiesCollection
|
||||
|
||||
interface ScriptCompileConfigurationKeys
|
||||
|
||||
class ScriptCompileConfiguration(baseConfigurations: Iterable<ScriptCompileConfiguration>, body: Builder.() -> Unit) :
|
||||
PropertiesCollection(Builder(baseConfigurations).apply(body).data) {
|
||||
|
||||
constructor(body: Builder.() -> Unit = {}) : this(emptyList(), body)
|
||||
constructor(
|
||||
vararg baseConfigurations: ScriptCompileConfiguration, body: Builder.() -> Unit = {}
|
||||
) : this(baseConfigurations.asIterable(), body)
|
||||
|
||||
class Builder internal constructor(baseConfigurations: Iterable<ScriptCompileConfiguration>) :
|
||||
ScriptCompileConfigurationKeys,
|
||||
PropertiesCollection.Builder(baseConfigurations)
|
||||
|
||||
companion object : ScriptCompileConfigurationKeys
|
||||
}
|
||||
|
||||
val ScriptCompileConfigurationKeys.sourceFragments by PropertiesCollection.key<List<ScriptSourceNamedFragment>>()
|
||||
|
||||
val ScriptCompileConfigurationKeys.scriptBodyTarget by PropertiesCollection.keyCopy(ScriptDefinition.scriptBodyTarget)
|
||||
|
||||
val ScriptCompileConfigurationKeys.scriptImplicitReceivers by PropertiesCollection.keyCopy(ScriptDefinition.implicitReceivers)
|
||||
|
||||
val ScriptCompileConfigurationKeys.providedProperties by PropertiesCollection.keyCopy(ScriptDefinition.providedProperties)
|
||||
|
||||
val ScriptCompileConfigurationKeys.defaultImports by PropertiesCollection.keyCopy(ScriptDefinition.defaultImports)
|
||||
|
||||
val ScriptCompileConfigurationKeys.dependencies by PropertiesCollection.keyCopy(ScriptDefinition.dependencies)
|
||||
|
||||
val ScriptCompileConfigurationKeys.compilerOptions by PropertiesCollection.keyCopy(ScriptDefinition.compilerOptions)
|
||||
|
||||
|
||||
interface ScriptCollectedDataKeys
|
||||
|
||||
@@ -55,11 +24,15 @@ val ScriptCollectedDataKeys.foundFragments by PropertiesCollection.key<List<Scri
|
||||
class ScriptDataFacade(
|
||||
val source: ScriptSource,
|
||||
val definition: ScriptDefinition,
|
||||
val configuration: ScriptCompileConfiguration?,
|
||||
val collectedData: ScriptCollectedData? = null
|
||||
)
|
||||
|
||||
typealias RefineScriptCompilationConfigurationHandler = (ScriptDataFacade) -> ResultWithDiagnostics<ScriptCompileConfiguration?>
|
||||
typealias RefineScriptCompilationConfigurationHandler = (ScriptDataFacade) -> ResultWithDiagnostics<ScriptDefinition?>
|
||||
|
||||
// to make it "hasheable" for cashing
|
||||
class RefineConfigurationBeforeParsingData(
|
||||
val handler: RefineScriptCompilationConfigurationHandler
|
||||
)
|
||||
|
||||
class RefineConfigurationOnAnnotationsData(
|
||||
val annotations: List<KotlinType>,
|
||||
|
||||
@@ -45,18 +45,18 @@ val ScriptDefinitionKeys.defaultImports by PropertiesCollection.key<List<String>
|
||||
|
||||
val ScriptDefinitionKeys.dependencies by PropertiesCollection.key<List<ScriptDependency>>()
|
||||
|
||||
val ScriptDefinitionKeys.generatedClassAnnotations by PropertiesCollection.key<List<Annotation>>()
|
||||
|
||||
val ScriptDefinitionKeys.copyAnnotationsFrom by PropertiesCollection.key<List<KotlinType>>()
|
||||
|
||||
val ScriptDefinitionKeys.compilerOptions by PropertiesCollection.key<List<String>>() // Q: CommonCompilerOptions instead?
|
||||
|
||||
val ScriptDefinitionKeys.refineConfigurationBeforeParsing by PropertiesCollection.key<RefineScriptCompilationConfigurationHandler>() // default: false
|
||||
val ScriptDefinitionKeys.refineConfigurationBeforeParsing by PropertiesCollection.key<RefineConfigurationBeforeParsingData>()
|
||||
|
||||
val ScriptDefinitionKeys.refineConfigurationOnAnnotations by PropertiesCollection.key<RefineConfigurationOnAnnotationsData>()
|
||||
|
||||
val ScriptDefinitionKeys.refineConfigurationOnSections by PropertiesCollection.key<RefineConfigurationOnSectionsData>()
|
||||
|
||||
val ScriptDefinitionKeys.sourceFragments by PropertiesCollection.key<List<ScriptSourceNamedFragment>>()
|
||||
|
||||
// DSL:
|
||||
|
||||
val ScriptDefinition.Builder.refineConfiguration get() = RefineConfigurationBuilder()
|
||||
@@ -65,7 +65,7 @@ val ScriptDefinition.Builder.refineConfiguration get() = RefineConfigurationBuil
|
||||
class RefineConfigurationBuilder : PropertiesCollection.Builder() {
|
||||
|
||||
fun beforeParsing(handler: RefineScriptCompilationConfigurationHandler) {
|
||||
set(ScriptDefinition.refineConfigurationBeforeParsing, handler)
|
||||
set(ScriptDefinition.refineConfigurationBeforeParsing, RefineConfigurationBeforeParsingData(handler))
|
||||
}
|
||||
|
||||
fun onAnnotations(annotations: List<KotlinType>, handler: RefineScriptCompilationConfigurationHandler) {
|
||||
|
||||
+3
-1
@@ -19,7 +19,8 @@ private const val ILLEGAL_CONFIG_ANN_ARG =
|
||||
fun createScriptDefinitionFromAnnotatedBaseClass(
|
||||
baseClassType: KotlinType,
|
||||
environment: ScriptingEnvironment,
|
||||
contextClass: KClass<*> = ScriptDefinition::class
|
||||
contextClass: KClass<*> = ScriptDefinition::class,
|
||||
body: ScriptDefinition.Builder.() -> Unit = {}
|
||||
): ScriptDefinition {
|
||||
|
||||
val getScriptingClass = environment[ScriptingEnvironment.getScriptingClass]
|
||||
@@ -51,6 +52,7 @@ fun createScriptDefinitionFromAnnotatedBaseClass(
|
||||
baseClass.java.annotations.filterIsInstance(KotlinScriptProperties::class.java).forEach { ann ->
|
||||
include(scriptingPropsInstance(ann.definition))
|
||||
}
|
||||
body()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-3
@@ -23,7 +23,6 @@ import kotlinx.coroutines.experimental.runBlocking
|
||||
import kotlin.script.experimental.api.*
|
||||
|
||||
abstract class BasicScriptingHost(
|
||||
val scriptDefinition: ScriptDefinition,
|
||||
val compiler: ScriptCompiler,
|
||||
val evaluator: ScriptEvaluator
|
||||
) {
|
||||
@@ -31,11 +30,11 @@ abstract class BasicScriptingHost(
|
||||
|
||||
open fun eval(
|
||||
script: ScriptSource,
|
||||
compileConfiguration: ScriptCompileConfiguration?,
|
||||
scriptDefinition: ScriptDefinition,
|
||||
environment: ScriptEvaluationEnvironment?
|
||||
): ResultWithDiagnostics<EvaluationResult> =
|
||||
runInCoroutineContext {
|
||||
compiler(script, scriptDefinition, compileConfiguration).onSuccess {
|
||||
compiler(script, scriptDefinition).onSuccess {
|
||||
evaluator(it, environment)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,10 +7,7 @@ package kotlin.script.experimental.host
|
||||
|
||||
import java.io.File
|
||||
import java.net.URL
|
||||
import kotlin.script.experimental.api.ScriptCompileConfiguration
|
||||
import kotlin.script.experimental.api.ScriptSource
|
||||
import kotlin.script.experimental.api.ScriptSourceNamedFragment
|
||||
import kotlin.script.experimental.api.sourceFragments
|
||||
import kotlin.script.experimental.api.*
|
||||
|
||||
fun ScriptSource.getScriptText(): String = when {
|
||||
text != null -> text!!
|
||||
@@ -19,9 +16,9 @@ fun ScriptSource.getScriptText(): String = when {
|
||||
else -> throw RuntimeException("unable to get text from null script")
|
||||
}
|
||||
|
||||
fun getMergedScriptText(script: ScriptSource, configuration: ScriptCompileConfiguration?): String {
|
||||
fun getMergedScriptText(script: ScriptSource, configuration: ScriptDefinition?): String {
|
||||
val originalScriptText = script.getScriptText()
|
||||
val sourceFragments = configuration?.get(ScriptCompileConfiguration.sourceFragments)
|
||||
val sourceFragments = configuration?.get(ScriptDefinition.sourceFragments)
|
||||
return if (sourceFragments == null || sourceFragments.isEmpty()) {
|
||||
originalScriptText
|
||||
} else {
|
||||
|
||||
@@ -12,8 +12,7 @@ interface ReplSnippetChecker {
|
||||
suspend operator fun invoke(
|
||||
snippet: ReplSnippetSource,
|
||||
state: ReplStageState<*>,
|
||||
scriptDefinition: ScriptDefinition,
|
||||
additionalConfiguration: ScriptCompileConfiguration? = null // overrides properties from definition
|
||||
scriptDefinition: ScriptDefinition
|
||||
): ResultWithDiagnostics<Unit>
|
||||
}
|
||||
|
||||
@@ -22,8 +21,7 @@ interface ReplSnippetCompiler {
|
||||
suspend operator fun invoke(
|
||||
snippet: ReplSnippetSource,
|
||||
state: ReplStageState<*>,
|
||||
scriptDefinition: ScriptDefinition,
|
||||
additionalConfiguration: ScriptCompileConfiguration? = null // overrides properties from definition
|
||||
scriptDefinition: ScriptDefinition
|
||||
): ResultWithDiagnostics<CompiledReplSnippet<*>>
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ 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.ScriptCompileConfiguration
|
||||
import kotlin.script.experimental.api.ScriptDefinition
|
||||
import kotlin.script.experimental.util.PropertiesCollection
|
||||
|
||||
@@ -53,7 +52,6 @@ abstract class ReplHost(
|
||||
snippet: ReplSnippetSource,
|
||||
state: ReplStageState<*>,
|
||||
scriptDefinition: ScriptDefinition,
|
||||
additionalConfiguration: ScriptCompileConfiguration? = null, // overrides properties from definition
|
||||
replEvaluationEnvironment: ReplEvaluationEnvironment
|
||||
): ResultWithDiagnostics<EvaluationResult>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user