Index access error despite running in smart mode callback
Answered
I'm running some code inside a smart mode callback.
DumbService.getInstance(project).runWhenSmart {
...
}
Yet I am still getting the following error.
Is this because by the time my code runs something else has started another index? How can you ever tell if an operation is safe?
The method that errors is getting the superclass for a KtClass
java.lang.Throwable: It's prohibited to access index during event dispatching
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:145)
at com.intellij.openapi.project.NoAccessDuringPsiEvents.checkCallContext(NoAccessDuringPsiEvents.java:39)
at com.intellij.util.indexing.FileBasedIndexImpl.ensureUpToDate(FileBasedIndexImpl.java:729)
at com.intellij.util.indexing.FileBasedIndexImpl.ensureUpToDate(FileBasedIndexImpl.java:709)
at com.intellij.psi.stubs.StubIndexImpl.doProcessStubs(StubIndexImpl.java:305)
at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:281)
at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:121)
at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:109)
at org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex.get(KotlinFullClassNameIndex.java:51)
at org.jetbrains.kotlin.idea.stubindex.resolve.StubBasedPackageMemberDeclarationProvider$getClassOrObjectDeclarations$1.invoke(StubBasedPackageMemberDeclarationProvider.kt:66)
at org.jetbrains.kotlin.idea.stubindex.resolve.StubBasedPackageMemberDeclarationProvider$getClassOrObjectDeclarations$1.invoke(StubBasedPackageMemberDeclarationProvider.kt:26)
at org.jetbrains.kotlin.idea.util.application.ApplicationUtilsKt$sam$com_intellij_openapi_util_Computable$0.compute(ApplicationUtils.kt)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:956)
at org.jetbrains.kotlin.idea.util.application.ApplicationUtilsKt.runReadAction(ApplicationUtils.kt:28)
at org.jetbrains.kotlin.idea.stubindex.resolve.StubBasedPackageMemberDeclarationProvider.getClassOrObjectDeclarations(StubBasedPackageMemberDeclarationProvider.kt:65)
at org.jetbrains.kotlin.resolve.lazy.descriptors.AbstractLazyMemberScope.doGetClasses(AbstractLazyMemberScope.kt:64)
at org.jetbrains.kotlin.resolve.lazy.descriptors.AbstractLazyMemberScope.access$doGetClasses(AbstractLazyMemberScope.kt:36)
at org.jetbrains.kotlin.resolve.lazy.descriptors.AbstractLazyMemberScope$classDescriptors$1.invoke(AbstractLazyMemberScope.kt:47)
at org.jetbrains.kotlin.resolve.lazy.descriptors.AbstractLazyMemberScope$classDescriptors$1.invoke(AbstractLazyMemberScope.kt:36)
at org.jetbrains.kotlin.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke(LockBasedStorageManager.java:512)
at org.jetbrains.kotlin.storage.LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull.invoke(LockBasedStorageManager.java:587)
at org.jetbrains.kotlin.resolve.lazy.descriptors.AbstractLazyMemberScope.getContributedClassifier(AbstractLazyMemberScope.kt:75)
at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver.findClassDescriptorIfAny(LazyDeclarationResolver.kt:77)
at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver.getClassDescriptorIfAny(LazyDeclarationResolver.kt:59)
at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver$resolveToDescriptor$1.visitClass(LazyDeclarationResolver.kt:100)
at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver$resolveToDescriptor$1.visitClass(LazyDeclarationResolver.kt:94)
at org.jetbrains.kotlin.psi.KtClass.accept(KtClass.kt:20)
at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver.resolveToDescriptor(LazyDeclarationResolver.kt:94)
at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver.resolveToDescriptor(LazyDeclarationResolver.kt:91)
at org.jetbrains.kotlin.resolve.lazy.ResolveSession.resolveToDescriptor(ResolveSession.java:331)
at org.jetbrains.kotlin.idea.project.ResolveElementCache.delegationSpecifierAdditionalResolve(ResolveElementCache.kt:509)
at org.jetbrains.kotlin.idea.project.ResolveElementCache.performElementAdditionalResolve(ResolveElementCache.kt:354)
at org.jetbrains.kotlin.idea.project.ResolveElementCache.getElementsAdditionalResolve(ResolveElementCache.kt:145)
at org.jetbrains.kotlin.idea.project.ResolveElementCache.getElementsAdditionalResolve(ResolveElementCache.kt:152)
at org.jetbrains.kotlin.idea.project.ResolveElementCache.resolveToElements(ResolveElementCache.kt:213)
at org.jetbrains.kotlin.idea.caches.resolve.ModuleResolutionFacadeImpl.analyze(ModuleResolutionFacadeImpl.kt:61)
at org.jetbrains.kotlin.idea.caches.resolve.ModuleResolutionFacadeImpl.analyze(ModuleResolutionFacadeImpl.kt:53)
at org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacadeWithDebugInfo.analyze(ResolutionFacadeWithDebugInfo.kt:43)
at org.jetbrains.kotlin.idea.caches.resolve.ExtendedResolutionApiKt.analyze(extendedResolutionApi.kt:87)
at org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils.analyze(resolutionApi.kt:121)
at org.jetbrains.kotlin.idea.references.AbstractKtReference$Companion$KotlinReferenceResolver.resolveToPsiElements(KtReference.kt:241)
at org.jetbrains.kotlin.idea.references.AbstractKtReference$Companion$KotlinReferenceResolver.resolve(KtReference.kt:285)
at org.jetbrains.kotlin.idea.references.AbstractKtReference$Companion$KotlinReferenceResolver.resolve(KtReference.kt:234)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolve(ResolveCache.java:150)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:180)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:172)
at org.jetbrains.kotlin.idea.references.AbstractKtReference.multiResolve(KtReference.kt:68)
at com.intellij.psi.PsiPolyVariantReferenceBase.resolve(PsiPolyVariantReferenceBase.java:47)
at io.kotest.plugin.intellij.psi.ClassesKt.getSuperClass(classes.kt:61)
at io.kotest.plugin.intellij.psi.SpecsKt.isSubclassOfSpec(specs.kt:51)
at io.kotest.plugin.intellij.psi.SpecsKt.specs(specs.kt:34)
at io.kotest.plugin.intellij.toolwindow.TestExplorerWindow$refreshContent$1.run(TestExplorerWindow.kt:115)
Please sign in to leave a comment.
Stephen,
Before running your code, you may check if it's not inside the event processing with:
That works great thank you.