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 f5809801f7f..168e8e80b43 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 @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.cli.jvm.repl import com.google.common.base.Throwables import com.intellij.openapi.Disposable import com.intellij.openapi.vfs.CharsetToolkit -import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiFileFactory import com.intellij.psi.impl.PsiFileFactoryImpl import com.intellij.testFramework.LightVirtualFile @@ -38,14 +37,11 @@ import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.descriptors.ScriptDescriptor import org.jetbrains.kotlin.idea.KotlinLanguage -import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.parsing.KotlinParserDefinition import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtScript import org.jetbrains.kotlin.resolve.jvm.JvmClassName -import org.jetbrains.kotlin.script.KotlinScriptDefinition -import org.jetbrains.kotlin.script.ScriptParameter -import org.jetbrains.kotlin.script.StandardScriptDefinition +import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromTemplate import java.io.PrintWriter import java.net.URLClassLoader @@ -184,14 +180,8 @@ class ReplInterpreter( companion object { private val SCRIPT_RESULT_FIELD_NAME = "\$\$result" - private val REPL_LINE_AS_SCRIPT_DEFINITION = object : KotlinScriptDefinition { + private val REPL_LINE_AS_SCRIPT_DEFINITION = object : KotlinScriptDefinitionFromTemplate(Any::class) { override val name = "Kotlin REPL" - - override fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List = emptyList() - - override fun isScript(file: TF): Boolean = StandardScriptDefinition.isScript(file) - - override fun getScriptName(script: KtScript): Name = StandardScriptDefinition.getScriptName(script) } private fun renderStackTrace(cause: Throwable, startFromMethodName: String): String { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinConfigurableScriptDefinition.kt b/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinConfigurableScriptDefinition.kt index f59e7b9d681..bd60c593268 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinConfigurableScriptDefinition.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinConfigurableScriptDefinition.kt @@ -27,10 +27,17 @@ import org.jetbrains.kotlin.utils.KotlinPathsFromHomeDir import org.jetbrains.kotlin.utils.PathUtil import java.io.File import java.util.concurrent.Future +import kotlin.reflect.KClass +import kotlin.script.StandardScriptTemplate data class KotlinConfigurableScriptDefinition(val config: KotlinScriptConfig, val environmentVars: Map>?) : KotlinScriptDefinition { override val name = config.name + + // This is a temporary workaround: this class will be removed later + override val template: KClass + get() = StandardScriptTemplate::class + override fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List = config.parameters.map { ScriptParameter(Name.identifier(it.name), getKotlinTypeByFqName(scriptDescriptor, it.type)) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinition.kt b/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinition.kt index 9e166934cf8..9b5e5a9e852 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinition.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinition.kt @@ -43,6 +43,8 @@ import kotlin.script.StandardScriptTemplate interface KotlinScriptDefinition { val name: String get() = "Kotlin Script" + val template: KClass + // TODO: consider creating separate type (subtype? for kotlin scripts) val fileType: LanguageFileType get() = KotlinFileType.INSTANCE diff --git a/compiler/frontend/src/org/jetbrains/kotlin/script/scriptConfig.kt b/compiler/frontend/src/org/jetbrains/kotlin/script/scriptConfig.kt index fab232bf6d6..8a89e7e2b8b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/script/scriptConfig.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/script/scriptConfig.kt @@ -81,6 +81,9 @@ data class KotlinScriptConfig( @Tag("files") var fileNameMatch: String = ".*\\.kts", + @Tag("template") + var template: String = "kotlin.script.StandardScriptTemplate", + @Tag("classpath") @AbstractCollection(surroundWithTag = false, elementTag = "path", elementValueAttribute = "") var classpath: MutableList = ArrayList(), diff --git a/compiler/frontend/src/org/jetbrains/kotlin/script/scriptDefinitionFromTemplate.kt b/compiler/frontend/src/org/jetbrains/kotlin/script/scriptDefinitionFromTemplate.kt index 997631b9817..fea7703932e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/script/scriptDefinitionFromTemplate.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/script/scriptDefinitionFromTemplate.kt @@ -35,7 +35,7 @@ import kotlin.reflect.KClass import kotlin.reflect.memberFunctions import kotlin.reflect.primaryConstructor -open class KotlinScriptDefinitionFromTemplate(val template: KClass, +open class KotlinScriptDefinitionFromTemplate(final override val template: KClass, val resolver: ScriptDependenciesResolver? = null, val scriptFilePattern: String? = null, val environment: Map? = null diff --git a/compiler/tests-common/org/jetbrains/kotlin/codegen/CodegenTestFiles.java b/compiler/tests-common/org/jetbrains/kotlin/codegen/CodegenTestFiles.java index 86026990d2b..31b65369d9f 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/codegen/CodegenTestFiles.java +++ b/compiler/tests-common/org/jetbrains/kotlin/codegen/CodegenTestFiles.java @@ -22,19 +22,12 @@ import com.intellij.openapi.util.Pair; import com.intellij.psi.PsiErrorElement; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.builtins.DefaultBuiltIns; -import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.checkers.CheckerTestUtil; -import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.resolve.AnalyzingUtils; import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider; -import org.jetbrains.kotlin.script.ScriptParameter; import org.jetbrains.kotlin.script.StandardScriptDefinition; -import org.jetbrains.kotlin.scripts.SimpleParamsTestScriptDefinition; import org.jetbrains.kotlin.test.KotlinTestUtils; -import org.jetbrains.kotlin.types.KotlinType; -import org.jetbrains.kotlin.types.Variance; import java.io.IOException; import java.util.ArrayList; diff --git a/compiler/tests-common/org/jetbrains/kotlin/scripts/TestScriptDefinitions.kt b/compiler/tests-common/org/jetbrains/kotlin/scripts/TestScriptDefinitions.kt index ce0aa4ade97..318f2d3dd47 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/scripts/TestScriptDefinitions.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/scripts/TestScriptDefinitions.kt @@ -16,39 +16,10 @@ package org.jetbrains.kotlin.scripts -import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.descriptors.ScriptDescriptor -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.psi.KtScript -import org.jetbrains.kotlin.script.* import java.io.File import java.net.URL import java.net.URLClassLoader -abstract class BaseScriptDefinition (val extension: String, val cp: List? = null) : KotlinScriptDefinition { - override val name = "Test Kotlin Script" - override fun isScript(file: TF): Boolean = getFileName(file).endsWith(extension) - override fun getScriptName(script: KtScript): Name = ScriptNameUtil.fileNameWithExtensionStripped(script, extension) - override fun getDependenciesFor(file: TF, project: Project, previousDependencies: KotlinScriptExternalDependencies?): KotlinScriptExternalDependencies? = - object : KotlinScriptExternalDependencies { - override val classpath: Iterable = cp ?: (classpathFromProperty() + classpathFromClassloader(BaseScriptDefinition::class.java.classLoader)).distinct() - } -} - -open class SimpleParamsWithClasspathTestScriptDefinition(extension: String, val parameters: List, classpath: List? = null) - : BaseScriptDefinition(extension, classpath) -{ - override fun getScriptParameters(scriptDescriptor: ScriptDescriptor) = parameters -} - -open class SimpleParamsTestScriptDefinition(extension: String, parameters: List) : SimpleParamsWithClasspathTestScriptDefinition(extension, parameters) - -fun classpathFromProperty(): List = - System.getProperty("java.class.path")?.let { - it.split(String.format("\\%s", File.pathSeparatorChar).toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() - .map { File(it) } - } ?: emptyList() - fun URL.toFile() = try { File(toURI().schemeSpecificPart) @@ -56,10 +27,4 @@ fun URL.toFile() = catch (e: java.net.URISyntaxException) { if (protocol != "file") null else File(file) - } - -fun classpathFromClassloader(classLoader: ClassLoader): List = - (classLoader as? URLClassLoader)?.urLs - ?.mapNotNull { it.toFile() } - ?: emptyList() - + } \ No newline at end of file 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 8b3c0aaa832..41c26abc91d 100644 --- a/idea/idea-repl/src/org/jetbrains/kotlin/console/KotlinConsoleRunner.kt +++ b/idea/idea-repl/src/org/jetbrains/kotlin/console/KotlinConsoleRunner.kt @@ -55,7 +55,6 @@ import org.jetbrains.kotlin.console.gutter.ConsoleGutterContentProvider import org.jetbrains.kotlin.console.gutter.ConsoleIndicatorRenderer import org.jetbrains.kotlin.console.gutter.IconWithTooltip import org.jetbrains.kotlin.console.gutter.ReplIcons -import org.jetbrains.kotlin.descriptors.ScriptDescriptor import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.caches.resolve.ModuleTestSourceInfo import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor @@ -68,9 +67,8 @@ import org.jetbrains.kotlin.psi.moduleInfo import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor import org.jetbrains.kotlin.resolve.repl.ReplState -import org.jetbrains.kotlin.script.KotlinScriptDefinition +import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromTemplate import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider -import org.jetbrains.kotlin.script.ScriptParameter import java.awt.Color import java.awt.Font import java.util.concurrent.CountDownLatch @@ -126,7 +124,7 @@ class KotlinConsoleRunner( val executor = CommandExecutor(this) var compilerHelper: ConsoleCompilerHelper by Delegates.notNull() - private val consoleScriptDefinition = object : KotlinScriptDefinition { + private val consoleScriptDefinition = object : KotlinScriptDefinitionFromTemplate(Any::class) { override val name = "Kotlin REPL" override fun isScript(file: TF): Boolean { val vf = when (file) { @@ -136,7 +134,6 @@ class KotlinConsoleRunner( } return vf == consoleView.virtualFile } - override fun getScriptParameters(scriptDescriptor: ScriptDescriptor) = emptyList() override fun getScriptName(script: KtScript) = Name.identifier("REPL") }