in src/main/com/intellij/lang/jsgraphql/ide/introspection/GraphQLConvertJsonIntrospectionToSdlCommand.kt [30:73]
override fun run() {
GraphQLConvertJsonIntrospectionToSdlCommandScope.get(project).launch {
val element = readAction { elementPointer.element } ?: run {
LOG.warn("Failed to find PSI element for introspection JSON file")
return@launch
}
try {
val (introspectionJson, outputDir, outputFileName) = readAction {
val introspectionJson = element.containingFile.text
val jsonFile = element.containingFile.virtualFile
val outputDir = jsonFile.parent
val outputFileName = jsonFile.nameWithoutExtension + ".graphql"
Triple(introspectionJson, outputDir, outputFileName)
}
if (outputDir == null) {
LOG.error("Failed to find output directory for introspection JSON file")
return@launch
}
val schemaAsSDL = GraphQLIntrospectionService.printIntrospectionAsGraphQL(project, introspectionJson)
GraphQLIntrospectionSchemaWriter.getInstance(project).createOrUpdateIntrospectionFile(
IntrospectionOutput(schemaAsSDL, GraphQLIntrospectionService.IntrospectionOutputFormat.SDL),
outputDir,
outputFileName,
)
}
catch (e: CancellationException) {
throw e
}
catch (e: Exception) {
val notification = Notification(
GRAPHQL_NOTIFICATION_GROUP_ID,
GraphQLBundle.message("graphql.notification.introspection.error.title"),
GraphQLBundle.message("graphql.notification.introspection.error.body"),
NotificationType.ERROR
).setImportant(true)
notifyAboutPossiblyInvalidIntrospectionSchema(notification, e)
addShowQueryErrorDetailsAction(project, notification, e)
Notifications.Bus.notify(notification)
}
}
}