Skip to content

Commit 09815a5

Browse files
committed
WIP: Experiment with script definition construction
1 parent c6c4d95 commit 09815a5

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

server/src/main/kotlin/org/javacs/kt/Compiler.kt

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,16 @@ import org.jetbrains.kotlin.resolve.scopes.LexicalScope
3838
import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar
3939
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptDefinitionProvider
4040
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
41+
import org.jetbrains.kotlin.scripting.definitions.ScriptCompilationConfigurationFromDefinition
4142
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider
4243
import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
4344
import org.jetbrains.kotlin.scripting.definitions.StandardScriptDefinition
4445
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
4546
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition // Legacy
4647
import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
48+
import org.jetbrains.kotlin.scripting.definitions.getEnvironment
4749
import org.jetbrains.kotlin.scripting.extensions.ScriptExtraImportsProviderExtension
50+
import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate
4851
import org.jetbrains.kotlin.types.TypeUtils
4952
import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices
5053
import org.jetbrains.kotlin.util.KotlinFrontEndException
@@ -56,6 +59,12 @@ import java.nio.file.Paths
5659
import java.net.URLClassLoader
5760
import java.util.concurrent.locks.ReentrantLock
5861
import kotlin.concurrent.withLock
62+
import kotlin.script.dependencies.Environment
63+
import kotlin.script.dependencies.ScriptContents
64+
import kotlin.script.experimental.dependencies.ScriptDependencies
65+
import kotlin.script.experimental.api.ScriptCompilationConfiguration
66+
import kotlin.script.experimental.dependencies.DependenciesResolver
67+
import kotlin.script.experimental.dependencies.DependenciesResolver.ResolveResult
5968
import kotlin.script.experimental.host.ScriptingHostConfiguration
6069
import kotlin.script.experimental.host.configurationDependencies
6170
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
@@ -89,7 +98,7 @@ private class CompilationEnvironment(
8998
add(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, ScriptingCompilerConfigurationComponentRegistrar())
9099
addJvmClasspathRoots(classPath.map { it.toFile() })
91100

92-
// Setup script templates
101+
// Setup script templates (e.g. used by Gradle's Kotlin DSL)
93102
var scriptDefinitions: List<ScriptDefinition> = listOf(ScriptDefinition.getDefault(defaultJvmScriptingHostConfiguration))
94103

95104
if (classPath.any { GRADLE_DSL_DEPENDENCY_PATTERN.matches(it.fileName.toString()) }) {
@@ -108,7 +117,21 @@ private class CompilationEnvironment(
108117
val scriptHostConfig = ScriptingHostConfiguration(defaultJvmScriptingHostConfiguration) {
109118
configurationDependencies(JvmDependency(fileClassPath))
110119
}
111-
scriptDefinitions = scriptTemplates.map { ScriptDefinition.FromLegacyTemplate(scriptHostConfig, scriptClassLoader.loadClass(it).kotlin) }
120+
// TODO: KotlinScriptDefinition will soon be deprecated, use
121+
// ScriptDefinition.compilationConfiguration and its defaultImports instead
122+
// of KotlinScriptDefinition.dependencyResolver
123+
// TODO: Use ScriptDefinition.FromLegacyTemplate directly if possible
124+
scriptDefinitions = scriptTemplates.map { ScriptDefinition.FromLegacyTemplate(scriptHostConfig, scriptClassLoader.loadClass(it).kotlin, fileClassPath) }
125+
// scriptDefinitions = scriptTemplates.map { ScriptDefinition.FromLegacy(scriptHostConfig, object : KotlinScriptDefinitionFromAnnotatedTemplate(
126+
// scriptClassLoader.loadClass(it).kotlin,
127+
// scriptHostConfig[ScriptingHostConfiguration.getEnvironment]?.invoke()
128+
// ) {
129+
// override val dependencyResolver: DependenciesResolver = object : DependenciesResolver {
130+
// override fun resolve(scriptContents: ScriptContents, environment: Environment) = ResolveResult.Success(ScriptDependencies(
131+
// imports = listOf("org.gradle.kotlin.api.*")
132+
// ))
133+
// }
134+
// }) }
112135
} catch (e: Exception) {
113136
LOG.error("Error while loading script template classes")
114137
LOG.printStackTrace(e)

0 commit comments

Comments
 (0)