@VisibleForTesting
  NewVirtualFile ensureRootCached(@NotNull String missedRootPath, @NotNull String missedRootUrl) {
    NewVirtualFileSystem fs = detectFileSystem(missedRootUrl, missedRootPath);
    if (fs == null) {
      return null;
    }

    try {
      NewVirtualFile cachedRoot = findRoot(missedRootPath, fs);
      LOG.trace(
        "\tforce caching " + missedRootUrl + " (protocol: " + fs.getProtocol() + ", path: " + missedRootPath + ") -> " + cachedRoot);
      return cachedRoot;
    }
    catch (Throwable t) {
      if (t instanceof ControlFlowException) {
        throw t;
      }
      StringBuilder sb = new StringBuilder();
      vfsPeer.forEachRoot((rootUrl, rootFileId) -> {
        sb.append("[#").append(rootFileId).append("]: '").append(rootUrl).append("'\n");
      });
      LOG.warn("Can't cache root[url: " + missedRootUrl + "][path: " + missedRootPath + "]. \nAll roots: " + sb, t);
      return null;
    }
  }
@VisibleForTesting
  NewVirtualFile ensureRootCached(@NotNull String missedRootPath, @NotNull String missedRootUrl)