Add ide script settings for sources and accepted location

This commit is contained in:
Ilya Chernikov
2018-10-18 17:01:53 +02:00
parent 492abd08bc
commit ae0b2405bc
3 changed files with 57 additions and 8 deletions
@@ -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<List<ScriptDependency>>()
@Suppress("RemoveExplicitTypeArguments")
val IdeScriptCompilationConfigurationKeys.acceptedLocations
by PropertiesCollection.key<List<ScriptAcceptedLocation>>(
listOf(
ScriptAcceptedLocation.Sources,
ScriptAcceptedLocation.Tests
)
)
@@ -40,14 +40,17 @@ class BridgeDependenciesResolver(
) )
val oldClasspath = val oldClasspath =
scriptCompilationConfiguration[ScriptCompilationConfiguration.dependencies] scriptCompilationConfiguration[ScriptCompilationConfiguration.dependencies].toClassPathOrEmpty()
?.flatMap { (it as JvmDependency).classpath } ?: emptyList()
val defaultImports = scriptCompilationConfiguration[ScriptCompilationConfiguration.defaultImports]?.toList() ?: emptyList() val defaultImports = scriptCompilationConfiguration[ScriptCompilationConfiguration.defaultImports]?.toList() ?: emptyList()
val refineFn = scriptCompilationConfiguration[ScriptCompilationConfiguration.refineConfigurationOnAnnotations]?.handler val refineFn = scriptCompilationConfiguration[ScriptCompilationConfiguration.refineConfigurationOnAnnotations]?.handler
?: return DependenciesResolver.ResolveResult.Success( ?: return DependenciesResolver.ResolveResult.Success(
ScriptDependencies(classpath = oldClasspath, imports = defaultImports), ScriptDependencies(
classpath = oldClasspath,
sources = scriptCompilationConfiguration[ScriptCompilationConfiguration.ide.dependenciesSources].toClassPathOrEmpty(),
imports = defaultImports
),
diagnostics diagnostics
) )
@@ -72,6 +75,7 @@ class BridgeDependenciesResolver(
return DependenciesResolver.ResolveResult.Success( return DependenciesResolver.ResolveResult.Success(
ScriptDependencies( ScriptDependencies(
classpath = newClasspath, // TODO: maybe it should return only increment from the initial config classpath = newClasspath, // TODO: maybe it should return only increment from the initial config
sources = refinedConfiguration[ScriptCompilationConfiguration.ide.dependenciesSources].toClassPathOrEmpty(),
imports = defaultImports imports = defaultImports
), ),
diagnostics diagnostics
@@ -93,3 +97,4 @@ internal fun ScriptContents.toScriptSource(): SourceCode = when {
else -> throw IllegalArgumentException("Unable to convert script contents $this into script source") else -> throw IllegalArgumentException("Unable to convert script contents $this into script source")
} }
internal fun List<ScriptDependency>?.toClassPathOrEmpty() = this?.flatMap { (it as JvmDependency).classpath } ?: emptyList()
@@ -76,11 +76,16 @@ abstract class KotlinScriptDefinitionAdapterFromNewAPIBase : KotlinScriptDefinit
get() = scriptCompilationConfiguration[ScriptCompilationConfiguration.compilerOptions] get() = scriptCompilationConfiguration[ScriptCompilationConfiguration.compilerOptions]
.orEmpty() .orEmpty()
override val scriptExpectedLocations: List<ScriptExpectedLocation> = override val scriptExpectedLocations: List<ScriptExpectedLocation>
listOf( get() = scriptCompilationConfiguration[ScriptCompilationConfiguration.ide.acceptedLocations]?.map {
ScriptExpectedLocation.SourcesOnly, when(it) {
ScriptExpectedLocation.TestsOnly 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) { private val scriptingClassGetter by lazy(LazyThreadSafetyMode.PUBLICATION) {
hostConfiguration[ScriptingHostConfiguration.getScriptingClass] hostConfiguration[ScriptingHostConfiguration.getScriptingClass]