diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplInterpreter.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplInterpreter.kt index bf3f137f7a7..07a55f4dfcf 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplInterpreter.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplInterpreter.kt @@ -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 = emptyList() override fun isScript(file: PsiFile): Boolean = StandardScriptDefinition.isScript(file) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinition.kt b/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinition.kt index fc7eeb15325..b4cb1d28a94 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinition.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinition.kt @@ -33,11 +33,13 @@ import org.jetbrains.kotlin.types.Variance import kotlin.reflect.KClass interface KotlinScriptDefinition { + val name: String fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List fun getScriptSupertypes(scriptDescriptor: ScriptDescriptor): List = emptyList() fun getScriptParametersToPassToSuperclass(scriptDescriptor: ScriptDescriptor): List = emptyList() fun isScript(file: PsiFile): Boolean fun getScriptName(script: KtScript): Name + fun getScriptDependenciesClasspath(): List = 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): ScriptParameter = ScriptParameter(propertyName, getKotlinType(scriptDescriptor, kClass)) -fun getKotlinType(scriptDescriptor: ScriptDescriptor, kClass: KClass): 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): 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") diff --git a/compiler/tests-common/org/jetbrains/kotlin/scripts/TestScriptDefinitions.kt b/compiler/tests-common/org/jetbrains/kotlin/scripts/TestScriptDefinitions.kt index dd83a612235..2b242c66657 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/scripts/TestScriptDefinitions.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/scripts/TestScriptDefinitions.kt @@ -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) : BaseScriptDefinition(extension) { +class ReflectedParamClassTestScriptDefinition(extension: String, val paramName: String, val parameter: KClass) : 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, val superclass: KClass) : SimpleParamsTestScriptDefinition(extension, parameters) { diff --git a/idea/idea-repl/src/org/jetbrains/kotlin/console/KotlinConsoleRunner.kt b/idea/idea-repl/src/org/jetbrains/kotlin/console/KotlinConsoleRunner.kt index 27fb331987c..8648ee190dc 100644 --- a/idea/idea-repl/src/org/jetbrains/kotlin/console/KotlinConsoleRunner.kt +++ b/idea/idea-repl/src/org/jetbrains/kotlin/console/KotlinConsoleRunner.kt @@ -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() override fun getScriptName(script: KtScript) = Name.identifier("REPL")