Clean and fix new scripting API

This commit is contained in:
Ilya Chernikov
2018-07-13 19:05:37 +02:00
parent f2a8e5c248
commit a54675abe7
20 changed files with 111 additions and 95 deletions
@@ -16,13 +16,12 @@ import kotlin.script.experimental.dependencies.ScriptDependencies
import kotlin.script.experimental.dependencies.ScriptReport
import kotlin.script.experimental.host.toScriptSource
import kotlin.script.experimental.jvm.JvmDependency
import kotlin.script.experimental.jvm.defaultConfiguration
import kotlin.script.experimental.jvm.mapToLegacyScriptReportPosition
import kotlin.script.experimental.jvm.mapToLegacyScriptReportSeverity
class BridgeDependenciesResolver(
val scriptConfigurator: ScriptCompilationConfigurator?,
val baseScriptCompilerConfiguration: ScriptCompileConfiguration = scriptConfigurator.defaultConfiguration,
val scriptDefinition: ScriptDefinition,
val calculatedBaseScriptCompilerConfiguration: ScriptCompileConfiguration,
val onClasspathUpdated: (List<File>) -> Unit = {}
) : AsyncDependenciesResolver {
@@ -38,10 +37,10 @@ class BridgeDependenciesResolver(
val processedScriptData =
ProcessedScriptData(ProcessedScriptDataProperties.foundAnnotations to scriptContents.annotations)
val refinedConfiguration = scriptConfigurator?.let {
val refinedConfiguration = scriptDefinition.compilationConfigurator?.let { scriptConfigurator ->
val res = scriptConfigurator.refineConfiguration(
scriptContents.toScriptSource(),
baseScriptCompilerConfiguration,
calculatedBaseScriptCompilerConfiguration,
processedScriptData
)
when (res) {
@@ -52,12 +51,12 @@ class BridgeDependenciesResolver(
res.value
}
}
} ?: baseScriptCompilerConfiguration
} ?: calculatedBaseScriptCompilerConfiguration
val newClasspath = refinedConfiguration.getOrNull(ScriptCompileConfigurationProperties.dependencies)
?.flatMap { (it as JvmDependency).classpath } ?: emptyList()
if (refinedConfiguration != baseScriptCompilerConfiguration) {
val oldClasspath = baseScriptCompilerConfiguration.getOrNull(ScriptCompileConfigurationProperties.dependencies)
if (refinedConfiguration != calculatedBaseScriptCompilerConfiguration) {
val oldClasspath = calculatedBaseScriptCompilerConfiguration.getOrNull(ScriptCompileConfigurationProperties.dependencies)
?.flatMap { (it as JvmDependency).classpath } ?: emptyList()
if (newClasspath != oldClasspath) {
onClasspathUpdated(newClasspath)
@@ -16,18 +16,18 @@ open class JvmScriptCompiler(
override suspend fun compile(
script: ScriptSource,
configurator: ScriptCompilationConfigurator?,
scriptDefinition: ScriptDefinition,
additionalConfiguration: ScriptCompileConfiguration?
): ResultWithDiagnostics<CompiledScript<*>> {
val baseConfiguration = additionalConfiguration?.cloneWithNewParent(configurator?.defaultConfiguration)
?: configurator?.defaultConfiguration
val baseConfiguration = additionalConfiguration?.cloneWithNewParent(scriptDefinition.compilationConfigurator?.defaultConfiguration)
?: scriptDefinition.compilationConfigurator?.defaultConfiguration
?: ScriptCompileConfiguration()
val refinedConfiguration =
if (baseConfiguration.getOrNull(ScriptCompileConfigurationProperties.refineBeforeParsing) == true) {
if (configurator == null) {
if (scriptDefinition.compilationConfigurator == null) {
return ResultWithDiagnostics.Failure("Non-null configurator expected".asErrorDiagnostics())
}
configurator.refineConfiguration(script, baseConfiguration).let {
scriptDefinition.compilationConfigurator!!.refineConfiguration(script, baseConfiguration).let {
when (it) {
is ResultWithDiagnostics.Failure -> return it
is ResultWithDiagnostics.Success -> it.value
@@ -40,7 +40,7 @@ open class JvmScriptCompiler(
if (cached != null) return cached.asSuccess()
return compilerProxy.compile(script, configurator, refinedConfiguration).also {
return compilerProxy.compile(script, scriptDefinition, refinedConfiguration).also {
if (it is ResultWithDiagnostics.Success) {
cache.store(it.value, refinedConfiguration)
}
@@ -56,7 +56,7 @@ interface CompiledJvmScriptsCache {
interface KJVMCompilerProxy {
fun compile(
script: ScriptSource,
configurator: ScriptCompilationConfigurator?,
scriptDefinition: ScriptDefinition,
additionalConfiguration: ScriptCompileConfiguration
): ResultWithDiagnostics<CompiledScript<*>>
}
@@ -7,16 +7,14 @@
package kotlin.script.experimental.jvm
import kotlin.script.experimental.api.ScriptCompilationConfigurator
import kotlin.script.experimental.api.ScriptEvaluator
import kotlin.script.experimental.host.BasicScriptingHost
import kotlin.script.experimental.util.typedKey
open class JvmBasicScriptingHost<ScriptBase : Any>(
configurationExtractor: ScriptCompilationConfigurator,
compiler: JvmScriptCompiler,
evaluator: ScriptEvaluator<ScriptBase>
) : BasicScriptingHost<ScriptBase>(configurationExtractor, compiler, evaluator)
) : BasicScriptingHost<ScriptBase>(compiler, evaluator)
object JvmScriptEvaluationEnvironmentProperties {
val baseClassLoader by typedKey<ClassLoader?>()