suspend fun reload()

in src/main/com/intellij/lang/jsgraphql/ide/config/GraphQLConfigProvider.kt [387:446]


  suspend fun reload() {
    if (project.isDisposed) return
    checkCanceled()

    val discoveredConfigFiles = smartReadAction(project) { configFiles.value }
    saveModifiedDocuments(discoveredConfigFiles)

    val loader = GraphQLConfigLoader.getInstance(project)
    val explicitInvalidation = pendingInvalidation.getAndSet(false)
    var hasChanged = configData.keys.removeIf { !it.isValid || it !in discoveredConfigFiles }

    for (file in discoveredConfigFiles) {
      checkCanceled()
      val dir = file.parent.takeIf { it.isValid && it.isDirectory }
      if (!file.isValid || dir == null) {
        continue
      }

      val timeStamp = file.timeStamp
      val cached = configData[file]
      if (cached != null && cached.timeStamp == timeStamp && !cached.invalidated.getAndSet(false)) {
        continue
      }

      val result = loader.load(file)
      val entry = ConfigEntry(
        GraphQLConfig(project, dir, file, result.data ?: GraphQLRawConfig.EMPTY),
        timeStamp,
        result.status,
        result.error,
      )

      if (cached == null) {
        configData.putIfAbsent(file, entry)
      }
      else {
        configData.replace(file, cached, entry)
      }

      hasChanged = true
    }

    if (pollConfigContributors(explicitInvalidation)) {
      hasChanged = true
    }

    val shouldNotifyConfigurationChange = hasChanged ||
                                          explicitInvalidation ||
                                          !initialized

    if (shouldNotifyConfigurationChange) {
      LOG.debug {
        "GraphQL configuration changed: hasChanged=$hasChanged, explicitInvalidation=$explicitInvalidation, initialized=$initialized "
      }

      notifyConfigurationChanged()
    }

    initialized = true
  }