@Override
  public @NotNull String valueOf(int nameId) throws IOException {
    assert nameId > 0 : nameId;

    boolean trackLookup = shouldTrackLookup(nameId);

    int mruCacheEntryIndex = toIndex(nameId);
    CacheEntryNameWithId entry = mruCache[mruCacheEntryIndex];
    if (entry != null && entry.nameId == nameId) {
      if (trackLookup) {
        cacheHitsCount.incrementAndGet();
      }
      return entry.name;
    }

    if (trackLookup) {
      cacheMissesCount.incrementAndGet();
    }

    String name = namesEnumerator.valueOf(nameId);
    if (name == null) {
      throw new IOException("VFS name enumerator corrupted: nameId(=" + nameId + ") is not found in enumerator (=null)");
    }
    mruCache[mruCacheEntryIndex] = new CacheEntryNameWithId(nameId, name);

    return name;
  }
@Override
  public @NotNull String valueOf(int nameId)