code: private void resolveAllUnresolvedBindings(GinjectorBindings collection) 
        throws UnableToCompleteException {
      // Create known/explicit bindings before descending into children.  This ensures that they are
      // available to any children that may need to depend on them.
      createBindingsForFactories(collection);
      
      // Visit all children and resolve bindings as appropriate.  This visitation may add implicit
      // bindings (and dependencies) to this ginjector
      for (GinjectorBindings child : collection.getChildren()) {
        resolveAllUnresolvedBindings(child);
      }
      
      // Resolve bindings within this ginjector and validate that everything looks OK.
      collection.resolveBindings();
    }
docs: Create bindings for factories and resolve all implicit bindings for all
  unresolved bindings in the each injector.
  
  <p> This performs a depth-first iteration over all the nodes, and fills in the
  bindings on the way up the tree.  This order is important because creating
  implicit bindings in a child {@link GinjectorBindings} may add dependencies to the
  parent.  By processing on the way up, we ensure that we only need to
  process each set once.
  
  @param collection {@link GinjectorBindings} to resolve bindings for
  @throws UnableToCompleteException if binding failed