docs: @NonNull @UiThread
    public static Unbinder bind(@NonNull Object target, @NonNull View source) {
      Class<?> targetClass = target.getClass();
      if (debug) Log.d(TAG, "Looking up binding for " + targetClass.getName());
      Constructor<? extends Unbinder> constructor = findBindingConstructorForClass(targetClass);
  
      if (constructor == null) {
        return Unbinder.EMPTY;
      }
  
      //noinspection TryWithIdenticalCatches Resolves to API 19+ only type.
      try {
        return constructor.newInstance(target, source);
      } catch (IllegalAccessException e) {
        throw new RuntimeException("Unable to invoke " + constructor, e);
      } catch (InstantiationException e) {
        throw new RuntimeException("Unable to invoke " + constructor, e);
      } catch (InvocationTargetException e) {
        Throwable cause = e.getCause();
        if (cause instanceof RuntimeException) {
          throw (RuntimeException) cause;
        }
        if (cause instanceof Error) {
          throw (Error) cause;
        }
        throw new RuntimeException("Unable to create binding instance.", cause);
      }
    }