Remove ScriptCompileConfiguration as separate entity, refactor pieces accordingly

This commit is contained in:
Ilya Chernikov
2018-08-17 17:51:48 +02:00
parent bda8089004
commit acb0f6c6a9
18 changed files with 88 additions and 148 deletions
@@ -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>
}
@@ -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) {