From d760299dc16be4eae96e48290a178ed9ca697e08 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Fri, 14 Sep 2018 17:08:29 +0200 Subject: [PATCH] Implement context classpath extraction using particular class,... Use it in the main-kts. Also improve diagnoistics related to the definition loading. #KT-26828 fixed (after this commit - finally, see also another related commit) --- .../script/experimental/host/configurationFromTemplate.kt | 2 +- .../kotlin/script/experimental/jvm/jvmScriptCompilation.kt | 7 +++++++ .../src/org/jetbrains/kotlin/mainKts/scriptDef.kt | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/libraries/scripting/common/src/kotlin/script/experimental/host/configurationFromTemplate.kt b/libraries/scripting/common/src/kotlin/script/experimental/host/configurationFromTemplate.kt index 7298e474e22..6af633c4ca7 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/host/configurationFromTemplate.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/host/configurationFromTemplate.kt @@ -60,7 +60,7 @@ fun createCompilationConfigurationFromTemplate( fun scriptConfigInstance(kclass: KClass): ScriptCompilationConfiguration = try { kclass.objectInstance ?: kclass.createInstance() } catch (e: Throwable) { - throw IllegalArgumentException(ILLEGAL_CONFIG_ANN_ARG, e) + throw IllegalArgumentException("$ILLEGAL_CONFIG_ANN_ARG: ${e.message}", e) } return ScriptCompilationConfiguration(scriptConfigInstance(mainAnnotation.compilationConfiguration)) { diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptCompilation.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptCompilation.kt index b8279863a3e..d9e5f20fcc6 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptCompilation.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptCompilation.kt @@ -6,6 +6,7 @@ package kotlin.script.experimental.jvm import java.io.File +import kotlin.reflect.KClass import kotlin.script.experimental.api.* import kotlin.script.experimental.host.ScriptingHostConfiguration import kotlin.script.experimental.jvm.util.scriptCompilationClasspathFromContext @@ -22,6 +23,12 @@ open class JvmScriptCompilationConfigurationBuilder : PropertiesCollection.Build companion object : JvmScriptCompilationConfigurationKeys } +fun JvmScriptCompilationConfigurationBuilder.dependenciesFromClassContext( + contextClass: KClass<*>, vararg libraries: String, wholeClasspath: Boolean = false +) { + dependenciesFromClassloader(*libraries, classLoader = contextClass.java.classLoader, wholeClasspath = wholeClasspath) +} + fun JvmScriptCompilationConfigurationBuilder.dependenciesFromCurrentContext(vararg libraries: String, wholeClasspath: Boolean = false) { dependenciesFromClassloader(*libraries, wholeClasspath = wholeClasspath) } diff --git a/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/scriptDef.kt b/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/scriptDef.kt index a521597946f..67f0b7c1de8 100644 --- a/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/scriptDef.kt +++ b/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/scriptDef.kt @@ -16,6 +16,7 @@ import kotlin.script.experimental.api.* import kotlin.script.experimental.jvm.JvmDependency import kotlin.script.experimental.jvm.compat.mapLegacyDiagnosticSeverity import kotlin.script.experimental.jvm.compat.mapLegacyScriptPosition +import kotlin.script.experimental.jvm.dependenciesFromClassContext import kotlin.script.experimental.jvm.dependenciesFromCurrentContext import kotlin.script.experimental.jvm.jvm @@ -27,9 +28,8 @@ object MainKtsScriptDefinition : ScriptCompilationConfiguration( { defaultImports(DependsOn::class, Repository::class) jvm { - dependenciesFromCurrentContext("kotlin-main-kts") + dependenciesFromClassContext(MainKtsScriptDefinition::class, "kotlin-main-kts") } - // variant: dependencies(collectDependenciesFromCurrentContext(... refineConfiguration { onAnnotations(DependsOn::class, Repository::class, handler = MainKtsConfigurator()) }