Clean and fix new scripting API
This commit is contained in:
+7
-8
@@ -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?>()
|
||||
|
||||
Reference in New Issue
Block a user