From f24b68045dc75aef46e182cf6dbe02671841e272 Mon Sep 17 00:00:00 2001 From: Vlad Koshkin Date: Thu, 26 Jun 2025 12:54:47 +0200 Subject: [PATCH] [kotlin] K2: refactor script import management #KTIJ-34699 GitOrigin-RevId: 6242d7d66fac70d2db3b12e1b146873ff6bcbfa2 --- .../MainKtsScriptConfigurationProvider.kt | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/plugins/kotlin/base/scripting.k2/src/org/jetbrains/kotlin/idea/core/script/k2/configurations/MainKtsScriptConfigurationProvider.kt b/plugins/kotlin/base/scripting.k2/src/org/jetbrains/kotlin/idea/core/script/k2/configurations/MainKtsScriptConfigurationProvider.kt index 848f59175686..325617bcdbfc 100644 --- a/plugins/kotlin/base/scripting.k2/src/org/jetbrains/kotlin/idea/core/script/k2/configurations/MainKtsScriptConfigurationProvider.kt +++ b/plugins/kotlin/base/scripting.k2/src/org/jetbrains/kotlin/idea/core/script/k2/configurations/MainKtsScriptConfigurationProvider.kt @@ -14,7 +14,7 @@ import com.intellij.platform.backend.workspace.toVirtualFileUrl import com.intellij.platform.backend.workspace.workspaceModel import com.intellij.platform.ide.progress.withBackgroundProgress import com.intellij.platform.util.progress.ProgressReporter -import com.intellij.platform.util.progress.reportProgress +import com.intellij.platform.util.progress.reportProgressScope import com.intellij.platform.workspace.jps.entities.* import com.intellij.platform.workspace.storage.MutableEntityStorage import com.intellij.platform.workspace.storage.url.VirtualFileUrl @@ -40,10 +40,10 @@ import kotlin.script.experimental.jvm.jvm class MainKtsScriptConfigurationProvider(val project: Project, val coroutineScope: CoroutineScope) : ScriptRefinedConfigurationResolver, ScriptWorkspaceModelManager { private val data = ConcurrentHashMap() - private val importedScripts = TreeMultimap.create(COMPARATOR, COMPARATOR) - private val importedScriptsTraverser = Traverser.forTree { importedScripts.get(it) } + private val visitedScripts = TreeMultimap.create(COMPARATOR, COMPARATOR) + private val visitedScriptsTraverser = Traverser.forTree { visitedScripts.get(it) } - fun getImportedScripts(mainKts: VirtualFile): List = importedScriptsTraverser.breadthFirst(mainKts) - mainKts + fun getImportedScripts(mainKts: VirtualFile): List = visitedScriptsTraverser.breadthFirst(mainKts) - mainKts var reporter: ProgressReporter? = null private set @@ -51,15 +51,16 @@ class MainKtsScriptConfigurationProvider(val project: Project, val coroutineScop override fun get(virtualFile: VirtualFile): ScriptConfigurationWithSdk? = data[virtualFile] override fun remove(virtualFile: VirtualFile) { - importedScripts.removeAll(virtualFile) + visitedScripts.removeAll(virtualFile) data.remove(virtualFile) } override suspend fun create(virtualFile: VirtualFile, definition: ScriptDefinition): ScriptConfigurationWithSdk? { val mainKtsConfiguration = resolveMainKtsConfiguration(virtualFile, definition) - if (mainKtsConfiguration.importedScripts.isNotEmpty()) { - importedScripts.putAll(virtualFile, mainKtsConfiguration.importedScripts) - resolveDeeply(mainKtsConfiguration.importedScripts) + val scriptsToResolve = mainKtsConfiguration.importedScripts - visitedScripts.keys() + if (scriptsToResolve.isNotEmpty()) { + visitedScripts.putAll(virtualFile, scriptsToResolve) + resolveDeeply(scriptsToResolve) } data[virtualFile] = mainKtsConfiguration @@ -88,7 +89,7 @@ class MainKtsScriptConfigurationProvider(val project: Project, val coroutineScop } val result = withBackgroundProgress(project, title = KotlinBaseScriptingBundle.message("progress.title.dependency.resolution", mainKts.name)) { - reportProgress { + reportProgressScope { try { reporter = it smartReadAction(project) {