Refactor scripting properties:

- flatten the structure
- add some parameters
- replace iterables with lists
- renaming all scope objects uniformily
also:
- fix passing and usage of script sources
- renamings and other minor improvements
This commit is contained in:
Ilya Chernikov
2018-03-28 12:59:10 +02:00
parent 2ddcc280a9
commit 5058c66e8c
18 changed files with 123 additions and 130 deletions
@@ -36,15 +36,14 @@ class BridgeDependenciesResolver(
val diagnostics = arrayListOf<ScriptReport>()
val processedScriptData =
ProcessedScriptData(ProcessedScriptDataParams.annotations to scriptContents.annotations)
val scriptCompilerConfiguration = ChainedPropertyBag(
baseScriptCompilerConfiguration,
ScriptCompileConfigurationParams.scriptSourceFragments to scriptContents.toScriptSourceFragments()
)
ProcessedScriptData(ProcessedScriptDataProperties.foundAnnotations to scriptContents.annotations)
val refinedConfiguration = scriptConfigurator?.let {
val res = scriptConfigurator.refineConfiguration(scriptCompilerConfiguration, processedScriptData)
val res = scriptConfigurator.refineConfiguration(
scriptContents.toScriptSource(),
baseScriptCompilerConfiguration,
processedScriptData
)
when (res) {
is ResultWithDiagnostics.Failure ->
return@resolveAsync DependenciesResolver.ResolveResult.Failure(res.reports.mapScriptReportsToDiagnostics())
@@ -53,12 +52,12 @@ class BridgeDependenciesResolver(
res.value
}
}
} ?: scriptCompilerConfiguration
} ?: baseScriptCompilerConfiguration
val newClasspath = refinedConfiguration.getOrNull(ScriptCompileConfigurationParams.dependencies)
val newClasspath = refinedConfiguration.getOrNull(ScriptCompileConfigurationProperties.dependencies)
?.flatMap { (it as JvmDependency).classpath } ?: emptyList()
if (refinedConfiguration != scriptCompilerConfiguration) {
val oldClasspath = scriptCompilerConfiguration.getOrNull(ScriptCompileConfigurationParams.dependencies)
if (refinedConfiguration != baseScriptCompilerConfiguration) {
val oldClasspath = baseScriptCompilerConfiguration.getOrNull(ScriptCompileConfigurationProperties.dependencies)
?.flatMap { (it as JvmDependency).classpath } ?: emptyList()
if (newClasspath != oldClasspath) {
onClasspathUpdated(newClasspath)
@@ -67,16 +66,14 @@ class BridgeDependenciesResolver(
DependenciesResolver.ResolveResult.Success(
ScriptDependencies(
classpath = newClasspath, // TODO: maybe it should return only increment from the initial config
imports = refinedConfiguration.getOrNull(ScriptCompileConfigurationParams.importedPackages)?.toList()
imports = refinedConfiguration.getOrNull(ScriptCompileConfigurationProperties.importedPackages)?.toList()
?: emptyList()
),
diagnostics
)
} catch (e: Throwable) {
DependenciesResolver.ResolveResult.Failure(
ScriptReport(
e.message ?: "unknown error $e"
)
ScriptReport(e.message ?: "unknown error $e")
)
}
}
@@ -85,13 +82,9 @@ class BridgeDependenciesResolver(
internal fun List<ScriptDiagnostic>.mapScriptReportsToDiagnostics() =
map { ScriptReport(it.message, mapToLegacyScriptReportSeverity(it.severity), mapToLegacyScriptReportPosition(it.location)) }
internal fun ScriptContents.toScriptSourceFragments(): ScriptSourceFragments =
ScriptSourceFragments(
when {
text != null -> text!!.toString().toScriptSource()
file != null -> file!!.toScriptSource()
else -> throw IllegalArgumentException("Unable to convert script contents $this into script source")
},
null
)
internal fun ScriptContents.toScriptSource(): ScriptSource = when {
text != null -> text!!.toString().toScriptSource()
file != null -> file!!.toScriptSource()
else -> throw IllegalArgumentException("Unable to convert script contents $this into script source")
}
@@ -19,11 +19,10 @@ open class JvmScriptCompiler(
configuration: ScriptCompileConfiguration,
configurator: ScriptCompilationConfigurator?
): ResultWithDiagnostics<CompiledScript<*>> {
val refinedConfiguration = configurator?.refineConfiguration(configuration)?.let {
val refinedConfiguration = configurator?.refineConfiguration(script, configuration)?.let {
when (it) {
is ResultWithDiagnostics.Failure -> return it
is ResultWithDiagnostics.Success -> it.value
?: return ResultWithDiagnostics.Failure("Null script compile configuration received".asErrorDiagnostics())
}
} ?: configuration
val cached = cache.get(script, refinedConfiguration)
@@ -32,7 +31,7 @@ open class JvmScriptCompiler(
return compilerProxy.compile(script, refinedConfiguration, configurator).also {
if (it is ResultWithDiagnostics.Success) {
cache.store(it.value as CompiledScript<*>)
cache.store(it.value, refinedConfiguration)
}
}
}
@@ -40,7 +39,7 @@ open class JvmScriptCompiler(
interface CompiledJvmScriptsCache {
fun get(script: ScriptSource, configuration: ScriptCompileConfiguration): CompiledScript<*>?
fun store(compiledScript: CompiledScript<*>)
fun store(compiledScript: CompiledScript<*>, configuration: ScriptCompileConfiguration)
}
interface KJVMCompilerProxy {
@@ -53,6 +52,6 @@ interface KJVMCompilerProxy {
class DummyCompiledJvmScriptCache : CompiledJvmScriptsCache {
override fun get(script: ScriptSource, configuration: ScriptCompileConfiguration): CompiledScript<*>? = null
override fun store(compiledScript: CompiledScript<*>) {}
override fun store(compiledScript: CompiledScript<*>, configuration: ScriptCompileConfiguration) {}
}
@@ -9,7 +9,7 @@ import kotlinx.coroutines.experimental.runBlocking
import kotlin.script.experimental.api.*
import java.io.File
val jvmJavaHomeParams = with(JvmScriptCompileConfigurationParams) {
val jvmJavaHomeParams = with(JvmScriptCompileConfigurationProperties) {
listOf(javaHomeDir to File(System.getProperty("java.home")))
}
@@ -9,9 +9,11 @@ import java.io.File
import kotlin.script.experimental.api.ScriptDependency
import kotlin.script.experimental.api.typedKey
object JvmScriptCompileConfigurationParams {
object JvmScriptCompileConfigurationProperties {
val javaHomeDir by typedKey<File>()
}
class JvmDependency(val classpath: Iterable<File>) : ScriptDependency
class JvmDependency(val classpath: List<File>) : ScriptDependency {
constructor(vararg classpathEntries: File) : this(classpathEntries.asList())
}
@@ -18,6 +18,6 @@ open class JvmBasicScriptingHost<ScriptBase : Any>(
evaluator: ScriptEvaluator<ScriptBase>
) : BasicScriptingHost<ScriptBase>(configurationExtractor, compiler, evaluator)
object JvmScriptEvaluationEnvironmentParams {
object JvmScriptEvaluationEnvironmentProperties {
val baseClassLoader by typedKey<ClassLoader?>()
}