From fd613082f980af784ef253c5c8d1abc7c6476d48 Mon Sep 17 00:00:00 2001 From: Andrei Klunnyi Date: Thu, 3 Aug 2023 15:52:29 +0200 Subject: [PATCH] KTIJ-26466 IDE frozen after project reopening This commit effectively reverts changes made in the scope of the following commits: ddf6e53bacef1, 5593d69defddb, d1d9f7934f283. 51120fde introduced the concept of a deferred script definition. For cases covered with the commits above `ScriptClassRootsCache.EMPTY` is the equivalent of a DeferredConfiguration. So the synchronization is no longer needed. ^KTIJ-26466 fixed GitOrigin-RevId: 4566f50ccd96812a257a9719ab9fe735a61b296e --- .../script/ucache/ScriptClassRootsUpdater.kt | 29 +------------------ .../resources/META-INF/scripting-base.xml | 7 ----- 2 files changed, 1 insertion(+), 35 deletions(-) diff --git a/plugins/kotlin/base/scripting/src/org/jetbrains/kotlin/idea/core/script/ucache/ScriptClassRootsUpdater.kt b/plugins/kotlin/base/scripting/src/org/jetbrains/kotlin/idea/core/script/ucache/ScriptClassRootsUpdater.kt index 0bce039e2560..9492123f5b76 100644 --- a/plugins/kotlin/base/scripting/src/org/jetbrains/kotlin/idea/core/script/ucache/ScriptClassRootsUpdater.kt +++ b/plugins/kotlin/base/scripting/src/org/jetbrains/kotlin/idea/core/script/ucache/ScriptClassRootsUpdater.kt @@ -13,7 +13,6 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.project.ProjectManager import com.intellij.openapi.project.ProjectManagerListener import com.intellij.openapi.projectRoots.Sdk -import com.intellij.openapi.util.registry.Registry import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.platform.backend.workspace.WorkspaceModel @@ -28,7 +27,6 @@ import org.jetbrains.kotlin.idea.base.util.CheckCanceledLock import org.jetbrains.kotlin.idea.core.KotlinPluginDisposable import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker import org.jetbrains.kotlin.idea.core.script.configuration.CompositeScriptConfigurationManager -import org.jetbrains.kotlin.idea.core.script.scriptingWarnLog import org.jetbrains.kotlin.idea.util.FirPluginOracleService import org.jetbrains.kotlin.idea.util.application.isUnitTestMode import org.jetbrains.kotlin.psi.KtFile @@ -36,11 +34,8 @@ import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrap import org.jetbrains.kotlin.utils.addToStdlib.ifFalse import org.jetbrains.kotlin.utils.addToStdlib.ifTrue import java.nio.file.Paths -import java.util.concurrent.CountDownLatch -import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicReference -import kotlin.system.measureTimeMillis /** * Holder for [ScriptClassRootsCache]. @@ -56,8 +51,6 @@ import kotlin.system.measureTimeMillis * Also analysis cache will be cleared and changed opened script files will be reanalyzed. */ -private const val INIT_WAIT_ATTEMPTS_REGISTRY_KEY = "kotlin.scripting.wait-init.attempts.num" - abstract class ScriptClassRootsUpdater( val project: Project, val manager: CompositeScriptConfigurationManager, @@ -84,8 +77,6 @@ abstract class ScriptClassRootsUpdater( */ private val cache: AtomicReference = AtomicReference(ScriptClassRootsCache.EMPTY) - private val cacheNotEmptyLatch = CountDownLatch(1) - init { ProjectManager.getInstance().addProjectManagerListener(project, object : ProjectManagerListener { @@ -100,24 +91,7 @@ abstract class ScriptClassRootsUpdater( } val classpathRoots: ScriptClassRootsCache - get() { - val timeoutMs = 500L - var attemptsLeft = Registry.intValue(INIT_WAIT_ATTEMPTS_REGISTRY_KEY, 10) - - val ms = measureTimeMillis { - while (!cacheNotEmptyLatch.await(timeoutMs, TimeUnit.MILLISECONDS) && attemptsLeft > 0) { - attemptsLeft-- - ProgressManager.checkCanceled() - } - } - - if (attemptsLeft == 0) { - scriptingWarnLog("Couldn't load initial script cache state after $ms ms. In most cases we can cope with it. " + - "For others see registry key kotlin.scripting.wait-init.attempts.num.") - } - - return cache.get() - } + get() = cache.get() /** * @param synchronous Used from legacy FS cache only, don't use @@ -340,7 +314,6 @@ abstract class ScriptClassRootsUpdater( val old = cache.get() val new = recreateRootsCache() if (cache.compareAndSet(old, new)) { - if (old == ScriptClassRootsCache.EMPTY) cacheNotEmptyLatch.countDown() afterUpdate() return new.diff(project, lastSeen) } diff --git a/plugins/kotlin/plugin/common/resources/META-INF/scripting-base.xml b/plugins/kotlin/plugin/common/resources/META-INF/scripting-base.xml index 4a44861000d0..655a2d482d69 100644 --- a/plugins/kotlin/plugin/common/resources/META-INF/scripting-base.xml +++ b/plugins/kotlin/plugin/common/resources/META-INF/scripting-base.xml @@ -112,13 +112,6 @@ defaultValue="false" restartRequired="true"/> - -