Create standard script definition from standard template

Now each script without specified template has a StandardSriptTemplate
class as a base one. This allows to generalize script codegen and
resolve.
This commit is contained in:
Mikhail Zarechenskiy
2016-09-12 01:24:18 +03:00
parent d69e7c7aec
commit 0ba2d374bc
14 changed files with 39 additions and 39 deletions
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
import org.jetbrains.kotlin.psi.KtScript
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
import org.jetbrains.kotlin.resolve.descriptorUtil.module
import org.jetbrains.kotlin.serialization.deserialization.NotFoundClasses
import org.jetbrains.kotlin.serialization.deserialization.findNonGenericClassAcrossDependencies
@@ -39,6 +38,7 @@ import kotlin.reflect.KClass
import kotlin.reflect.KType
import kotlin.reflect.KTypeProjection
import kotlin.reflect.KVariance
import kotlin.script.StandardScriptTemplate
interface KotlinScriptDefinition {
val name: String get() = "Kotlin Script"
@@ -78,23 +78,7 @@ class KotlinScriptExternalDependenciesUnion(val dependencies: Iterable<KotlinScr
data class ScriptParameter(val name: Name, val type: KotlinType)
object StandardScriptDefinition : KotlinScriptDefinition {
private val ARGS_NAME = Name.identifier("args")
// NOTE: for now we treat .kts files as if they have 'args: Array<String>' parameter
// this is not supposed to be final design
override fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List<ScriptParameter> =
makeStringListScriptParameters(scriptDescriptor, ARGS_NAME)
}
fun makeStringListScriptParameters(scriptDescriptor: ScriptDescriptor, propertyName: Name): List<ScriptParameter> {
val builtIns = scriptDescriptor.builtIns
val arrayOfStrings = builtIns.getArrayType(Variance.INVARIANT, builtIns.stringType)
return listOf(ScriptParameter(propertyName, arrayOfStrings))
}
fun makeReflectedClassScriptParameter(scriptDescriptor: ScriptDescriptor, propertyName: Name, kClass: KClass<out Any>): ScriptParameter =
ScriptParameter(propertyName, getKotlinType(scriptDescriptor, kClass))
object StandardScriptDefinition : KotlinScriptDefinitionFromTemplate(StandardScriptTemplate::class)
fun getKotlinType(scriptDescriptor: ScriptDescriptor, kClass: KClass<out Any>): KotlinType =
getKotlinTypeByFqName(scriptDescriptor,
@@ -35,7 +35,7 @@ import kotlin.reflect.KClass
import kotlin.reflect.memberFunctions
import kotlin.reflect.primaryConstructor
data class KotlinScriptDefinitionFromTemplate(val template: KClass<out Any>,
open class KotlinScriptDefinitionFromTemplate(val template: KClass<out Any>,
val resolver: ScriptDependenciesResolver? = null,
val scriptFilePattern: String? = null,
val environment: Map<String, Any?>? = null