Skip to content

Commit d25bcd7

Browse files
committed
Update to Kotlin 1.3.50 and use new scripting API
Use the new Kotlin scripting API to register script templates.
1 parent 31997f6 commit d25bcd7

File tree

5 files changed

+29
-18
lines changed

5 files changed

+29
-18
lines changed

gradle.properties

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ projectVersion=0.3.0
22
teamCityUrl=https://teamcity.jetbrains.com
33
teamCityUsername=guest
44
teamCityPassword=guest
5-
kotlinVersion=1.3.40
6-
kotlinBuildType=Kotlin_1340_CompilerAllPlugins
7-
kotlinBuild=1.3.41-release-150
8-
kotlinPluginBuild=1.3.41-release-IJ2019.2-1
5+
kotlinVersion=1.3.50
6+
kotlinBuildType=Kotlin_1350_CompilerAllPlugins
7+
kotlinBuild=1.3.50-release-127
8+
kotlinPluginBuild=

scripts/update_kt_version.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ def is_plugin_artifact(art_name):
1818
def to_plugin_build(art_name):
1919
return art_name.lstrip("kotlin-plugin-").rstrip(".zip")
2020

21+
class Unnamed:
22+
def name(self):
23+
return ""
24+
2125
def main():
2226
props_file = "gradle.properties"
2327

@@ -39,7 +43,7 @@ def main():
3943
build = prompt_by("build", builds, TeamCityNode.number).follow()
4044

4145
artifacts = [art for art in build.follow("artifacts").findall("file") if is_plugin_artifact(art.name())]
42-
artifact = prompt_by("plugin build", artifacts, lambda art: to_plugin_build(art.name()))
46+
artifact = prompt_by("plugin build", artifacts, lambda art: to_plugin_build(art.name()), Unnamed())
4347

