diff --git a/platform/polySymbols/src/com/intellij/polySymbols/context/PolyContext.kt b/platform/polySymbols/src/com/intellij/polySymbols/context/PolyContext.kt index 38eef11aaaf1..a04cefa5d0d8 100644 --- a/platform/polySymbols/src/com/intellij/polySymbols/context/PolyContext.kt +++ b/platform/polySymbols/src/com/intellij/polySymbols/context/PolyContext.kt @@ -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) diff --git a/platform/polySymbols/src/com/intellij/polySymbols/context/impl/PolyContextDiscovery.kt b/platform/polySymbols/src/com/intellij/polySymbols/context/impl/PolyContextDiscovery.kt index 48dbb5a2b48c..501907b17b24 100644 --- a/platform/polySymbols/src/com/intellij/polySymbols/context/impl/PolyContextDiscovery.kt +++ b/platform/polySymbols/src/com/intellij/polySymbols/context/impl/PolyContextDiscovery.kt @@ -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 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 forVfsLocation( psiFile: PsiFile? = null, action: (LocationInfo) -> T, ): T? { + ThreadingAssertions.assertReadAccess() ProgressManager.checkCanceled() if (project.isDisposed) return null val virtualFile = findOriginalFile(location)?.takeIf { it.isInLocalFileSystem }