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
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.script.examples.jvm.resolve.maven.host
import org.jetbrains.kotlin.script.examples.jvm.resolve.maven.MyScriptWithMavenDeps
import org.jetbrains.kotlin.script.examples.jvm.resolve.maven.myJvmConfigParams
import java.io.File
import kotlin.script.experimental.api.*
import kotlin.script.experimental.definitions.ScriptDefinitionFromAnnotatedBaseClass
@@ -16,7 +15,7 @@ import kotlin.script.experimental.jvm.JvmBasicScriptingHost
import kotlin.script.experimental.jvm.JvmGetScriptingClass
import kotlin.script.experimental.jvm.JvmScriptCompiler
import kotlin.script.experimental.jvmhost.impl.KJVMCompilerImpl
import kotlin.script.experimental.misc.*
import kotlin.script.experimental.misc.invoke
fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> {
val scriptCompiler = JvmScriptCompiler(KJVMCompilerImpl(), DummyCompiledJvmScriptCache())
@@ -30,7 +29,7 @@ fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> {
val host = JvmBasicScriptingHost(scriptCompiler, scriptDefinition.evaluator)
return host.eval(
scriptFile.toScriptSource(), scriptDefinition, ScriptCompileConfiguration(myJvmConfigParams), ScriptEvaluationEnvironment()
scriptFile.toScriptSource(), scriptDefinition, ScriptCompileConfiguration(), ScriptEvaluationEnvironment()
)
}
@@ -13,51 +13,53 @@ import java.io.File
import kotlin.script.dependencies.ScriptContents
import kotlin.script.dependencies.ScriptDependenciesResolver
import kotlin.script.experimental.annotations.KotlinScript
import kotlin.script.experimental.annotations.KotlinScriptCompilationConfigurator
import kotlin.script.experimental.annotations.KotlinScriptDefaultCompilationConfiguration
import kotlin.script.experimental.annotations.KotlinScriptEvaluator
import kotlin.script.experimental.annotations.KotlinScriptFileExtension
import kotlin.script.experimental.api.*
import kotlin.script.experimental.jvm.*
import kotlin.script.experimental.jvm.runners.BasicJvmScriptEvaluator
import kotlin.script.experimental.misc.*
import kotlin.script.experimental.util.TypedKey
@KotlinScript
@KotlinScriptFileExtension("scriptwithdeps.kts")
@KotlinScriptCompilationConfigurator(MyConfigurator::class)
@KotlinScriptDefaultCompilationConfiguration(MyConfiguration::class)
@KotlinScriptEvaluator(BasicJvmScriptEvaluator::class)
abstract class MyScriptWithMavenDeps {
// abstract fun body(vararg args: String): Int
}
val myJvmConfigParams = jvmJavaHomeParams + with(ScriptCompileConfigurationProperties) {
listOf(
baseClass<MyScriptWithMavenDeps>(),
defaultImports(DependsOn::class.qualifiedName!!, Repository::class.qualifiedName!!),
dependencies(
JvmDependency(
scriptCompilationClasspathFromContext(
"scripting-jvm-maven-deps", // script library jar name
"kotlin-script-util" // DependsOn annotation is taken from script-util
object MyConfiguration : ArrayList<Pair<TypedKey<*>, Any?>>(
jvmJavaHomeParams + with(ScriptCompileConfigurationProperties) {
listOf(
baseClass<MyScriptWithMavenDeps>(),
defaultImports(DependsOn::class.qualifiedName!!, Repository::class.qualifiedName!!),
dependencies(
JvmDependency(
scriptCompilationClasspathFromContext(
"scripting-jvm-maven-deps", // script library jar name
"kotlin-script-util" // DependsOn annotation is taken from script-util
)
)
)
),
refineConfigurationOnAnnotations(DependsOn::class, Repository::class)
)
}
),
refineConfiguration(MyConfigurator()),
refineConfigurationOnAnnotations(DependsOn::class, Repository::class)
)
}
)
class MyConfigurator(val environment: ScriptingEnvironment) : ScriptCompilationConfigurator {
class MyConfigurator : RefineScriptCompilationConfiguration {
private val resolver = FilesAndMavenResolver()
override val defaultConfiguration = ScriptCompileConfiguration(environment, myJvmConfigParams)
override suspend fun refineConfiguration(
override suspend operator fun invoke(
scriptSource: ScriptSource,
configuration: ScriptCompileConfiguration,
processedScriptData: ProcessedScriptData
): ResultWithDiagnostics<ScriptCompileConfiguration> {
val annotations = processedScriptData.getOrNull(ProcessedScriptDataProperties.foundAnnotations)?.takeIf { it.isNotEmpty() }
?: return configuration.asSuccess()
?: return configuration.asSuccess()
val scriptContents = object : ScriptContents {
override val annotations: Iterable<Annotation> = annotations
override val file: File? = null
@@ -69,9 +71,9 @@ class MyConfigurator(val environment: ScriptingEnvironment) : ScriptCompilationC
}
return try {
val newDepsFromResolver = resolver.resolve(scriptContents, emptyMap(), ::report, null).get()
?: return configuration.asSuccess(diagnostics)
?: return configuration.asSuccess(diagnostics)
val resolvedClasspath = newDepsFromResolver.classpath.toList().takeIf { it.isNotEmpty() }
?: return configuration.asSuccess(diagnostics)
?: return configuration.asSuccess(diagnostics)
val newDependency = JvmDependency(resolvedClasspath)
val updatedDeps =
configuration.getOrNull(ScriptCompileConfigurationProperties.dependencies)?.plus(newDependency) ?: listOf(newDependency)