@Override
  public Archive openArchive(File root, final String contentEncoding, @NotNull final JavaFileManager.Location location) throws IOException {
    FileOperations.Archive arch = myArchiveCache.get(root);
    if (arch != null) {
      return arch == NULL_ARCHIVE ? null : arch;
    }
    try {
      arch = new ZipArchive(root, contentEncoding, location);
      myArchiveCache.put(root, arch);
      return arch;
    }
    catch (IOException e) {
      if (isJarOrZip(root)) {
        throw e; // there was really an error reading this archive
      }
      // remember this root as a non-supported file
      myArchiveCache.put(root, NULL_ARCHIVE);
    }
    return null;
  }
@Override
  public Archive openArchive(File root, final String contentEncoding, @NotNull final JavaFileManager.Location location)