public void notifyListeners(String newName) {
      Iterator<WeakReference<RootNameListener>> it = list.iterator();

      while (it.hasNext()) {
        RootNameListener listener = it.next().get();

        if (listener == null) {
          it.remove();
          continue;
        }

        listener.setRootName(newName);
      }
    }
  public void addListener(File root, RootNameListener listener) {
    String cachedName = nameCache.get(root);
    if (cachedName != null) {
      listener.setRootName(cachedName);
      return;
    }

    ListenerSet set = listeners.get(root);

    if (set == null) {
      set = new ListenerSet();
      listeners.put(root, set);
    }

    set.add(listener);
    processRoot(root);
  }