@Override
  public synchronized Set<? extends T> getDependent() {
    if(myDependencies == null) {
      HashSet<T> dependencies = new HashSet<>();
      HashMap<T, HashSet<T>> dependenciesToDependent = new HashMap<>();
      for (T member : myMembers) {
        Set<T> dependent = myMemberDependenciesStorage.getMemberDependencies(member);
        if (dependent != null) {
          for (final T aDependent : dependent) {
            if (mySelectedNormal.contains(aDependent) && !mySelectedAbstract.contains(aDependent)) {
              dependencies.add(member);
              HashSet<T> deps = dependenciesToDependent.get(member);
              if (deps == null) {
                deps = new HashSet<>();
                dependenciesToDependent.put(member, deps);
              }
              deps.add(aDependent);
            }
          }
        }
      }
      myDependencies = dependencies;
      myDependenciesToDependent = dependenciesToDependent;
    }

    return myDependencies;
  }
@Override
  public synchronized Set<? extends T> getDependent()