code: public Set<Resource<L>> getRootResources() {
          graphLockRead.lock();
          try {
              Set<Resource<L>> roots = new HashSet<>();
              Set<Resource<L>> allResources = resourcesGraph.vertexSet();
              for (Resource<L> resource : allResources) {
                  if (neighborIndex.predecessorsOf(resource).isEmpty()) {
                      roots.add(resource);
                  }
              }
              return Collections.unmodifiableSet(roots);
          } finally {
              graphLockRead.unlock();
          }
      }
docs: Returns an immutable {@link Set} of {@link Resource}s that are at the top of the hierarchy (that is, they do not
  have a parent).
  
  @return a {@link Set} of root {@link Resource}s