protected @NotNull Map<String, EntryInfo> getEntriesMap() {
    Map<String, EntryInfo> map = dereference(myEntries);
    if (map == null) {
      synchronized (myLock) {
        map = dereference(myEntries);

        if (map == null) {
          if (myCorrupted) {
            map = Collections.emptyMap();
          }
          else {
            try {
              map = createEntriesMap();
            }
            catch (Exception e) {
              myCorrupted = true;
              Logger.getInstance(getClass()).warn(e.getMessage() + ": " + myPath, e);
              map = Collections.emptyMap();
            }
          }

          myEntries = new SoftReference<>(map);
          // createEntriesMap recreates EntryInfo instances, so we need to ensure that we also recreate the children entries
          // cache which uses EntryInfo instances as keys (otherwise the cache lookup in list() would return empty children arrays)
          myChildrenEntries = new SoftReference<>(null);
        }
      }
    }
    return map;
  }
protected @NotNull Map<String, EntryInfo> getEntriesMap()