Why I get IndexNotReadyException ?

Answered

I have read
https://github.com/JetBrains/intellij-community/blob/master/platform/core-api/src/com/intellij/openapi/project/IndexNotReadyException.java
documentation,I have tried DumbService#smartInvokeLater and DumbService#runReadActionInSmartMode,It does not work for me.

I am extend from FileBasedIndexExtension class,override the map method,inside map method ,i want to get method annotation.

My code looks like below:



PsiJavaFile psiFile = (PsiJavaFile) fileContent.getPsiFile();
PsiMethod[] methods = psiFile.getClasses()[0].getMethods();
for (PsiMethod method : methods) {
ann = method.getAnnotation(annName); // <- This line throw IndexNotReadyException
}

 
0
5 comments

You may not access anything outside of current file being indexed in your FileBasedIndexExtension. See https://www.jetbrains.org/intellij/sdk/docs/basics/indexing_and_psi_stubs/file_based_indexes.html

0

fileContent is not outside of current file ,fileContent is map function parameter.

 

public Map<String, ResourceElement> map(@NotNull FileContent fileContent) {
PsiJavaFile psiFile = (PsiJavaFile) fileContent.getPsiFile();
PsiMethod[] methods = psiFile.getClasses()[0].getMethods();
for (PsiMethod method : methods) {
ann = method.getAnnotation(annName); // <- This line throw IndexNotReadyException
}
}
0

Please post full stacktrace

