diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptIdeConfiguration.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptIdeConfiguration.kt new file mode 100644 index 00000000000..a5fa21c0678 --- /dev/null +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptIdeConfiguration.kt @@ -0,0 +1,39 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +@file:Suppress("unused") + +package kotlin.script.experimental.api + +import kotlin.script.experimental.util.PropertiesCollection + +interface IdeScriptCompilationConfigurationKeys + +open class IdeScriptCompilationConfigurationBuilder : PropertiesCollection.Builder(), + IdeScriptCompilationConfigurationKeys { + companion object : IdeScriptCompilationConfigurationKeys +} + +enum class ScriptAcceptedLocation { + Sources, // Under sources roots + Tests, // Under test sources roots + Libraries, // Under libraries classes or sources + Project, // Under project folder, including sources and test sources roots + Everywhere; +} + +val ScriptCompilationConfigurationKeys.ide + get() = IdeScriptCompilationConfigurationBuilder() + +val IdeScriptCompilationConfigurationKeys.dependenciesSources by PropertiesCollection.key>() + +@Suppress("RemoveExplicitTypeArguments") +val IdeScriptCompilationConfigurationKeys.acceptedLocations + by PropertiesCollection.key>( + listOf( + ScriptAcceptedLocation.Sources, + ScriptAcceptedLocation.Tests + ) + ) diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt index 0f5fa6af5bd..ebc81d8645a 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt @@ -40,14 +40,17 @@ class BridgeDependenciesResolver( ) val oldClasspath = - scriptCompilationConfiguration[ScriptCompilationConfiguration.dependencies] - ?.flatMap { (it as JvmDependency).classpath } ?: emptyList() + scriptCompilationConfiguration[ScriptCompilationConfiguration.dependencies].toClassPathOrEmpty() val defaultImports = scriptCompilationConfiguration[ScriptCompilationConfiguration.defaultImports]?.toList() ?: emptyList() val refineFn = scriptCompilationConfiguration[ScriptCompilationConfiguration.refineConfigurationOnAnnotations]?.handler ?: return DependenciesResolver.ResolveResult.Success( - ScriptDependencies(classpath = oldClasspath, imports = defaultImports), + ScriptDependencies( + classpath = oldClasspath, + sources = scriptCompilationConfiguration[ScriptCompilationConfiguration.ide.dependenciesSources].toClassPathOrEmpty(), + imports = defaultImports + ), diagnostics ) @@ -72,6 +75,7 @@ class BridgeDependenciesResolver( return DependenciesResolver.ResolveResult.Success( ScriptDependencies( classpath = newClasspath, // TODO: maybe it should return only increment from the initial config + sources = refinedConfiguration[ScriptCompilationConfiguration.ide.dependenciesSources].toClassPathOrEmpty(), imports = defaultImports ), diagnostics @@ -93,3 +97,4 @@ internal fun ScriptContents.toScriptSource(): SourceCode = when { else -> throw IllegalArgumentException("Unable to convert script contents $this into script source") } +internal fun List?.toClassPathOrEmpty() = this?.flatMap { (it as JvmDependency).classpath } ?: emptyList() diff --git a/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/KotlinScriptDefinitionAdapterFromNewAPI.kt b/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/KotlinScriptDefinitionAdapterFromNewAPI.kt index ee241ed474d..4afb5eaca4d 100644 --- a/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/KotlinScriptDefinitionAdapterFromNewAPI.kt +++ b/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/KotlinScriptDefinitionAdapterFromNewAPI.kt @@ -76,11 +76,16 @@ abstract class KotlinScriptDefinitionAdapterFromNewAPIBase : KotlinScriptDefinit get() = scriptCompilationConfiguration[ScriptCompilationConfiguration.compilerOptions] .orEmpty() - override val scriptExpectedLocations: List = - listOf( - ScriptExpectedLocation.SourcesOnly, - ScriptExpectedLocation.TestsOnly - ) + override val scriptExpectedLocations: List + get() = scriptCompilationConfiguration[ScriptCompilationConfiguration.ide.acceptedLocations]?.map { + when(it) { + ScriptAcceptedLocation.Sources -> ScriptExpectedLocation.SourcesOnly + ScriptAcceptedLocation.Tests -> ScriptExpectedLocation.TestsOnly + ScriptAcceptedLocation.Libraries -> ScriptExpectedLocation.Libraries + ScriptAcceptedLocation.Project -> ScriptExpectedLocation.Project + ScriptAcceptedLocation.Everywhere -> ScriptExpectedLocation.Everywhere + } + } ?: listOf(ScriptExpectedLocation.SourcesOnly, ScriptExpectedLocation.TestsOnly) private val scriptingClassGetter by lazy(LazyThreadSafetyMode.PUBLICATION) { hostConfiguration[ScriptingHostConfiguration.getScriptingClass]