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