Skip to content

Commit 492958d

Browse files
committed
Handle indexing exception, e.g. during project startup (#164)
1 parent 12a4b64 commit 492958d

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

src/main/com/intellij/lang/jsgraphql/ide/project/javascript/GraphQLJavascriptInjectionSearchHelper.java

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.intellij.lang.injection.InjectedLanguageManager;
1111
import com.intellij.lang.jsgraphql.ide.injection.javascript.GraphQLLanguageInjectionUtil;
1212
import com.intellij.lang.jsgraphql.ide.project.GraphQLInjectionSearchHelper;
13+
import com.intellij.openapi.project.IndexNotReadyException;
1314
import com.intellij.psi.PsiElement;
1415
import com.intellij.psi.PsiFile;
1516
import 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

Comments
 (0)