Replace dedicated configurator with definition properties + refine fun

This commit is contained in:
Ilya Chernikov
2018-07-15 19:42:42 +02:00
parent a54675abe7
commit e61ba1fd70
15 changed files with 76 additions and 124 deletions
@@ -14,18 +14,10 @@ typealias ScriptCompileConfiguration = ChainedPropertyBag
typealias ProcessedScriptData = ChainedPropertyBag
interface ScriptCompilationConfigurator {
// constructor(properties: ScriptDefinitionPropertiesBag) // the constructor is expected from implementations
val defaultConfiguration: ScriptCompileConfiguration
suspend fun refineConfiguration(
interface RefineScriptCompilationConfiguration {
suspend operator fun invoke(
scriptSource: ScriptSource,
configuration: ScriptCompileConfiguration,
processedScriptData: ProcessedScriptData = ProcessedScriptData()
): ResultWithDiagnostics<ScriptCompileConfiguration> =
configuration.cloneWithNewParent(defaultConfiguration).asSuccess()
): ResultWithDiagnostics<ScriptCompileConfiguration>
}
@@ -35,6 +35,8 @@ object ScriptCompileConfigurationProperties {
val compilerOptions by typedKey<List<String>>() // Q: CommonCompilerOptions instead?
val refineConfiguration by typedKey<RefineScriptCompilationConfiguration>() // dynamic configurator
val refineBeforeParsing by typedKey<Boolean>() // default: false
val refineConfigurationOnAnnotations by typedKey<List<KotlinType>>()
@@ -19,8 +19,6 @@ interface ScriptDefinition {
val properties: ScriptDefinitionPropertiesBag
val compilationConfigurator: ScriptCompilationConfigurator?
val evaluator: ScriptEvaluator<*>?
}
@@ -31,7 +31,7 @@ interface GetScriptingClass {
fun ScriptingEnvironment.getScriptingClass(type: KotlinType, contextClass: KClass<*>): KClass<*> {
val getClass = getOrNull(ScriptingEnvironmentProperties.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)
}