in src/main/com/intellij/lang/jsgraphql/ide/structureView/GraphQLStructureViewTreeElement.java [155:205]
private void addFileChildren(List<StructureViewTreeElement> children) {
for (PsiElement child : childrenBase.getChildren()) {
PsiElement nodeChildrenBase = child;
PsiElement nodeElement = child;
if (child instanceof GraphQLOperationDefinition) {
GraphQLIdentifier nameIdentifier = ((GraphQLOperationDefinition)child).getNameIdentifier();
if (nameIdentifier != null) {
nodeElement = nameIdentifier;
}
if (child instanceof GraphQLTypedOperationDefinition) {
nodeChildrenBase = ((GraphQLTypedOperationDefinition)child).getSelectionSet();
}
children.add(new GraphQLStructureViewTreeElement(nodeChildrenBase, nodeElement));
}
else if (child instanceof GraphQLFragmentDefinition) {
GraphQLIdentifier nameIdentifier = ((GraphQLFragmentDefinition)child).getNameIdentifier();
if (nameIdentifier != null) {
nodeElement = nameIdentifier;
}
nodeChildrenBase = ((GraphQLFragmentDefinition)child).getSelectionSet();
children.add(new GraphQLStructureViewTreeElement(nodeChildrenBase, nodeElement));
}
else if (child instanceof GraphQLTypeSystemDefinition) {
// the name of the node is type name def for schema definitions, and type nae for schema type extensions
GraphQLNamedElement schemaNodeElement =
PsiTreeUtil.findChildOfAnyType(child, GraphQLTypeNameDefinition.class, GraphQLTypeName.class);
// children of the type definitions/extensions are found in the follow element types
PsiElement schemaNodeChildrenBase = PsiTreeUtil.findChildOfAnyType(
child,
GraphQLFieldsDefinition.class,
GraphQLEnumValueDefinitions.class,
GraphQLInputObjectValueDefinitions.class,
GraphQLUnionMembership.class
);
if (schemaNodeElement != null && schemaNodeChildrenBase != null) {
final PsiElement nodeIdentifier =
schemaNodeElement.getNameIdentifier() != null ? schemaNodeElement.getNameIdentifier() : schemaNodeElement;
children.add(new GraphQLStructureViewTreeElement(schemaNodeChildrenBase, nodeIdentifier));
}
}
}
}