private void introspectEndpoints()

in src/main/com/intellij/lang/jsgraphql/ide/introspection/GraphQLIntrospectionService.java [328:394]


  private void introspectEndpoints() {
    DumbService.getInstance(myProject).smartInvokeLater(() -> {
      ApplicationManager.getApplication().executeOnPooledThread(() -> {
        Set<String> visitedUrls = new HashSet<>();

        var configList = GraphQLConfigProvider.getInstance(myProject).getAllConfigs().stream()
          .map(GraphQLConfig::getDefault)
          .filter(Objects::nonNull)
          .toList();

        for (var config : configList) {
          GraphQLSchemaPointer schemaPointer = ContainerUtil.getFirstItem(config.getSchema());
          if (schemaPointer == null) {
            continue;
          }

          var schemaPath = schemaPointer.getFilePath();
          if (schemaPath == null) {
            continue;
          }

          List<GraphQLConfigEndpoint> endpoints = config.getEndpoints();
          for (GraphQLConfigEndpoint endpoint : endpoints) {
            if (!Boolean.TRUE.equals(endpoint.getIntrospect()) || schemaPath.isBlank()) {
              continue;
            }
            String url = endpoint.getUrl();
            if (!visitedUrls.add(url)) {
              continue;
            }

            Notification introspect = new Notification(
              GRAPHQL_NOTIFICATION_GROUP_ID,
              GraphQLBundle.message("graphql.notification.load.schema.from.endpoint.title"),
              GraphQLBundle.message("graphql.notification.load.schema.from.endpoint.body", endpoint.getDisplayName()),
              NotificationType.INFORMATION
            ).setImportant(true);


            introspect.addAction(new NotificationAction(
              GraphQLBundle.message("graphql.notification.load.schema.from.endpoint.action", url)) {
              @Override
              public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) {
                performIntrospectionQuery(endpoint);
              }
            });

            VirtualFile schemaFile = ReadAction.compute(() -> LocalFileSystem.getInstance().findFileByPath(schemaPath));
            if (schemaFile != null) {
              introspect.addAction(new NotificationAction(GraphQLBundle.message("graphql.notification.content.open.schema.file")) {
                @Override
                public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) {
                  if (schemaFile.isValid()) {
                    FileEditorManager.getInstance(myProject).openFile(schemaFile, true);
                  }
                  else {
                    notification.expire();
                  }
                }
              });
            }
            Notifications.Bus.notify(introspect);
          }
        }
      });
    }, ModalityState.nonModal());
  }