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
}