private void addFileChildren()

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));
        }
      }
    }
  }