code: public Map<String, Binding<?>> linkAll() {
      assertLockHeld();
      if (linkedBindings != null) {
        return linkedBindings;
      }
      for (Binding<?> binding : bindings.values()) {
        if (!binding.isLinked()) {
          toLink.add(binding);
        }
      }
      linkRequested(); // This method throws if bindings are not resolvable/linkable.
      linkedBindings = Collections.unmodifiableMap(bindings);
      return linkedBindings;
    }
docs: Links all known bindings (whether requested or installed), plus all of their
  transitive dependencies. This loads injectable types' bindings as necessary to fill in
  the gaps.  If this method has returned successfully at least once, all further
  work is short-circuited.
  
  @throws AssertionError if this method is not called within a synchronized block which
  holds this {@link Linker} as the lock object.