public synchronized HttpVirtualFileImpl getOrCreateFile(@Nullable HttpVirtualFileImpl parent, @NotNull Url url, @NotNull String path, final boolean directory) {
    Map<Url, HttpVirtualFileImpl> cache = directory ? remoteDirectories : remoteFiles;
    HttpVirtualFileImpl file = cache.get(url);
    if (file == null) {
      if (directory) {
        file = new HttpVirtualFileImpl(getHttpFileSystem(url), parent, path, null);
      }
      else {
        RemoteFileInfoImpl fileInfo = new RemoteFileInfoImpl(url, this);
        file = new HttpVirtualFileImpl(getHttpFileSystem(url), parent, path, fileInfo);
        fileInfo.addDownloadingListener(new MyDownloadingListener(file));
      }
      cache.put(url, file);
    }
    return file;
  }
public synchronized HttpVirtualFileImpl getOrCreateFile(@Nullable HttpVirtualFileImpl parent, @NotNull Url url, @NotNull String path, final boolean directory)