code: @Warning("Using reflection")
    @Weight(Weight.Unit.NORMAL)
    public static <T> T deferredClose(@Nullable final T closeable) {
      if (closeable != null) {
        defer(new Deferred() {
          private static final long serialVersionUID = 2265124256013043847L;
  
          @Override
          public void executeDeferred() throws Exception {
            try {
              closeable.getClass().getMethod("close").invoke(closeable);
            } catch (Exception thr) {
              MetaErrorListeners.fireError("Error during deferred closing action", thr);
            }
          }
        });
      }
      return closeable;
    }
docs: Defer object containing public close() method. It catches all exceptions during closing and make notifications only for global error listeners. It finds a public 'close'
  method of the object and call that through reflection.
  
  @param <T>       type of the object to be processed
  @param closeable an object with close() method.
  @return the same object from arguments.
  @since 1.0