code: @Override
  	public <T extends AutoCloseable> T hook( T auto_closeable ) {
  		checkNotClosed( );
  		if ( auto_closeable != null ) {
  			if ( objects_to_close == null ) {
  				objects_to_close = new LinkedList<AutoCloseable>( );
  			}
  			objects_to_close.addFirst( auto_closeable );
  		}
  		return auto_closeable;
  	}
docs: <p>
  {@code hook} gives this {@code BasicRook} the responsibility to close the
  argument object, then returns it. When the argument object is {@code null},
  this method does nothing and returns {@code null}.
  </p>
  
  @param <T>
  the type of the object that needs to be closed.
  @param auto_closeable
  the object that needs to be closed
  @return the argument {@code auto_closeable}.
  
  @throws IllegalStateException
  When this {@code BasicRook} is closed.
  @since 1.0