[kotlin] K1: use dependenciesFromCurrentContext when loading ScriptDefinitionForExtensionAndIdeConsoleRoots

#KTIJ-32309 Fixed


KT-MR-20314

GitOrigin-RevId: 6a7abcd150151dd0b5e79d2030bf3accf1f39503
This commit is contained in:
Vlad Koshkin
2025-02-21 14:01:05 +01:00
committed by intellij-monorepo-bot
parent b6c6ce36fb
commit 48c6399025

View File

@@ -5,14 +5,12 @@ package org.jetbrains.kotlin.jsr223
import com.intellij.ide.extensionResources.ExtensionsRootType
import com.intellij.ide.scratch.RootType
import com.intellij.ide.script.IdeConsoleRootType
import com.intellij.openapi.application.PathManager
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsSource
import org.jetbrains.kotlin.scripting.resolve.VirtualFileScriptSource
import kotlin.io.path.nameWithoutExtension
import kotlin.script.experimental.api.*
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
import kotlin.script.experimental.jvm.dependenciesFromClassContext
import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
import kotlin.script.experimental.jvm.jvm
import kotlin.script.templates.standard.ScriptTemplateWithBindings
@@ -42,15 +40,10 @@ private object ScriptCompilationConfigurationForExtensionAndIdeConsoleRoots : Sc
baseClass(KotlinType(ScriptTemplateWithBindings::class))
displayName(SCRIPT_DEFINITION_NAME)
jvm {
val kotlincLibraryName =
PathManager.getJarForClass(KotlinVersion::class.java)?.nameWithoutExtension
?: error("unable to locate Kotlin standard library")
// This approach works, but could be quite expensive, since it forces indexing of the whole IDEA classpath
// more economical approach would be to list names (without versions and .jar extension) of all jars
// required for the scripts after the kotlin stdlib/script-runtime, and set wholeClasspath to false
dependenciesFromClassContext(
ScriptCompilationConfigurationForExtensionAndIdeConsoleRoots::class,
kotlincLibraryName,
dependenciesFromCurrentContext(
wholeClasspath = true
)
// todo commented out until we figure out why it is needed and how to implement it safely