docs: private Binding<?> createBinding(String key, Object requiredBy, ClassLoader classLoader,
        boolean mustHaveInjections) {
      String builtInBindingsKey = Keys.getBuiltInBindingsKey(key);
      if (builtInBindingsKey != null) {
        return new BuiltInBinding<Object>(key, requiredBy, classLoader, builtInBindingsKey);
      }
      String lazyKey = Keys.getLazyKey(key);
      if (lazyKey != null) {
        return new LazyBinding<Object>(key, requiredBy, classLoader, lazyKey);
      }
  
      String className = Keys.getClassName(key);
      if (className == null) {
        throw new InvalidBindingException(key,
            "is a generic class or an array and can only be bound with concrete type parameter(s) "
            + "in a @Provides method.");
      }
      if (Keys.isAnnotated(key)) {
        throw new InvalidBindingException(key,
            "is a @Qualifier-annotated type and must be bound by a @Provides method.");
      }
      Binding<?> binding =
          plugin.getAtInjectBinding(key, className, classLoader, mustHaveInjections);
      if (binding != null) {
        return binding;
      }
      throw new InvalidBindingException(className, "could not be bound with key " + key);
    }