override fun prepareChange()

in src/main/com/intellij/lang/jsgraphql/ide/config/GraphQLConfigFileListener.kt [13:58]


  override fun prepareChange(events: List<VFileEvent>): AsyncFileListener.ChangeApplier? {
    var configurationsChanged = false
    val watchedDirs = collectWatchedDirectories()

    for (event in events) {
      ProgressManager.checkCanceled()
      if (configurationsChanged) break

      if (event is VFileCreateEvent) {
        if (event.childName in CONFIG_NAMES) {
          configurationsChanged = true
        }
        continue
      }

      val file = event.file ?: continue
      if (file.isDirectory) {
        if (file in watchedDirs || watchedDirs.any { VfsUtil.isAncestor(file, it, true) }) {
          configurationsChanged = true
        }
      }
      else {
        if (event is VFilePropertyChangeEvent) {
          if (VirtualFile.PROP_NAME == event.propertyName) {
            if (event.newValue is String && event.newValue in CONFIG_NAMES ||
                event.oldValue is String && event.oldValue in CONFIG_NAMES
            ) {
              configurationsChanged = true
            }
          }
        }
        else {
          if (file.name in CONFIG_NAMES) {
            configurationsChanged = true
          }
        }
      }
    }

    return if (configurationsChanged) object : AsyncFileListener.ChangeApplier {
      override fun afterVfsChange() {
        GraphQLConfigProvider.getInstance(project).scheduleConfigurationReload()
      }
    }
    else null
  }