code: private void getAllDescendants(Resource<L> parent, List<Resource<L>> descendants) {
          for (Resource<L> child : getChildren(parent)) {
              if (!descendants.contains(child)) {
                  getAllDescendants(child, descendants);
                  descendants.add(child);
              }
          }
          return;
      }
docs: make sure you call this with a graph lock - either read or write