@Override
  public @NotNull VirtualFile createChildFile(Object requestor, @NotNull VirtualFile parent, @NotNull String name) throws IOException {
    if (!isValidName(name)) {
      throw new IOException(CoreBundle.message("file.invalid.name.error", name));
    }
    if (!parent.exists() || !parent.isDirectory()) {
      throw new IOException(IdeCoreBundle.message("vfs.target.not.directory.error", parent.getPath()));
    }

    if (!auxCreateFile(parent, name)) {
      var nioFile = convertToNioFileAndCheck(parent, false).resolve(name);
      var existing = parent.findChild(name);
      NioFiles.createIfNotExists(nioFile);
      if (existing != null) {
        // Wow, I/O created the file successfully even though it already existed in VFS. Maybe we got dir case sensitivity wrong?
        var knownCS = parent.isCaseSensitive();
        var actualCS = FileSystemUtil.readParentCaseSensitivity(new File(existing.getPath()));
        if ((actualCS == FileAttributes.CaseSensitivity.SENSITIVE) != knownCS) {
          // we need to update case sensitivity
          var event = VirtualDirectoryImpl.generateCaseSensitivityChangedEvent(parent, actualCS);
          if (event != null) {
            RefreshQueue.getInstance().processEvents(false, List.of(event));
          }
        }
      }
    }

    auxNotifyCompleted(handler -> handler.createFile(parent, name));

    return new FakeVirtualFile(parent, name);
  }
@Override
  public @NotNull VirtualFile createChildFile(Object requestor, @NotNull VirtualFile parent, @NotNull String name)