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)
This commit is contained in:
Ilya Chernikov
2018-09-14 17:08:29 +02:00
parent d9760f00f6
commit d760299dc1
3 changed files with 10 additions and 3 deletions
@@ -60,7 +60,7 @@ fun createCompilationConfigurationFromTemplate(
fun scriptConfigInstance(kclass: KClass<out ScriptCompilationConfiguration>): 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)) {
@@ -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)
}
@@ -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())
}