Add script configuration dependencies to script classpath

It was missing during configuration refinement thought new scripting API and during loading script configuration on Gradle project import

Do not pass additional classpath to configuration classpath: this may only affects Gradle with New scripting API (because it isn't used from other places)
In additional classpath kotlin-compiler and kotlin-stdlib was passed and there is no needs for this during loading Script Definitions through new scripting API

^KT-34626 Fixed
This commit is contained in:
Natalia Selezneva
2019-11-14 13:33:32 +03:00
parent 29ef10a919
commit ca71b2fe90
6 changed files with 58 additions and 53 deletions
@@ -12,7 +12,6 @@ import java.io.File
import kotlin.script.dependencies.ScriptContents
import kotlin.script.experimental.dependencies.DependenciesResolver
import kotlin.script.experimental.dependencies.DependenciesResolver.ResolveResult.Failure
import kotlin.script.experimental.dependencies.ScriptDependencies
import kotlin.script.experimental.dependencies.ScriptReport
class ScriptContentLoader(private val project: Project) {
@@ -54,14 +53,6 @@ class ScriptContentLoader(private val project: Project) {
(scriptDef as? KotlinScriptDefinitionFromAnnotatedTemplate)?.environment.orEmpty()
}
fun ScriptDependencies.adjustByDefinition(
scriptDef: KotlinScriptDefinition
): ScriptDependencies {
val additionalClasspath = (scriptDef as? KotlinScriptDefinitionFromAnnotatedTemplate)?.templateClasspath ?: return this
if (additionalClasspath.isEmpty()) return this
return copy(classpath = additionalClasspath + classpath)
}
fun Throwable.asResolveFailure(scriptDef: KotlinScriptDefinition): Failure {
val prefix = "${scriptDef.dependencyResolver::class.simpleName} threw exception ${this::class.simpleName}:\n "
return Failure(ScriptReport(prefix + (message ?: "<no message>"), ScriptReport.Severity.FATAL))
@@ -229,7 +229,10 @@ fun refineScriptCompilationConfiguration(
.onSuccess {
it.refineBeforeCompiling(script, collectedData)
}.onSuccess {
ScriptCompilationConfigurationWrapper.FromCompilationConfiguration(ktFileSource, it).asSuccess()
ScriptCompilationConfigurationWrapper.FromCompilationConfiguration(
ktFileSource,
it.adjustByDefinition(definition)
).asSuccess()
}
} else {
val file = script.getVirtualFile(definition)
@@ -260,12 +263,28 @@ fun refineScriptCompilationConfiguration(
else
ScriptCompilationConfigurationWrapper.FromLegacy(
ktFileSource,
result.dependencies?.adjustByDefinition(definition.legacyDefinition),
result.dependencies?.adjustByDefinition(definition),
definition
).asSuccess(result.reports.mapToDiagnostics())
}
}
fun ScriptDependencies.adjustByDefinition(definition: ScriptDefinition): ScriptDependencies {
val additionalClasspath = additionalClasspath(definition)
if (additionalClasspath.isEmpty()) return this
return copy(classpath = additionalClasspath + classpath)
}
fun ScriptCompilationConfiguration.adjustByDefinition(definition: ScriptDefinition): ScriptCompilationConfiguration {
return this.withUpdatedClasspath(additionalClasspath(definition))
}
private fun additionalClasspath(definition: ScriptDefinition): List<File> {
return (definition.asLegacyOrNull<KotlinScriptDefinitionFromAnnotatedTemplate>()?.templateClasspath
?: definition.hostConfiguration[ScriptingHostConfiguration.configurationDependencies].toClassPathOrEmpty())
}
internal fun makeScriptContents(
file: VirtualFile,
legacyDefinition: KotlinScriptDefinition,