code: @SuppressWarnings("rawtypes")
      public static Object unpack(Object obj) {
          Object value = obj;
          while (value != null) {
              if (value instanceof Closure) {
                  value = ((Closure) value).call();
              } else if (value instanceof Callable) {
                  try {
                      value = ((Callable) value).call();
                  } catch (Exception e) {
                      throw new RuntimeException(e);
                  }
              } else {
                  return value;
              }
          }
          return value;
      }
docs: Unpacks the given object by recursively
  calling the {@code call()} method if the
  object is a {@code Closure} or {@code Callable}.
  @param obj the object to unpack
  @return the unpacked value of the object