Grand refactoring of the scripting DSL + many minor usability refactorings around it

This commit is contained in:
Ilya Chernikov
2018-07-30 17:55:13 +02:00
parent 45eaca1290
commit 74f8a541c0
41 changed files with 655 additions and 619 deletions
-1
View File
@@ -75,7 +75,6 @@ dependencies {
testCompile(project(":compiler:ir.ir2cfg"))
testCompile(project(":compiler:ir.tree")) // used for deepCopyWithSymbols call that is removed by proguard from the compiler TODO: make it more straightforward
testCompile(project(":kotlin-scripting-compiler"))
testCompile(project(":kotlin-scripting-misc"))
testCompile(project(":kotlin-script-util"))
testCompileOnly(projectRuntimeJar(":kotlin-daemon-client"))
testCompileOnly(project(":kotlin-reflect-api"))
@@ -244,9 +244,9 @@ class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
with(PathUtil) {
val jars = arrayOf(
KOTLIN_SCRIPTING_COMPILER_PLUGIN_JAR, KOTLIN_SCRIPTING_COMMON_JAR,
KOTLIN_SCRIPTING_JVM_JAR, KOTLIN_SCRIPTING_MISC_JAR
).mapNotNull { File(libPath, it).takeIf(File::exists)?.canonicalPath }
if (jars.size == 4) {
KOTLIN_SCRIPTING_JVM_JAR
).mapNotNull { File(libPath, it).takeIf { it.exists() }?.canonicalPath }
if (jars.size == 3) {
pluginClasspaths = jars + pluginClasspaths
}
}
@@ -17,14 +17,12 @@ import org.jetbrains.kotlin.utils.PathUtil
import org.jetbrains.kotlin.utils.PathUtil.KOTLIN_SCRIPTING_COMMON_JAR
import org.jetbrains.kotlin.utils.PathUtil.KOTLIN_SCRIPTING_COMPILER_PLUGIN_JAR
import org.jetbrains.kotlin.utils.PathUtil.KOTLIN_SCRIPTING_JVM_JAR
import org.jetbrains.kotlin.utils.PathUtil.KOTLIN_SCRIPTING_MISC_JAR
import org.junit.Assert
import java.io.File
import kotlin.script.experimental.annotations.KotlinScript
import kotlin.script.experimental.annotations.KotlinScriptPropertiesFromList
import kotlin.script.experimental.api.KotlinType
import kotlin.script.experimental.api.ScriptDefinitionProperties
import kotlin.script.experimental.util.TypedKey
import kotlin.script.experimental.api.ScriptDefinition
import kotlin.script.experimental.api.contextVariables
import kotlin.script.experimental.api.scriptImplicitReceivers
abstract class AbstractCustomScriptCodegenTest : CodegenTestCase() {
private lateinit var scriptDefinitions: List<String>
@@ -59,7 +57,7 @@ abstract class AbstractCustomScriptCodegenTest : CodegenTestCase() {
with(PathUtil.kotlinPathsForDistDirectory) {
arrayOf(
KOTLIN_SCRIPTING_COMPILER_PLUGIN_JAR, KOTLIN_SCRIPTING_COMMON_JAR,
KOTLIN_SCRIPTING_JVM_JAR, KOTLIN_SCRIPTING_MISC_JAR
KOTLIN_SCRIPTING_JVM_JAR
).mapNotNull { File(libPath, it).takeIf { it.exists() } }
}
}
@@ -123,24 +121,22 @@ abstract class AbstractCustomScriptCodegenTest : CodegenTestCase() {
}
}
object TestScriptWithReceiversConfiguration : ArrayList<Pair<TypedKey<*>, Any?>>(
listOf(
ScriptDefinitionProperties.scriptImplicitReceivers to listOf(KotlinType(String::class))
)
)
object TestScriptWithReceiversConfiguration : ScriptDefinition {
override val properties = properties {
scriptImplicitReceivers<String>()
}
}
@Suppress("unused")
@KotlinScript
@KotlinScriptPropertiesFromList(TestScriptWithReceiversConfiguration::class)
@KotlinScript(definition = TestScriptWithReceiversConfiguration::class)
abstract class TestScriptWithReceivers
object TestScriptWithSimpleEnvVarsConfiguration : ArrayList<Pair<TypedKey<*>, Any?>>(
listOf(
ScriptDefinitionProperties.contextVariables to mapOf("stringVar1" to KotlinType(String::class))
)
)
object TestScriptWithSimpleEnvVarsConfiguration : ScriptDefinition {
override val properties = properties {
contextVariables("stringVar1" to String::class)
}
}
@Suppress("unused")
@KotlinScript
@KotlinScriptPropertiesFromList(TestScriptWithSimpleEnvVarsConfiguration::class)
@KotlinScript(definition = TestScriptWithSimpleEnvVarsConfiguration::class)
abstract class TestScriptWithSimpleEnvVars
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.utils.PathUtil
import org.jetbrains.kotlin.utils.PathUtil.KOTLIN_SCRIPTING_COMMON_JAR
import org.jetbrains.kotlin.utils.PathUtil.KOTLIN_SCRIPTING_COMPILER_PLUGIN_JAR
import org.jetbrains.kotlin.utils.PathUtil.KOTLIN_SCRIPTING_JVM_JAR
import org.jetbrains.kotlin.utils.PathUtil.KOTLIN_SCRIPTING_MISC_JAR
import java.io.File
import kotlin.reflect.KClass
import kotlin.script.experimental.annotations.KotlinScript
@@ -50,7 +49,7 @@ class CustomScriptCodegenTest : CodegenTestCase() {
with(PathUtil.kotlinPathsForDistDirectory) {
arrayOf(
KOTLIN_SCRIPTING_COMPILER_PLUGIN_JAR, KOTLIN_SCRIPTING_COMMON_JAR,
KOTLIN_SCRIPTING_JVM_JAR, KOTLIN_SCRIPTING_MISC_JAR
KOTLIN_SCRIPTING_JVM_JAR
).mapNotNull { File(libPath, it).also { assertTrue("$it not found", it.exists()) } }
}
@@ -59,7 +59,6 @@ object PathUtil {
const val KOTLIN_JAVA_SCRIPT_RUNTIME_JAR = "kotlin-script-runtime.jar"
const val KOTLIN_SCRIPTING_COMMON_JAR = "kotlin-scripting-common.jar"
const val KOTLIN_SCRIPTING_JVM_JAR = "kotlin-scripting-jvm.jar"
const val KOTLIN_SCRIPTING_MISC_JAR = "kotlin-scripting-misc.jar"
const val KOTLIN_SCRIPTING_COMPILER_PLUGIN_NAME = "kotlin-scripting-compiler"
const val KOTLIN_SCRIPTING_COMPILER_PLUGIN_JAR = "$KOTLIN_SCRIPTING_COMPILER_PLUGIN_NAME.jar"