Add name and classpath to KotlinScriptDefinition
This commit is contained in:
@@ -235,6 +235,8 @@ class ReplInterpreter(
|
||||
companion object {
|
||||
private val SCRIPT_RESULT_FIELD_NAME = "\$\$result"
|
||||
private val REPL_LINE_AS_SCRIPT_DEFINITION = object : KotlinScriptDefinition {
|
||||
override val name = "Kotlin REPL"
|
||||
|
||||
override fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List<ScriptParameter> = emptyList()
|
||||
|
||||
override fun isScript(file: PsiFile): Boolean = StandardScriptDefinition.isScript(file)
|
||||
|
||||
@@ -33,11 +33,13 @@ import org.jetbrains.kotlin.types.Variance
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
interface KotlinScriptDefinition {
|
||||
val name: String
|
||||
fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List<ScriptParameter>
|
||||
fun getScriptSupertypes(scriptDescriptor: ScriptDescriptor): List<KotlinType> = emptyList()
|
||||
fun getScriptParametersToPassToSuperclass(scriptDescriptor: ScriptDescriptor): List<Name> = emptyList()
|
||||
fun isScript(file: PsiFile): Boolean
|
||||
fun getScriptName(script: KtScript): Name
|
||||
fun getScriptDependenciesClasspath(): List<String> = emptyList()
|
||||
}
|
||||
|
||||
class ScriptParameter(val name: Name, val type: KotlinType)
|
||||
@@ -45,6 +47,8 @@ class ScriptParameter(val name: Name, val type: KotlinType)
|
||||
object StandardScriptDefinition : KotlinScriptDefinition {
|
||||
private val ARGS_NAME = Name.identifier("args")
|
||||
|
||||
override val name = "Kotlin Script"
|
||||
|
||||
override fun getScriptName(script: KtScript): Name {
|
||||
return ScriptNameUtil.fileNameWithExtensionStripped(script, KotlinParserDefinition.STD_SCRIPT_EXT)
|
||||
}
|
||||
@@ -70,10 +74,10 @@ fun makeStringListScriptParameters(scriptDescriptor: ScriptDescriptor, propertyN
|
||||
fun makeReflectedClassScriptParameter(scriptDescriptor: ScriptDescriptor, propertyName: Name, kClass: KClass<out Any>): ScriptParameter =
|
||||
ScriptParameter(propertyName, getKotlinType(scriptDescriptor, kClass))
|
||||
|
||||
fun getKotlinType(scriptDescriptor: ScriptDescriptor, kClass: KClass<out Any>): KotlinType {
|
||||
val module = scriptDescriptor.module
|
||||
val qualifiedName = kClass.qualifiedName ?: throw RuntimeException("Cannot get FQN from $kClass")
|
||||
return module.findClassAcrossModuleDependencies(ClassId.topLevel(FqName(qualifiedName)))?.defaultType ?:
|
||||
throw RuntimeException("Cannot find class $qualifiedName in the dependencies, may be it is missing in the classpath")
|
||||
}
|
||||
fun getKotlinType(scriptDescriptor: ScriptDescriptor, kClass: KClass<out Any>): KotlinType =
|
||||
getKotlinTypeByFqName(scriptDescriptor,
|
||||
kClass.qualifiedName ?: throw RuntimeException("Cannot get FQN from $kClass"))
|
||||
|
||||
fun getKotlinTypeByFqName(scriptDescriptor: ScriptDescriptor, fqName: String): KotlinType =
|
||||
scriptDescriptor.module.findClassAcrossModuleDependencies(ClassId.topLevel(FqName(fqName)))?.defaultType ?:
|
||||
throw RuntimeException("Cannot find class $fqName in the dependencies, may be it is missing in the classpath")
|
||||
|
||||
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.types.KotlinType
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
abstract class BaseScriptDefinition (val extension: String) : KotlinScriptDefinition {
|
||||
override val name = "Test Kotlin Script"
|
||||
override fun isScript(file: PsiFile): Boolean = file.name.endsWith(extension)
|
||||
override fun getScriptName(script: KtScript): Name = ScriptNameUtil.fileNameWithExtensionStripped(script, extension)
|
||||
}
|
||||
@@ -33,9 +34,9 @@ open class SimpleParamsTestScriptDefinition(extension: String, val parameters: L
|
||||
override fun getScriptParameters(scriptDescriptor: ScriptDescriptor) = parameters
|
||||
}
|
||||
|
||||
class ReflectedParamClassTestScriptDefinition(extension: String, val name: String, val parameter: KClass<out Any>) : BaseScriptDefinition(extension) {
|
||||
class ReflectedParamClassTestScriptDefinition(extension: String, val paramName: String, val parameter: KClass<out Any>) : BaseScriptDefinition(extension) {
|
||||
override fun getScriptParameters(scriptDescriptor: ScriptDescriptor) =
|
||||
listOf(makeReflectedClassScriptParameter(scriptDescriptor, Name.identifier(name), parameter))
|
||||
listOf(makeReflectedClassScriptParameter(scriptDescriptor, Name.identifier(paramName), parameter))
|
||||
}
|
||||
|
||||
open class ReflectedSuperclassTestScriptDefinition(extension: String, parameters: List<ScriptParameter>, val superclass: KClass<out Any>) : SimpleParamsTestScriptDefinition(extension, parameters) {
|
||||
|
||||
@@ -122,6 +122,7 @@ class KotlinConsoleRunner(
|
||||
var compilerHelper: ConsoleCompilerHelper by Delegates.notNull()
|
||||
|
||||
private val consoleScriptDefinition = object : KotlinScriptDefinition {
|
||||
override val name = "Kotlin REPL"
|
||||
override fun isScript(file: PsiFile) = file.originalFile.virtualFile == consoleView.virtualFile
|
||||
override fun getScriptParameters(scriptDescriptor: ScriptDescriptor) = emptyList<ScriptParameter>()
|
||||
override fun getScriptName(script: KtScript) = Name.identifier("REPL")
|
||||
|
||||
Reference in New Issue
Block a user