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 { fun scriptConfigInstance(kclass: KClass<out ScriptCompilationConfiguration>): ScriptCompilationConfiguration = try {
kclass.objectInstance ?: kclass.createInstance() kclass.objectInstance ?: kclass.createInstance()
} catch (e: Throwable) { } catch (e: Throwable) {
throw IllegalArgumentException(ILLEGAL_CONFIG_ANN_ARG, e) throw IllegalArgumentException("$ILLEGAL_CONFIG_ANN_ARG: ${e.message}", e)
} }
return ScriptCompilationConfiguration(scriptConfigInstance(mainAnnotation.compilationConfiguration)) { return ScriptCompilationConfiguration(scriptConfigInstance(mainAnnotation.compilationConfiguration)) {
@@ -6,6 +6,7 @@
package kotlin.script.experimental.jvm package kotlin.script.experimental.jvm
import java.io.File import java.io.File
import kotlin.reflect.KClass
import kotlin.script.experimental.api.* import kotlin.script.experimental.api.*
import kotlin.script.experimental.host.ScriptingHostConfiguration import kotlin.script.experimental.host.ScriptingHostConfiguration
import kotlin.script.experimental.jvm.util.scriptCompilationClasspathFromContext import kotlin.script.experimental.jvm.util.scriptCompilationClasspathFromContext
@@ -22,6 +23,12 @@ open class JvmScriptCompilationConfigurationBuilder : PropertiesCollection.Build
companion object : JvmScriptCompilationConfigurationKeys 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) { fun JvmScriptCompilationConfigurationBuilder.dependenciesFromCurrentContext(vararg libraries: String, wholeClasspath: Boolean = false) {
dependenciesFromClassloader(*libraries, wholeClasspath = wholeClasspath) dependenciesFromClassloader(*libraries, wholeClasspath = wholeClasspath)
} }
@@ -16,6 +16,7 @@ import kotlin.script.experimental.api.*
import kotlin.script.experimental.jvm.JvmDependency import kotlin.script.experimental.jvm.JvmDependency
import kotlin.script.experimental.jvm.compat.mapLegacyDiagnosticSeverity import kotlin.script.experimental.jvm.compat.mapLegacyDiagnosticSeverity
import kotlin.script.experimental.jvm.compat.mapLegacyScriptPosition import kotlin.script.experimental.jvm.compat.mapLegacyScriptPosition
import kotlin.script.experimental.jvm.dependenciesFromClassContext
import kotlin.script.experimental.jvm.dependenciesFromCurrentContext import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
import kotlin.script.experimental.jvm.jvm import kotlin.script.experimental.jvm.jvm
@@ -27,9 +28,8 @@ object MainKtsScriptDefinition : ScriptCompilationConfiguration(
{ {
defaultImports(DependsOn::class, Repository::class) defaultImports(DependsOn::class, Repository::class)
jvm { jvm {
dependenciesFromCurrentContext("kotlin-main-kts") dependenciesFromClassContext(MainKtsScriptDefinition::class, "kotlin-main-kts")
} }
// variant: dependencies(collectDependenciesFromCurrentContext(...
refineConfiguration { refineConfiguration {
onAnnotations(DependsOn::class, Repository::class, handler = MainKtsConfigurator()) onAnnotations(DependsOn::class, Repository::class, handler = MainKtsConfigurator())
} }