@NotNull
  @Override
  public String[] list(@NotNull VirtualFile file) {
    if (isInvalidSymLink(file)) {
      return ArrayUtil.EMPTY_STRING_ARRAY;
    }

    return myFsCache.list(file.getPath());
  }
 @Override
 public long getLength(@NotNull VirtualFile file) {
   final FileInfo fileInfo = myFsCache.getInfo(file);
   return fileInfo != null ? fileInfo.length : DEFAULT_LENGTH;
 }
 @Override
 public long getTimeStamp(@NotNull VirtualFile file) {
   final FileInfo fileInfo = myFsCache.getInfo(file);
   return fileInfo != null ? fileInfo.getTimestamp() : DEFAULT_TIMESTAMP;
 }
 @Override
 public boolean isWritable(@NotNull VirtualFile file) {
   final FileInfo fileInfo = myFsCache.getInfo(file);
   return fileInfo != null && notSet(fileInfo.attributes, FileInfo.FILE_ATTRIBUTE_READONLY);
 }
 @Override
 public boolean isDirectory(@NotNull VirtualFile file) {
   final FileInfo fileInfo = myFsCache.getInfo(file);
   return fileInfo != null && isSet(fileInfo.attributes, FileInfo.FILE_ATTRIBUTE_DIRECTORY);
 }
 @Override
 public boolean exists(@NotNull VirtualFile fileOrDirectory) {
   if (fileOrDirectory.getParent() == null) return true;
   return myFsCache.getInfo(fileOrDirectory) != null;
 }
 @Override
 public int getBooleanAttributes(@NotNull VirtualFile file, int flags) {
   return myFsCache.getBooleanAttributes(file, flags);
 }
 @Override
 public FileAttributes getAttributes(@NotNull VirtualFile file) {
   return myFsCache.getAttributes(file);
 }
 @NotNull
 @Override
 public String[] list(@NotNull VirtualFile file) {
   return myFsCache.list(file.getPath());
 }