diff --git a/idea/testData/script/definition/defaultTemplate/template.kt b/idea/testData/script/definition/defaultTemplate/template.kt index 856f516ddcb..bdbb3eb1d90 100644 --- a/idea/testData/script/definition/defaultTemplate/template.kt +++ b/idea/testData/script/definition/defaultTemplate/template.kt @@ -1,23 +1,55 @@ package org.jetbrains.kotlin.idea.script import java.io.File -import kotlin.script.dependencies.* -import kotlin.script.experimental.dependencies.* -import kotlin.script.experimental.location.* -import kotlin.script.templates.ScriptTemplateDefinition +import kotlin.script.experimental.annotations.KotlinScript +import kotlin.script.experimental.api.* +import kotlin.script.experimental.host.ScriptingHostConfiguration +import kotlin.script.experimental.host.ScriptingHostConfigurationKeys +import kotlin.script.experimental.jvm.JvmDependency +import kotlin.script.experimental.jvm.dependenciesFromClassContext +import kotlin.script.experimental.jvm.jdkHome +import kotlin.script.experimental.jvm.jvm +import kotlin.script.experimental.util.PropertiesCollection -class FromTextDependenciesResolver : DependenciesResolver { - @Suppress("UNCHECKED_CAST") - override fun resolve(scriptContents: ScriptContents, environment: Environment): DependenciesResolver.ResolveResult { - return ScriptDependencies( - javaHome = environment["javaHome"] as? File, - classpath = (environment["classpath"] as? List).orEmpty(), - imports = (environment["imports"] as? List).orEmpty(), - sources = (environment["sources"] as? List).orEmpty() - ).asSuccess() +@KotlinScript( + displayName = "Definition for tests", + fileExtension = "kts", + compilationConfiguration = TemplateDefinition::class +) +open class Template(val args: Array) + +val ScriptingHostConfigurationKeys.getEnvironment by PropertiesCollection.key<() -> Map?>() + +@Suppress("UNCHECKED_CAST") +object TemplateDefinition : ScriptCompilationConfiguration( + { + jvm { + dependenciesFromClassContext(TemplateDefinition::class) + } + ide { + acceptedLocations(ScriptAcceptedLocation.Everywhere) + } + refineConfiguration { + beforeCompiling { context -> + val environment = context.compilationConfiguration[ScriptCompilationConfiguration.hostConfiguration]?.let { + it[ScriptingHostConfiguration.getEnvironment]?.invoke() + }.orEmpty() + + context.compilationConfiguration.with { + (environment["javaHome"] as? File)?.let { + jvm.jdkHome(it) + } + (environment["imports"] as? List)?.let { + defaultImports(it) + } + (environment["classpath"] as? List)?.let { + dependencies(JvmDependency(it)) + } + (environment["sources"] as? List)?.let { + ide.dependenciesSources(JvmDependency(it)) + } + }.asSuccess() + } + } } -} - -@ScriptExpectedLocations([ScriptExpectedLocation.Everywhere]) -@ScriptTemplateDefinition(FromTextDependenciesResolver::class, scriptFilePattern = "script.kts") -open class Template \ No newline at end of file +) \ No newline at end of file diff --git a/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/template.kt b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/template.kt index b31570b2c86..827b6579bfc 100644 --- a/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/template.kt +++ b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/template.kt @@ -1,24 +1,37 @@ package custom.scriptDefinition import java.io.File -import kotlin.script.dependencies.* -import kotlin.script.experimental.dependencies.* -import kotlin.script.templates.ScriptTemplateDefinition -import kotlin.script.experimental.location.* +import kotlin.script.experimental.annotations.KotlinScript +import kotlin.script.experimental.api.* +import kotlin.script.experimental.host.ScriptingHostConfiguration +import kotlin.script.experimental.host.ScriptingHostConfigurationKeys +import kotlin.script.experimental.jvm.JvmDependency +import kotlin.script.experimental.util.PropertiesCollection -class TestDependenciesResolver : DependenciesResolver { - override fun resolve( - scriptContents: ScriptContents, - environment: Environment - ): DependenciesResolver.ResolveResult { - return DependenciesResolver.ResolveResult.Success( - ScriptDependencies( - classpath = listOf(environment["template-classes"] as File) - ) - ) +@KotlinScript( + fileExtension = "kts", + compilationConfiguration = TemplateDefinition::class +) +open class Template(val args: Array) + +val ScriptingHostConfigurationKeys.getEnvironment by PropertiesCollection.key<() -> Map?>() + +object TemplateDefinition : ScriptCompilationConfiguration( + { + refineConfiguration { + beforeCompiling { context -> + val environment = + context.compilationConfiguration[ScriptCompilationConfiguration.hostConfiguration]?.let { + it[ScriptingHostConfiguration.getEnvironment]?.invoke() + }.orEmpty() + + context.compilationConfiguration.with { + dependencies(JvmDependency(environment["template-classes"] as File)) + }.asSuccess() + } + } + ide { + acceptedLocations(ScriptAcceptedLocation.Everywhere) + } } -} - -@ScriptExpectedLocations([ScriptExpectedLocation.Everywhere]) -@ScriptTemplateDefinition(TestDependenciesResolver::class, scriptFilePattern = "script.kts") -open class Template \ No newline at end of file +) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt index 9a7ed20221d..b8fbdbf5eb0 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt @@ -136,6 +136,8 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() { createFileAndSyncDependencies(mainScriptFile) } + private val oldScripClasspath: String? = System.getProperty("kotlin.script.classpath") + override fun setUp() { super.setUp() ApplicationManager.getApplication().isScriptDependenciesUpdaterDisabled = true @@ -143,6 +145,9 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() { override fun tearDown() { ApplicationManager.getApplication().isScriptDependenciesUpdaterDisabled = false + + System.setProperty("kotlin.script.classpath", oldScripClasspath ?: "") + super.tearDown() } @@ -217,6 +222,10 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() { compileLibToDir(it, *scriptClasspath()) } + if (templateOutDir != null) { + System.setProperty("kotlin.script.classpath", templateOutDir.path) + } + val libSrcDir = File("${path}lib").takeIf { it.isDirectory } val libClasses = libSrcDir?.let { compileLibToDir(it) }