private static boolean doExecute()

in src/main/com/intellij/lang/jsgraphql/ide/search/GraphQLDefinitionsSearchExecutor.java [32:67]


  private static boolean doExecute(PsiElement sourceElement, final Processor<? super PsiElement> consumer) {

    if (sourceElement instanceof GraphQLIdentifier && sourceElement.getParent() instanceof GraphQLTypeNameDefinition) {
      final GraphQLInterfaceTypeDefinition interfaceTypeDefinition =
        PsiTreeUtil.getParentOfType(sourceElement, GraphQLInterfaceTypeDefinition.class);
      if (interfaceTypeDefinition != null) {
        GraphQLPsiSearchHelper.getInstance(sourceElement.getProject())
          .processNamedElements(sourceElement, sourceElement.getText(), namedElement -> {
            ProgressManager.checkCanceled();
            if (namedElement instanceof GraphQLIdentifier &&
                PsiTreeUtil.getParentOfType(namedElement, GraphQLImplementsInterfaces.class) != null) {
              final GraphQLTypeSystemDefinition typeSystemDefinition =
                PsiTreeUtil.getParentOfType(namedElement, GraphQLObjectTypeDefinition.class, GraphQLObjectTypeExtensionDefinition.class);
              if (typeSystemDefinition instanceof GraphQLObjectTypeDefinition) {
                final GraphQLTypeNameDefinition typeNameDefinition =
                  ((GraphQLObjectTypeDefinition)typeSystemDefinition).getTypeNameDefinition();
                if (typeNameDefinition != null) {
                  consumer.process(typeNameDefinition.getNameIdentifier());
                }
              }
              else if (typeSystemDefinition instanceof GraphQLObjectTypeExtensionDefinition) {
                final GraphQLTypeName typeName = ((GraphQLObjectTypeExtensionDefinition)typeSystemDefinition).getTypeName();
                if (typeName != null) {
                  consumer.process(typeName.getNameIdentifier());
                }
              }
            }
            // continue looking for all implementing types
            return true;
          });
      }
    }

    // execute result
    return true;
  }