Add name and classpath to KotlinScriptDefinition
This commit is contained in:
@@ -235,6 +235,8 @@ class ReplInterpreter(
|
|||||||
companion object {
|
companion object {
|
||||||
private val SCRIPT_RESULT_FIELD_NAME = "\$\$result"
|
private val SCRIPT_RESULT_FIELD_NAME = "\$\$result"
|
||||||
private val REPL_LINE_AS_SCRIPT_DEFINITION = object : KotlinScriptDefinition {
|
private val REPL_LINE_AS_SCRIPT_DEFINITION = object : KotlinScriptDefinition {
|
||||||
|
override val name = "Kotlin REPL"
|
||||||
|
|
||||||
override fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List<ScriptParameter> = emptyList()
|
override fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List<ScriptParameter> = emptyList()
|
||||||
|
|
||||||
override fun isScript(file: PsiFile): Boolean = StandardScriptDefinition.isScript(file)
|
override fun isScript(file: PsiFile): Boolean = StandardScriptDefinition.isScript(file)
|
||||||
|
|||||||
@@ -33,11 +33,13 @@ import org.jetbrains.kotlin.types.Variance
|
|||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
interface KotlinScriptDefinition {
|
interface KotlinScriptDefinition {
|
||||||
|
val name: String
|
||||||
fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List<ScriptParameter>
|
fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List<ScriptParameter>
|
||||||
fun getScriptSupertypes(scriptDescriptor: ScriptDescriptor): List<KotlinType> = emptyList()
|
fun getScriptSupertypes(scriptDescriptor: ScriptDescriptor): List<KotlinType> = emptyList()
|
||||||
fun getScriptParametersToPassToSuperclass(scriptDescriptor: ScriptDescriptor): List<Name> = emptyList()
|
fun getScriptParametersToPassToSuperclass(scriptDescriptor: ScriptDescriptor): List<Name> = emptyList()
|
||||||
fun isScript(file: PsiFile): Boolean
|
fun isScript(file: PsiFile): Boolean
|
||||||
fun getScriptName(script: KtScript): Name
|
fun getScriptName(script: KtScript): Name
|
||||||
|
fun getScriptDependenciesClasspath(): List<String> = emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
class ScriptParameter(val name: Name, val type: KotlinType)
|
class ScriptParameter(val name: Name, val type: KotlinType)
|
||||||
@@ -45,6 +47,8 @@ class ScriptParameter(val name: Name, val type: KotlinType)
|
|||||||
object StandardScriptDefinition : KotlinScriptDefinition {
|
object StandardScriptDefinition : KotlinScriptDefinition {
|
||||||
private val ARGS_NAME = Name.identifier("args")
|
private val ARGS_NAME = Name.identifier("args")
|
||||||
|
|
||||||
|
override val name = "Kotlin Script"
|
||||||
|
|
||||||
override fun getScriptName(script: KtScript): Name {
|
override fun getScriptName(script: KtScript): Name {
|
||||||
return ScriptNameUtil.fileNameWithExtensionStripped(script, KotlinParserDefinition.STD_SCRIPT_EXT)
|
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 =
|
fun makeReflectedClassScriptParameter(scriptDescriptor: ScriptDescriptor, propertyName: Name, kClass: KClass<out Any>): ScriptParameter =
|
||||||
ScriptParameter(propertyName, getKotlinType(scriptDescriptor, kClass))
|
ScriptParameter(propertyName, getKotlinType(scriptDescriptor, kClass))
|
||||||
|
|
||||||
fun getKotlinType(scriptDescriptor: ScriptDescriptor, kClass: KClass<out Any>): KotlinType {
|
fun getKotlinType(scriptDescriptor: ScriptDescriptor, kClass: KClass<out Any>): KotlinType =
|
||||||
val module = scriptDescriptor.module
|
getKotlinTypeByFqName(scriptDescriptor,
|
||||||
val qualifiedName = kClass.qualifiedName ?: throw RuntimeException("Cannot get FQN from $kClass")
|
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 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
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
abstract class BaseScriptDefinition (val extension: String) : KotlinScriptDefinition {
|
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 isScript(file: PsiFile): Boolean = file.name.endsWith(extension)
|
||||||
override fun getScriptName(script: KtScript): Name = ScriptNameUtil.fileNameWithExtensionStripped(script, 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
|
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) =
|
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) {
|
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()
|
var compilerHelper: ConsoleCompilerHelper by Delegates.notNull()
|
||||||
|
|
||||||
private val consoleScriptDefinition = object : KotlinScriptDefinition {
|
private val consoleScriptDefinition = object : KotlinScriptDefinition {
|
||||||
|
override val name = "Kotlin REPL"
|
||||||
override fun isScript(file: PsiFile) = file.originalFile.virtualFile == consoleView.virtualFile
|
override fun isScript(file: PsiFile) = file.originalFile.virtualFile == consoleView.virtualFile
|
||||||
override fun getScriptParameters(scriptDescriptor: ScriptDescriptor) = emptyList<ScriptParameter>()
|
override fun getScriptParameters(scriptDescriptor: ScriptDescriptor) = emptyList<ScriptParameter>()
|
||||||
override fun getScriptName(script: KtScript) = Name.identifier("REPL")
|
override fun getScriptName(script: KtScript) = Name.identifier("REPL")
|
||||||
|
|||||||
Reference in New Issue
Block a user