Add ide script settings for sources and accepted location
This commit is contained in:
+39
@@ -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
|
||||
)
|
||||
)
|
||||
+8
-3
@@ -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()
|
||||
|
||||
+10
-5
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user