diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt index 308e40638cd..4efb84700f2 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt @@ -1,17 +1,6 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.idea.core.script @@ -235,7 +224,7 @@ fun loadDefinitionsFromTemplates( // as a compatibility measure, the asm based reading of annotations should be implemented to filter classes before classloading val template = loader.loadClass(templateClassName).kotlin val hostConfiguration = ScriptingHostConfiguration(baseHostConfiguration) { - configurationDependencies(JvmDependency(classpath)) + configurationDependencies(JvmDependency(templateClasspath)) } when { template.annotations.firstIsInstanceOrNull() != null -> { diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleBuildScriptsDataService.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleBuildScriptsDataService.kt index c15e8479973..c68920cad90 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleBuildScriptsDataService.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleBuildScriptsDataService.kt @@ -29,12 +29,16 @@ import org.jetbrains.kotlin.idea.core.script.configuration.getGradleScriptInputs import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper import org.jetbrains.kotlin.scripting.resolve.VirtualFileScriptSource +import org.jetbrains.kotlin.scripting.resolve.adjustByDefinition import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings import org.jetbrains.plugins.gradle.util.GradleConstants import java.io.File -import kotlin.script.experimental.dependencies.ScriptDependencies +import kotlin.script.experimental.api.* +import kotlin.script.experimental.jvm.JvmDependency +import kotlin.script.experimental.jvm.jdkHome +import kotlin.script.experimental.jvm.jvm class KotlinGradleBuildScriptsDataService : AbstractProjectDataService() { override fun getTargetDataKey(): Key = GradleSourceSetData.KEY @@ -67,21 +71,25 @@ class KotlinGradleBuildScriptsDataService : AbstractProjectDataService) + +@Suppress("UNCHECKED_CAST") +object TemplateDefinition : ScriptCompilationConfiguration( + { + baseClass(Base::class) + ide { + acceptedLocations(ScriptAcceptedLocation.Everywhere) + } } -} - -@ScriptExpectedLocations([ScriptExpectedLocation.Everywhere]) -@ScriptTemplateDefinition(TestDependenciesResolver::class, scriptFilePattern = "script.kts") -open class Template: Base() +) open class Base { val i = 3 diff --git a/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ScriptContentLoader.kt b/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ScriptContentLoader.kt index cdcbcffb216..2a765f8491f 100644 --- a/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ScriptContentLoader.kt +++ b/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ScriptContentLoader.kt @@ -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 ?: ""), ScriptReport.Severity.FATAL)) diff --git a/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/refineCompilationConfiguration.kt b/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/refineCompilationConfiguration.kt index fdc88295b15..9f2cd601919 100644 --- a/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/refineCompilationConfiguration.kt +++ b/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/refineCompilationConfiguration.kt @@ -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 { + return (definition.asLegacyOrNull()?.templateClasspath + ?: definition.hostConfiguration[ScriptingHostConfiguration.configurationDependencies].toClassPathOrEmpty()) +} + internal fun makeScriptContents( file: VirtualFile, legacyDefinition: KotlinScriptDefinition,