diff --git a/idea/testData/script/definition/defaultTemplate/template.kt b/idea/testData/script/definition/defaultTemplate/template.kt new file mode 100644 index 00000000000..6f161777b5e --- /dev/null +++ b/idea/testData/script/definition/defaultTemplate/template.kt @@ -0,0 +1,22 @@ +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 + +class FromTextDependenciesResolver : AsyncDependenciesResolver { + @Suppress("UNCHECKED_CAST") + suspend override fun resolveAsync(scriptContents: ScriptContents, environment: Environment): DependenciesResolver.ResolveResult { + return ScriptDependencies( + classpath = (environment["classpath"] as? List).orEmpty(), + imports = (environment["imports"] as? List).orEmpty(), + sources = (environment["sources"] as? List).orEmpty() + ).asSuccess() + } +} + +@ScriptExpectedLocations([ScriptExpectedLocation.Everywhere]) +@ScriptTemplateDefinition(FromTextDependenciesResolver::class, scriptFilePattern = "script.kts") +open class Template \ 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 8c0eec0e77f..e40da562431 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt @@ -157,6 +157,24 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() { module.addDependency(projectLibrary("sharedLib", classesRoot = sharedLib)) } + if (module != null) { + module.addDependency( + projectLibrary( + "script-runtime", + classesRoot = VfsUtil.findFileByIoFile(PathUtil.kotlinPathsForDistDirectory.scriptRuntimePath, true) + ) + ) + + if (environment["template-classes"] != null) { + module.addDependency( + projectLibrary( + "script-template-library", + classesRoot = VfsUtil.findFileByIoFile(environment["template-classes"] as File, true) + ) + ) + } + } + createFileAndSyncDependencies(mainScriptFile) } @@ -192,9 +210,7 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() { } } } - if (env[useDefaultTemplate] == true && defaultEnvironment["template-classes"] != null) { - error("Script configuration should be defined by either '$useDefaultTemplate' clause or via template in 'template' directory") - } + env.putAll(defaultEnvironment) return env } @@ -202,6 +218,8 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() { private fun defaultEnvironment(path: String): Map { val templateOutDir = File("${path}template").takeIf { it.isDirectory }?.let { compileLibToDir(it, PathUtil.kotlinPathsForDistDirectory.scriptRuntimePath.path) + } ?: File("idea/testData/script/definition/defaultTemplate").takeIf { it.isDirectory }?.let { + compileLibToDir(it, PathUtil.kotlinPathsForDistDirectory.scriptRuntimePath.path) } val libSrcDir = File("${path}lib").takeIf { it.isDirectory } diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/TestScriptDefinitionContributors.kt b/idea/tests/org/jetbrains/kotlin/idea/script/TestScriptDefinitionContributors.kt index 95438c0f0d6..907e5140248 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/TestScriptDefinitionContributors.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/script/TestScriptDefinitionContributors.kt @@ -20,14 +20,6 @@ import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionContributor import org.jetbrains.kotlin.idea.core.script.loadDefinitionsFromTemplates import java.io.File import kotlin.script.dependencies.Environment -import kotlin.script.dependencies.ScriptContents -import kotlin.script.experimental.dependencies.AsyncDependenciesResolver -import kotlin.script.experimental.dependencies.DependenciesResolver -import kotlin.script.experimental.dependencies.ScriptDependencies -import kotlin.script.experimental.dependencies.asSuccess -import kotlin.script.experimental.location.ScriptExpectedLocation -import kotlin.script.experimental.location.ScriptExpectedLocations -import kotlin.script.templates.ScriptTemplateDefinition class CustomScriptTemplateProvider( @@ -49,24 +41,7 @@ class FromTextTemplateProvider( override val id = "Test" override fun getDefinitions() = loadDefinitionsFromTemplates( templateClassNames = listOf("org.jetbrains.kotlin.idea.script.Template"), - templateClasspath = emptyList(), + templateClasspath = listOfNotNull(environment["template-classes"] as? File), environment = environment ) -} - - -class FromTextDependenciesResolver : AsyncDependenciesResolver { - @Suppress("UNCHECKED_CAST") - suspend override fun resolveAsync(scriptContents: ScriptContents, environment: Environment): DependenciesResolver.ResolveResult { - return ScriptDependencies( - classpath = (environment["classpath"] as? List).orEmpty(), - imports = (environment["imports"] as? List).orEmpty(), - sources = (environment["sources"] as? List).orEmpty() - ).asSuccess() - } -} - -@ScriptExpectedLocations([ScriptExpectedLocation.Everywhere]) -@Suppress("unused") -@ScriptTemplateDefinition(FromTextDependenciesResolver::class, scriptFilePattern = "script.kts") -class Template \ No newline at end of file +} \ No newline at end of file