in src/main/com/intellij/lang/jsgraphql/ide/highlighting/query/GraphQLQueryContextHighlightVisitor.java [362:401]
private static void findFragmentsInsideOperation(PsiElement operationOrFragment, Map<String, GraphQLFragmentDefinition> foundFragments,
Function<GraphQLFragmentDefinition, Boolean> findMore) {
operationOrFragment.accept(new PsiRecursiveElementVisitor() {
private boolean done = false;
@Override
public void visitElement(@NotNull PsiElement element) {
if (done) {
return;
}
if (element instanceof GraphQLFragmentSpread) {
PsiReference reference = ((GraphQLFragmentSpread)element).getNameIdentifier().getReference();
if (reference != null) {
PsiElement fragmentDefinitionRef = reference.resolve();
if (fragmentDefinitionRef instanceof GraphQLIdentifier) {
if (fragmentDefinitionRef.getOriginalElement() instanceof GraphQLIdentifier) {
fragmentDefinitionRef = fragmentDefinitionRef.getOriginalElement();
}
GraphQLFragmentDefinition fragment =
PsiTreeUtil.getParentOfType(fragmentDefinitionRef, GraphQLFragmentDefinition.class);
String fragmentKey = getFragmentKey(fragment);
if (fragment != null && !foundFragments.containsKey(fragmentKey)) {
foundFragments.put(fragmentKey, fragment);
if (findMore != null && !findMore.apply(fragment)) {
// we're done
done = true;
return;
}
// also look for fragments inside this fragment
findFragmentsInsideOperation(fragment, foundFragments, findMore);
}
}
}
}
super.visitElement(element);
}
});
}