docs: public Entry[] listEntries( DirectoryEntry directory )
      {
          Map<String, Entry> result = new TreeMap<String, Entry>();
          Map<String, FileEntry> missing = new HashMap<String, FileEntry>();
          Set<String> present = new HashSet<String>();
          Entry[] entries = backing.listEntries( DefaultDirectoryEntry.equivalent( backing, directory ) );
          for ( Entry entry : entries )
          {
              final String name = entry.getName();
              if ( entry instanceof FileEntry )
              {
                  for ( String type : digestFactories.keySet() )
                  {
                      if ( name.endsWith( type ) )
                      {
                          present.add( name );
                      }
                      else
                      {
                          missing.put( name + type, (FileEntry) entry );
                      }
                  }
                  result.put( name, new LinkFileEntry( this, directory, (FileEntry) entry ) );
              }
              else if ( entry instanceof DirectoryEntry )
              {
                  result.put( name, DefaultDirectoryEntry.equivalent( this, (DirectoryEntry) entry ) );
              }
          }
          missing.keySet().removeAll( present );
          for ( Map.Entry<String, FileEntry> entry : missing.entrySet() )
          {
              String name = entry.getKey();
              FileEntry fileEntry = entry.getValue();
              for ( DigestFileEntryFactory factory : digestFactories.values() )
              {
                  if ( name.endsWith( factory.getType() ) )
                  {
                      result.put( name, factory.create( this, directory, fileEntry ) );
                  }
              }
          }
          return result.values().toArray( new Entry[result.size()] );
      }