1010import com .intellij .lang .injection .InjectedLanguageManager ;
1111import com .intellij .lang .jsgraphql .ide .injection .javascript .GraphQLLanguageInjectionUtil ;
1212import com .intellij .lang .jsgraphql .ide .project .GraphQLInjectionSearchHelper ;
13+ import com .intellij .openapi .project .IndexNotReadyException ;
1314import com .intellij .psi .PsiElement ;
1415import com .intellij .psi .PsiFile ;
1516import com .intellij .psi .PsiManager ;
@@ -35,27 +36,30 @@ public boolean isJSGraphQLLanguageInjectionTarget(PsiElement host) {
3536 * @param consumer a consumer that will be invoked for each injected GraphQL PsiFile
3637 */
3738 public void processInjectedGraphQLPsiFiles (PsiElement scopedElement , GlobalSearchScope schemaScope , Consumer <PsiFile > consumer ) {
38- final PsiManager psiManager = PsiManager .getInstance (scopedElement .getProject ());
39- final InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager .getInstance (scopedElement .getProject ());
40- FileBasedIndex .getInstance ().getFilesWithKey (GraphQLInjectionIndex .NAME , Collections .singleton (GraphQLInjectionIndex .DATA_KEY ), virtualFile -> {
41- final PsiFile fileWithInjection = psiManager .findFile (virtualFile );
42- if (fileWithInjection != null ) {
43- fileWithInjection .accept (new PsiRecursiveElementVisitor () {
44- @ Override
45- public void visitElement (PsiElement element ) {
46- if (GraphQLLanguageInjectionUtil .isJSGraphQLLanguageInjectionTarget (element )) {
47- injectedLanguageManager .enumerate (element , (injectedPsi , places ) -> {
48- consumer .accept (injectedPsi );
49- });
50- } else {
51- // visit deeper until injection found
52- super .visitElement (element );
39+ try {
40+ final PsiManager psiManager = PsiManager .getInstance (scopedElement .getProject ());
41+ final InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager .getInstance (scopedElement .getProject ());
42+ FileBasedIndex .getInstance ().getFilesWithKey (GraphQLInjectionIndex .NAME , Collections .singleton (GraphQLInjectionIndex .DATA_KEY ), virtualFile -> {
43+ final PsiFile fileWithInjection = psiManager .findFile (virtualFile );
44+ if (fileWithInjection != null ) {
45+ fileWithInjection .accept (new PsiRecursiveElementVisitor () {
46+ @ Override
47+ public void visitElement (PsiElement element ) {
48+ if (GraphQLLanguageInjectionUtil .isJSGraphQLLanguageInjectionTarget (element )) {
49+ injectedLanguageManager .enumerate (element , (injectedPsi , places ) -> {
50+ consumer .accept (injectedPsi );
51+ });
52+ } else {
53+ // visit deeper until injection found
54+ super .visitElement (element );
55+ }
5356 }
54- }
55- });
56- }
57- return true ;
58- }, schemaScope );
59-
57+ });
58+ }
59+ return true ;
60+ }, schemaScope );
61+ } catch (IndexNotReadyException e ) {
62+ // can't search yet (e.g. during project startup)
63+ }
6064 }
6165}
0 commit comments