From b1ac45195976ed2893fca058f7fb58e08a91c0ed Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 14 Jul 2017 20:56:18 +0300 Subject: [PATCH] Make sure template classpath is always among script dependencies --- ...inScriptDefinitionFromAnnotatedTemplate.kt | 4 ++- .../kotlin/script/ScriptContentLoader.kt | 10 ++++++- .../scriptTemplateProviderExtensionPoint.kt | 5 +++- .../core/script/ScriptDependenciesUpdater.kt | 30 +++++++++---------- .../emptyAsyncResolver/script.kts | 3 ++ .../emptyAsyncResolver/template/template.kt | 23 ++++++++++++++ .../highlighting/noResolver/script.kts | 3 ++ .../noResolver/template/template.kt | 13 ++++++++ ...onfigurationHighlightingTestGenerated.java | 12 ++++++++ 9 files changed, 85 insertions(+), 18 deletions(-) create mode 100644 idea/testData/script/definition/highlighting/emptyAsyncResolver/script.kts create mode 100644 idea/testData/script/definition/highlighting/emptyAsyncResolver/template/template.kt create mode 100644 idea/testData/script/definition/highlighting/noResolver/script.kts create mode 100644 idea/testData/script/definition/highlighting/noResolver/template/template.kt diff --git a/compiler/frontend.script/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt b/compiler/frontend.script/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt index ca3f08afd47..db4694529cd 100644 --- a/compiler/frontend.script/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt +++ b/compiler/frontend.script/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.NameUtils import org.jetbrains.kotlin.psi.KtScript import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull +import java.io.File import kotlin.reflect.KClass import kotlin.reflect.KFunction import kotlin.reflect.KParameter @@ -36,7 +37,8 @@ open class KotlinScriptDefinitionFromAnnotatedTemplate( template: KClass, providedResolver: DependenciesResolver? = null, providedScriptFilePattern: String? = null, - val environment: Map? = null + val environment: Map? = null, + val templateClasspath: List = emptyList() ) : KotlinScriptDefinition(template) { val scriptFilePattern by lazy { diff --git a/compiler/frontend.script/src/org/jetbrains/kotlin/script/ScriptContentLoader.kt b/compiler/frontend.script/src/org/jetbrains/kotlin/script/ScriptContentLoader.kt index 690e56dc307..dbfaaec0f9a 100644 --- a/compiler/frontend.script/src/org/jetbrains/kotlin/script/ScriptContentLoader.kt +++ b/compiler/frontend.script/src/org/jetbrains/kotlin/script/ScriptContentLoader.kt @@ -67,10 +67,18 @@ class ScriptContentLoader(private val project: Project) { getEnvironment(scriptDef) ) ServiceManager.getService(project, ScriptReportSink::class.java)?.attachReports(file, result.reports) - return result.dependencies + return result.dependencies?.adjustByDefinition(scriptDef) } fun getEnvironment(scriptDef: KotlinScriptDefinition) = (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) +} + diff --git a/compiler/frontend.script/src/org/jetbrains/kotlin/script/scriptTemplateProviderExtensionPoint.kt b/compiler/frontend.script/src/org/jetbrains/kotlin/script/scriptTemplateProviderExtensionPoint.kt index 4e6c7984c5c..4473bbfec91 100644 --- a/compiler/frontend.script/src/org/jetbrains/kotlin/script/scriptTemplateProviderExtensionPoint.kt +++ b/compiler/frontend.script/src/org/jetbrains/kotlin/script/scriptTemplateProviderExtensionPoint.kt @@ -72,7 +72,10 @@ fun makeScriptDefsFromTemplatesProviders(providers: Iterable