0
com.intellij.openapi.project.IndexNotReadyException: Please change caller according to com.intellij.openapi.project.IndexNotReadyException documentation
at com.intellij.openapi.project.IndexNotReadyException.create(IndexNotReadyException.java:81)
at com.intellij.util.indexing.FileBasedIndexImpl.handleDumbMode(FileBasedIndexImpl.java:715)
at com.intellij.util.indexing.FileBasedIndexImpl.ensureUpToDate(FileBasedIndexImpl.java:665)
at com.intellij.psi.stubs.StubIndexImpl.getContainingIds(StubIndexImpl.java:540)
at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:396)
at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:107)
at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:95)
at com.intellij.psi.impl.java.stubs.index.JavaFullClassNameIndex.get(JavaFullClassNameIndex.java:30)
at com.intellij.psi.impl.file.impl.JavaFileManagerImpl.doFindClasses(JavaFileManagerImpl.java:87)
at com.intellij.psi.impl.file.impl.JavaFileManagerImpl.findClass(JavaFileManagerImpl.java:122)
at com.intellij.psi.impl.PsiElementFinderImpl.findClass(PsiElementFinderImpl.java:44)
at com.intellij.psi.impl.JavaPsiFacadeImpl.doFindClass(JavaPsiFacadeImpl.java:107)
at com.intellij.psi.impl.JavaPsiFacadeImpl.findClass(JavaPsiFacadeImpl.java:84)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.resolve(PsiJavaCodeReferenceElementImpl.java:449)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.resolve(PsiJavaCodeReferenceElementImpl.java:531)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.access$100(PsiJavaCodeReferenceElementImpl.java:44)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl$OurGenericsResolver.resolve(PsiJavaCodeReferenceElementImpl.java:382)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl$OurGenericsResolver.resolve(PsiJavaCodeReferenceElementImpl.java:375)
at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$resolveWithCaching$2(ResolveCache.java:182)
at com.intellij.openapi.util.Computable.get(Computable.java:17)
at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$loggingResolver$3(ResolveCache.java:225)
at com.intellij.openapi.util.RecursionManager$1.doPreventingRecursion(RecursionManager.java:117)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:75)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolve(ResolveCache.java:202)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:182)
at com.intellij.psi.impl.PsiImplUtil.multiResolveImpl(PsiImplUtil.java:786)
at com.intellij.psi.impl.PsiImplUtil.multiResolveImpl(PsiImplUtil.java:778)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.multiResolve(PsiJavaCodeReferenceElementImpl.java:432)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.advancedResolve(PsiJavaCodeReferenceElementImpl.java:426)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.resolve(PsiJavaCodeReferenceElementImpl.java:359)
at com.intellij.psi.impl.source.PsiImportStatementBaseImpl.resolve(PsiImportStatementBaseImpl.java:64)
at com.intellij.psi.impl.source.PsiJavaFileBaseImpl.processOnDemandTypeImports(PsiJavaFileBaseImpl.java:388)
at com.intellij.psi.impl.source.PsiJavaFileBaseImpl.processOnDemandPackages(PsiJavaFileBaseImpl.java:356)
at com.intellij.psi.impl.source.PsiJavaFileBaseImpl.processDeclarations(PsiJavaFileBaseImpl.java:284)
at com.intellij.psi.scope.util.PsiScopesUtil.treeWalkUp(PsiScopesUtil.java:70)
at com.intellij.psi.scope.util.PsiScopesUtil.treeWalkUp(PsiScopesUtil.java:52)
at com.intellij.psi.scope.util.PsiScopesUtil.resolveAndWalk(PsiScopesUtil.java:220)
at com.intellij.psi.scope.util.PsiScopesUtil.resolveAndWalk(PsiScopesUtil.java:153)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.resolve(PsiJavaCodeReferenceElementImpl.java:498)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.access$100(PsiJavaCodeReferenceElementImpl.java:44)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl$OurGenericsResolver.resolve(PsiJavaCodeReferenceElementImpl.java:382)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl$OurGenericsResolver.resolve(PsiJavaCodeReferenceElementImpl.java:375)
at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$resolveWithCaching$2(ResolveCache.java:182)
at com.intellij.openapi.util.Computable.get(Computable.java:17)
at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$loggingResolver$3(ResolveCache.java:225)
at com.intellij.openapi.util.RecursionManager$1.doPreventingRecursion(RecursionManager.java:117)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:75)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolve(ResolveCache.java:202)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:182)
at com.intellij.psi.impl.PsiImplUtil.multiResolveImpl(PsiImplUtil.java:786)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.getCanonicalText(PsiJavaCodeReferenceElementImpl.java:297)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.getCanonicalText(PsiJavaCodeReferenceElementImpl.java:281)
at com.intellij.psi.impl.source.tree.java.PsiAnnotationImpl.getQualifiedName(PsiAnnotationImpl.java:88)
at com.intellij.psi.impl.PsiImplUtil.findAnnotation(PsiImplUtil.java:287)
at com.intellij.psi.impl.source.PsiModifierListImpl.findAnnotation(PsiModifierListImpl.java:292)
at com.intellij.psi.PsiJvmConversionHelper.getListAnnotation(PsiJvmConversionHelper.java:53)
at com.intellij.psi.PsiModifierListOwner.getAnnotation(PsiModifierListOwner.java:41)
at com.intellij.psi.PsiJvmModifiersOwner.getAnnotation(PsiJvmModifiersOwner.java:27)
at cn.kingwrcy.jhelper.service.RestfulFileIndex$1.map(RestfulFileIndex.java:50)
at cn.kingwrcy.jhelper.service.RestfulFileIndex$1.map(RestfulFileIndex.java:37)
at com.intellij.util.indexing.impl.MapReduceIndex.mapByIndexer(MapReduceIndex.java:317)
at com.intellij.util.indexing.impl.MapReduceIndex.mapInput(MapReduceIndex.java:309)
at com.intellij.util.indexing.VfsAwareMapReduceIndex.mapInput(VfsAwareMapReduceIndex.java:150)
at com.intellij.util.indexing.VfsAwareMapReduceIndex.mapInput(VfsAwareMapReduceIndex.java:40)
at com.intellij.util.indexing.impl.MapReduceIndex.calculateUpdateData(MapReduceIndex.java:267)
at com.intellij.util.indexing.impl.MapReduceIndex.update(MapReduceIndex.java:239)
at com.intellij.util.indexing.FileBasedIndexImpl.updateSingleIndex(FileBasedIndexImpl.java:1253)
at com.intellij.util.indexing.FileBasedIndexImpl.lambda$doIndexFileContent$20(FileBasedIndexImpl.java:1181)
at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.freezeFileTypeTemporarilyIn(FileTypeManagerImpl.java:722)
at com.intellij.util.indexing.FileBasedIndexImpl.doIndexFileContent(FileBasedIndexImpl.java:1161)
at com.intellij.util.indexing.FileBasedIndexImpl.indexFileContent(FileBasedIndexImpl.java:1147)
at com.intellij.util.indexing.UnindexedFilesUpdater.lambda$indexFiles$2(UnindexedFilesUpdater.java:130)
at com.intellij.openapi.project.CacheUpdateRunner.lambda$null$1(CacheUpdateRunner.java:208)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1106)
at com.intellij.openapi.project.CacheUpdateRunner.lambda$null$2(CacheUpdateRunner.java:224)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:166)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:627)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:572)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:61)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:153)
at com.intellij.openapi.project.CacheUpdateRunner.lambda$createRunnable$3(CacheUpdateRunner.java:221)
at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:210)
at com.intellij.util.ConcurrencyUtil.lambda$underThreadNameRunnable$3(ConcurrencyUtil.java:198)
at com.intellij.util.RunnableCallable.call(RunnableCallable.java:20)
at com.intellij.util.RunnableCallable.call(RunnableCallable.java:11)
at com.intellij.openapi.application.impl.ApplicationImpl$1.call(ApplicationImpl.java:255)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:832)
0

As can be seen in stacktrace, call to PsiMethod#getAnnotation() will need access to JavaFullClassNameIndex which is forbidden at this point.

0

Please sign in to leave a comment.