override fun prepareChange()

in src/main/com/intellij/lang/jsgraphql/ide/introspection/source/GraphQLGeneratedSourcesUpdater.kt [69:113]


  override fun prepareChange(events: MutableList<out VFileEvent>): ChangeApplier? {
    val fileIndex = ProjectRootManager.getInstance(project).fileIndex
    var changed = false

    for (event in events) {
      if (event is VFileCreateEvent) {
        if (FileUtil.extensionEquals(event.childName, JsonFileType.DEFAULT_EXTENSION)) {
          changed = true
          break
        }
        continue
      }

      val file = event.file ?: continue
      if (!fileIndex.isInProject(file) && !FileUtil.isAncestor(generatedSdlDirPath, file.path, false)) continue

      if (event is VFileDeleteEvent) {
        // regenerate GraphQL SDLs from cache directory on deletion
        if (file.isDirectory && FileUtil.pathsEqual(file.path, generatedSdlDirPath) ||
            FileUtil.pathsEqual(file.parent?.path, generatedSdlDirPath)
        ) {
          changed = true
          break
        }
      }
      if (file in jsonSchemaFiles) {
        changed = true
        break
      }
      if (file.isDirectory && event !is VFileDeleteEvent) {
        if (file.children.any { it in jsonSchemaFiles || it.fileType == JsonFileType.INSTANCE }) {
          changed = true
          break
        }
      }
    }

    if (!changed) return null

    return object : ChangeApplier {
      override fun afterVfsChange() {
        scheduleJsonSchemaGeneration()
      }
    }
  }