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 =
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<ScriptDependency>?.toClassPathOrEmpty() = this?.flatMap { (it as JvmDependency).classpath } ?: emptyList()
@@ -76,11 +76,16 @@ abstract class KotlinScriptDefinitionAdapterFromNewAPIBase : KotlinScriptDefinit
get() = scriptCompilationConfiguration[ScriptCompilationConfiguration.compilerOptions]
.orEmpty()
override val scriptExpectedLocations: List<ScriptExpectedLocation> =
listOf(
ScriptExpectedLocation.SourcesOnly,
ScriptExpectedLocation.TestsOnly
)
override val scriptExpectedLocations: List<ScriptExpectedLocation>
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]