Refactor script definitions loading

Make ScriptDefinitionProvider an interface
    and provide different implementation for cli and IDEA
Rework ide extension point to a simpler interface (ScriptDefinitionContributor)
Move template loading logic into a top level function
Allow script definitions to be reloaded in IDE
This commit is contained in:
Pavel V. Talanov
2017-10-19 20:02:30 +03:00
parent f063254cc1
commit cdfdc1d19b
32 changed files with 481 additions and 419 deletions
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.cli.common.repl.*
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.cli.jvm.repl.GenericReplCompiler
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion
import org.jetbrains.kotlin.script.KotlinScriptDefinition
import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromAnnotatedTemplate
import org.jetbrains.kotlin.utils.PathUtil
@@ -64,7 +63,7 @@ class KotlinJsr223JvmLocalScriptEngine(
private fun makeScriptDefinition(templateClasspath: List<File>, templateClassName: String): KotlinScriptDefinition {
val classloader = URLClassLoader(templateClasspath.map { it.toURI().toURL() }.toTypedArray(), this.javaClass.classLoader)
val cls = classloader.loadClass(templateClassName)
return KotlinScriptDefinitionFromAnnotatedTemplate(cls.kotlin, null, null, emptyMap())
return KotlinScriptDefinitionFromAnnotatedTemplate(cls.kotlin, emptyMap())
}
private fun makeCompilerConfiguration() = CompilerConfiguration().apply {
@@ -115,7 +115,7 @@ done
suppressOutput: Boolean = false
): Class<*>? =
compileScriptImpl("src/test/resources/scripts/" + scriptFileName,
KotlinScriptDefinitionFromAnnotatedTemplate(scriptTemplate, null, null, environment), suppressOutput)
KotlinScriptDefinitionFromAnnotatedTemplate(scriptTemplate, environment), suppressOutput)
private fun compileScriptImpl(
scriptPath: String,