Refactoring properties collection after review

This commit is contained in:
Ilya Chernikov
2018-08-16 18:55:31 +02:00
parent 74f8a541c0
commit 04ffe7754e
22 changed files with 225 additions and 198 deletions
@@ -40,16 +40,15 @@ import kotlin.script.experimental.api.*
import kotlin.script.experimental.dependencies.DependenciesResolver
import kotlin.script.experimental.host.getMergedScriptText
import kotlin.script.experimental.jvm.JvmDependency
import kotlin.script.experimental.jvm.JvmScriptCompilationConfiguration
import kotlin.script.experimental.jvm.impl.BridgeDependenciesResolver
import kotlin.script.experimental.jvm.javaHome
import kotlin.script.experimental.jvm.jvm
import kotlin.script.experimental.jvmhost.JvmScriptEvaluationEnvironment
import kotlin.script.experimental.jvmhost.KJvmCompilerProxy
import kotlin.script.experimental.jvmhost.baseClassLoader
import kotlin.script.experimental.util.getFirstFromChainOrNull
import kotlin.script.experimental.util.getMergedFromChainOrNull
import kotlin.script.experimental.util.getOrError
import kotlin.script.experimental.util.getOrNull
class KJvmCompiledScript<out ScriptBase : Any>(
override val definition: ScriptDefinition,
@@ -59,9 +58,9 @@ class KJvmCompiledScript<out ScriptBase : Any>(
) : CompiledScript<ScriptBase> {
override suspend fun instantiate(scriptEvaluationEnvironment: ScriptEvaluationEnvironment?): ResultWithDiagnostics<ScriptBase> = try {
val baseClassLoader = scriptEvaluationEnvironment?.getOrNull(JvmScriptEvaluationEnvironment.baseClassLoader)
val baseClassLoader = scriptEvaluationEnvironment?.get(JvmScriptEvaluationEnvironment.baseClassLoader)
?: Thread.currentThread().contextClassLoader
val dependencies = additionalConfiguration?.getOrNull(ScriptDefinition.dependencies)
val dependencies = additionalConfiguration?.get(ScriptDefinition.dependencies)
?.flatMap { (it as? JvmDependency)?.classpath?.map { it.toURI().toURL() } ?: emptyList() }
// TODO: previous dependencies and classloaders should be taken into account here
val classLoaderWithDeps =
@@ -98,7 +97,7 @@ class KJvmCompilerImpl(val hostEnvironment: ScriptingEnvironment) : KJvmCompiler
fun updateClasspath(classpath: List<File>) {
environment!!.updateClasspath(classpath.map(::JvmClasspathRoot))
if (classpath.isNotEmpty()) {
updatedScriptCompileConfiguration = ScriptCompileConfiguration.create {
updatedScriptCompileConfiguration = ScriptCompileConfiguration {
include(updatedScriptCompileConfiguration)
dependencies.append(JvmDependency(classpath))
}
@@ -115,7 +114,7 @@ class KJvmCompilerImpl(val hostEnvironment: ScriptingEnvironment) : KJvmCompiler
put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true)
var isModularJava = false
getFirstFromChainOrNull(JvmScriptCompilationConfiguration.javaHome, updatedScriptCompileConfiguration, hostEnvironment)?.let {
getFirstFromChainOrNull(ScriptCompileConfiguration.jvm.javaHome, updatedScriptCompileConfiguration, hostEnvironment)?.let {
put(JVMConfigurationKeys.JDK_HOME, it)
isModularJava = CoreJrtFileSystem.isModularJdk(it)
}
@@ -254,7 +253,7 @@ internal class BridgeScriptDefinition(
) {
override val acceptedAnnotations = run {
val cl = this::class.java.classLoader
additionalCompilationConfiguration?.getOrNull(ScriptDefinition.refineConfigurationOnAnnotations)
additionalCompilationConfiguration?.get(ScriptDefinition.refineConfigurationOnAnnotations)
?.map { (cl.loadClass(it.typeName) as Class<out Annotation>).kotlin }
?: emptyList()
}
@@ -14,7 +14,7 @@ internal fun mergeConfigurations(vararg configurations: ScriptCompileConfigurati
return when {
nonEmptyConfigurations.isEmpty() -> null
nonEmptyConfigurations.size == 1 -> nonEmptyConfigurations.first()!!
else -> ScriptCompileConfiguration.create {
else -> ScriptCompileConfiguration {
for (configuration in nonEmptyConfigurations) {
include(configuration!!)
}
@@ -28,8 +28,5 @@ fun ScriptingEnvironment.withDefaults(): ScriptingEnvironment =
}) {
this
} else {
ScriptingEnvironment.create {
include(defaultJvmScriptingEnvironment)
include(this)
}
ScriptingEnvironment(defaultJvmScriptingEnvironment, this)
}
@@ -12,7 +12,6 @@ import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
import kotlin.script.experimental.jvmhost.impl.KJvmCompilerImpl
import kotlin.script.experimental.jvmhost.impl.mergeConfigurations
import kotlin.script.experimental.jvmhost.impl.withDefaults
import kotlin.script.experimental.util.getOrNull
interface CompiledJvmScriptsCache {
fun get(script: ScriptSource, scriptDefinition: ScriptDefinition, configuration: ScriptCompileConfiguration?): CompiledScript<*>?
@@ -41,9 +40,9 @@ open class JvmScriptCompiler(
scriptDefinition: ScriptDefinition,
additionalConfiguration: ScriptCompileConfiguration?
): ResultWithDiagnostics<CompiledScript<*>> {
val refineConfigurationFn = scriptDefinition.getOrNull(ScriptDefinition.refineConfigurationHandler)
val refineConfigurationFn = scriptDefinition[ScriptDefinition.refineConfigurationHandler]
val refinedConfiguration =
if (scriptDefinition.getOrNull(ScriptDefinition.refineConfigurationBeforeParsing) == true) {
if (scriptDefinition[ScriptDefinition.refineConfigurationBeforeParsing] == true) {
if (refineConfigurationFn == null) {
return ResultWithDiagnostics.Failure("Non-null configurator expected".asErrorDiagnostics())
}
@@ -9,7 +9,6 @@ package kotlin.script.experimental.jvmhost
import kotlin.script.experimental.api.*
import kotlin.script.experimental.util.PropertiesCollection
import kotlin.script.experimental.util.getOrNull
open class JvmScriptEvaluationEnvironment : PropertiesCollection.Builder() {
@@ -38,7 +37,7 @@ open class BasicJvmScriptEvaluator : ScriptEvaluator {
if (scriptObject !is Class<*>)
ResultWithDiagnostics.Failure(ScriptDiagnostic("expecting class in this implementation, got ${scriptObject?.javaClass}"))
else {
val receivers = scriptEvaluationEnvironment?.getOrNull(ScriptEvaluationEnvironment.implicitReceivers)
val receivers = scriptEvaluationEnvironment?.get(ScriptEvaluationEnvironment.implicitReceivers)
val instance = if (receivers == null) {
scriptObject.getConstructor().newInstance()
} else {