docs: private static boolean doIsAssignableFrom(Type left, Type right, boolean failOpen) {
      if (left.equals(right)) {
        return true;
      }
      if (left.getSort() != right.getSort()) {
        return false;
      }
      if (left.getSort() != Type.OBJECT) {
        return false; // all other sorts require exact equality (even arrays)
      }
      // for object types we really need to know type hierarchy information to test for whether
      // right is assignable to left.
      Optional<Class<?>> leftClass = objectTypeToClassCache.getUnchecked(left);
      Optional<Class<?>> rightClass = objectTypeToClassCache.getUnchecked(right);
      if (!leftClass.isPresent() || !rightClass.isPresent()) {
        // This means one of the types being compared is a generated object.  So we can't easily check
        // it.  Just delegate responsibility to the verifier.
        return failOpen;
      }
      return leftClass.get().isAssignableFrom(rightClass.get());
    }