WEB-74742 TypeScript: run isProjectContext check in read action.

(cherry picked from commit 753194566a4febfcb3f03cfb2bb6b3fb684c1a3d)

IJ-CR-193044

GitOrigin-RevId: 09e57cdeeeb5ec5770f46d5b7ceb6d453cab93f1
This commit is contained in:
Piotr Tomiak
2026-02-25 12:00:36 +00:00
committed by intellij-monorepo-bot
parent b5aa6a9dee
commit 9481cefbd9
2 changed files with 6 additions and 0 deletions
@@ -11,6 +11,7 @@ import com.intellij.polySymbols.context.impl.PolyContextImpl
import com.intellij.polySymbols.context.impl.PolyContextProviderExtensionCollector
import com.intellij.polySymbols.context.impl.findPolyContext
import com.intellij.psi.PsiElement
import com.intellij.util.concurrency.annotations.RequiresReadLock
import org.jetbrains.annotations.TestOnly
interface PolyContext {
@@ -41,10 +42,12 @@ interface PolyContext {
val PKG_MANAGER_SYMFONY_BUNDLES: String = "symfony-bundles"
@JvmStatic
@RequiresReadLock
fun get(kind: PolyContextKind, location: VirtualFile, project: Project): PolyContextName? =
findPolyContext(kind, location, project)
@JvmStatic
@RequiresReadLock
fun get(kind: PolyContextKind, location: PsiElement): PolyContextName? =
findPolyContext(kind, location)
@@ -48,6 +48,7 @@ import com.intellij.psi.PsiFile
import com.intellij.psi.util.CachedValue
import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager
import com.intellij.util.concurrency.ThreadingAssertions
import com.intellij.util.concurrency.annotations.RequiresReadLock
import com.intellij.util.containers.ContainerUtil
import com.intellij.util.lazyUnsafe
@@ -90,6 +91,7 @@ private fun findPolyContext(kind: PolyContextKind, locationInfo: LocationInfo):
?: withContextChangeCheck(kind, locationInfo)
private fun <T> forPsiLocation(location: PsiElement, action: (LocationInfo) -> T): T? {
ThreadingAssertions.assertReadAccess()
if (!location.isValid) return null
val project = location.project
val psiFile = location.takeIf { it !is PsiDirectory }
@@ -111,6 +113,7 @@ private fun <T> forVfsLocation(
psiFile: PsiFile? = null,
action: (LocationInfo) -> T,
): T? {
ThreadingAssertions.assertReadAccess()
ProgressManager.checkCanceled()
if (project.isDisposed) return null
val virtualFile = findOriginalFile(location)?.takeIf { it.isInLocalFileSystem }