4448
changes = {
4549
"kotlinVersion": version.name(),

scripts/utils/cli.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def require_not_none(description, x):
2121
if x == None:
2222
sys.exit(description + " not present")
2323

24-
def prompt_by(what, nodes, describer):
24+
def prompt_by(what, nodes, describer, default=None):
2525
node_dict = {describer(node): node for node in nodes}
2626
sorted_described = sorted(node_dict.keys(), key=alphanum_sort_key)
2727

@@ -30,12 +30,12 @@ def prompt_by(what, nodes, describer):
3030
print()
3131

3232
last_entry = sorted_described[-1] if len(sorted_described) > 0 else None
33-
choice = input("Enter a " + what + " to choose [default: " + last_entry + "]: ").strip()
33+
choice = input(f"Enter a {what} to choose [default: {last_entry}]: ").strip()
3434
print()
3535

36-
if len(choice) == 0:
36+
if len(choice) == 0 and last_entry:
3737
return node_dict[last_entry]
3838
elif choice not in node_dict.keys():
39-
sys.exit("Invalid " + what + "!")
39+
return default
4040
else:
4141
return node_dict[choice]

server/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ dependencies {
4747
implementation 'org.jetbrains.kotlin:kotlin-compiler-embeddable'
4848
implementation 'org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable'
4949
implementation 'org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable'
50+
implementation 'org.jetbrains.kotlin:kotlin-scripting-jvm-host-embeddable'
5051
implementation 'org.jetbrains.kotlin:kotlin-reflect'
5152
implementation 'org.jetbrains:fernflower:1.0'
5253
implementation 'com.pinterest.ktlint:ktlint-core:0.34.2'
@@ -62,10 +63,9 @@ dependencies {
6263
testImplementation 'org.hamcrest:hamcrest-all:1.3'
6364
testImplementation 'junit:junit:4.11'
6465
testImplementation 'org.openjdk.jmh:jmh-core:1.20'
65-
testImplementation 'org.jetbrains.kotlin:kotlin-scripting-jvm-host-embeddable'
6666

6767
// See https://github.com/JetBrains/kotlin/blob/65b0a5f90328f4b9addd3a10c6f24f3037482276/libraries/examples/scripting/jvm-embeddable-host/build.gradle.kts#L8
68-
testCompileOnly 'org.jetbrains.kotlin:kotlin-scripting-jvm-host'
68+
compileOnly 'org.jetbrains.kotlin:kotlin-scripting-jvm-host'
6969

7070
annotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess:1.20'
7171
}

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

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,24 @@ import org.jetbrains.kotlin.container.ComponentProvider
2424
import org.jetbrains.kotlin.container.get
2525
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
2626
import org.jetbrains.kotlin.idea.KotlinLanguage
27-
import org.jetbrains.kotlin.load.java.JvmAbi
27+
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
2828
import org.jetbrains.kotlin.psi.*
2929
import org.jetbrains.kotlin.resolve.BindingContext
3030
import org.jetbrains.kotlin.resolve.BindingTraceContext
3131
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer
3232
import org.jetbrains.kotlin.resolve.TopDownAnalysisMode.TopLevelDeclarations
3333
import org.jetbrains.kotlin.resolve.calls.components.InferenceSession
3434
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
35+
import org.jetbrains.kotlin.resolve.extensions.ExtraImportsProviderExtension
3536
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
3637
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
3738
import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar
3839
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
3940
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider
4041
import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
4142
import org.jetbrains.kotlin.scripting.definitions.StandardScriptDefinition
42-
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
43+
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
44+
import org.jetbrains.kotlin.scripting.extensions.ScriptExtraImportsProviderExtension
4345
import org.jetbrains.kotlin.types.TypeUtils
4446
import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices
4547
import org.jetbrains.kotlin.util.KotlinFrontEndException
@@ -51,6 +53,10 @@ import java.nio.file.Paths
5153
import java.net.URLClassLoader
5254
import java.util.concurrent.locks.ReentrantLock
5355
import kotlin.concurrent.withLock
56+
import kotlin.script.experimental.host.ScriptingHostConfiguration
57+
import kotlin.script.experimental.host.configurationDependencies
58+
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
59+
import kotlin.script.experimental.jvm.JvmDependency
5460
import org.javacs.kt.util.KotlinLSException
5561
import org.javacs.kt.util.KotlinNullableNotNullManager
5662
import org.javacs.kt.util.LoggingMessageCollector
@@ -75,13 +81,13 @@ private class CompilationEnvironment(
7581
parentDisposable = disposable,
7682
// Not to be confused with the CompilerConfiguration in the language server Configuration
7783
configuration = KotlinCompilerConfiguration().apply {
78-
put(CommonConfigurationKeys.MODULE_NAME, JvmAbi.DEFAULT_MODULE_NAME)
84+
put(CommonConfigurationKeys.MODULE_NAME, JvmProtoBufUtil.DEFAULT_MODULE_NAME)
7985
put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, LoggingMessageCollector)
8086
add(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, ScriptingCompilerConfigurationComponentRegistrar())
8187
addJvmClasspathRoots(classPath.map { it.toFile() })
8288

8389
// Setup script templates
84-
var scriptDefinitions: List<KotlinScriptDefinition> = listOf(StandardScriptDefinition)
90+
var scriptDefinitions: List<ScriptDefinition> = listOf(ScriptDefinition.getDefault(defaultJvmScriptingHostConfiguration))
8591

8692
if (classPath.any { GRADLE_DSL_DEPENDENCY_PATTERN.matches(it.fileName.toString()) }) {
8793
LOG.info("Configuring Kotlin DSL script templates...")
@@ -95,9 +101,10 @@ private class CompilationEnvironment(
95101
try {
96102
// Load template classes
97103
val scriptClassLoader = URLClassLoader(classPath.map { it.toUri().toURL() }.toTypedArray())
98-
// TODO: Use org.jetbrains.kotlin.scripting.definitions.ScriptDefinition instead of
99-
// KotlinScriptDefinition since the latter will be deprecated soon.
100-
scriptDefinitions = scriptTemplates.map { KotlinScriptDefinition(scriptClassLoader.loadClass(it).kotlin) }
104+
val scriptHostConfig = ScriptingHostConfiguration(defaultJvmScriptingHostConfiguration) {
105+
configurationDependencies(JvmDependency(classPath.map { it.toFile() }))
106+
}
107+
scriptDefinitions = scriptTemplates.map { ScriptDefinition.FromTemplate(scriptHostConfig, scriptClassLoader.loadClass(it).kotlin) }
101108
} catch (e: Exception) {
102109
LOG.error("Error while loading script template classes")
103110
LOG.printStackTrace(e)

0 commit comments

Comments
 (0)