docs: public void linkRequested() {
      assertLockHeld();
      Binding<?> binding;
      while ((binding = toLink.poll()) != null) {
        if (binding instanceof DeferredBinding) {
          DeferredBinding deferred = (DeferredBinding) binding;
          String key = deferred.deferredKey;
          boolean mustHaveInjections = deferred.mustHaveInjections;
          if (bindings.containsKey(key)) {
            continue; // A binding for this key has since been linked.
          }
          try {
            Binding<?> resolvedBinding =
                createBinding(key, binding.requiredBy, deferred.classLoader, mustHaveInjections);
            resolvedBinding.setLibrary(binding.library());
            resolvedBinding.setDependedOn(binding.dependedOn());
            // Fail if the type of binding we got wasn't capable of what was requested.
            if (!key.equals(resolvedBinding.provideKey) && !key.equals(resolvedBinding.membersKey)) {
              throw new IllegalStateException("Unable to create binding for " + key);
            }
            // Enqueue the JIT binding so its own dependencies can be linked.
            Binding<?> scopedBinding = scope(resolvedBinding);
            toLink.add(scopedBinding);
            putBinding(scopedBinding);
          } catch (InvalidBindingException e) {
            addError(e.type + " " + e.getMessage() + " required by " + binding.requiredBy);
            bindings.put(key, Binding.UNRESOLVED);
          } catch (UnsupportedOperationException e) {
            addError("Unsupported: " + e.getMessage() + " required by " + binding.requiredBy);
            bindings.put(key, Binding.UNRESOLVED);
          } catch (IllegalArgumentException e) {
            addError(e.getMessage() + " required by " + binding.requiredBy);
            bindings.put(key, Binding.UNRESOLVED);
          } catch (RuntimeException e) {
            throw e;
          } catch (Exception e) {
            throw new RuntimeException(e);
          }
        } else {
          // Attempt to attach the binding to its dependencies. If any dependency
          // is not available, the attach will fail. We'll enqueue creation of
          // that dependency and retry the attachment later.
          attachSuccess = true;
          binding.attach(this);
          if (attachSuccess) {
            binding.setLinked();
          } else {
            toLink.add(binding);
          }
        }
      }
  
      try {
        errorHandler.handleErrors(errors);
      } finally {
        errors.clear();
      }
    }